Page not found
The address may be outdated or misspelled. No private or duplicate route is exposed here.
diff --git a/app/docs.test.ts b/app/docs.test.ts
index 82d3a306..eaeb5bec 100644
--- a/app/docs.test.ts
+++ b/app/docs.test.ts
@@ -60,6 +60,38 @@ test("every package page contains installation, guide, and complete API sections
}
});
+test("UI components have a dedicated catalog and complete detail pages", () => {
+ const reference = JSON.parse(
+ readFileSync(join(root, "node_modules", "@wrnexus", "ui", "component-reference.json"), "utf8"),
+ ) as { count: number; components: Array<{ name: string; props: unknown[] }> };
+ const catalog = readFileSync(join(root, "app", "pages", "components.wrn"), "utf8");
+ const details = readdirSync(join(root, "app", "pages", "components")).filter((file) =>
+ file.endsWith(".wrn"),
+ );
+ expect(catalog).toContain(`@wrnexus/ui · ${reference.count} components`);
+ expect(catalog.match(/class="component-card"/g)).toHaveLength(reference.count);
+ expect(details).toHaveLength(reference.count);
+ const button = readFileSync(join(root, "app", "pages", "components", "button.wrn"), "utf8");
+ expect(button).toContain("Props and attributes");
+ expect(button).toContain("Requirement");
+ expect(button).toContain("Default");
+ expect(button).toContain('id="usage"');
+ expect(button).toContain('id="source"');
+ const uiPackage = readFileSync(join(packagePages, "ui.wrn"), "utf8");
+ expect(uiPackage).toContain('href="/components"');
+ expect(uiPackage).not.toContain("All 901 UI components and props");
+});
+
+test("primary navigation exposes the component catalog", () => {
+ for (const file of [
+ join(root, "app", "pages", "index.wrn"),
+ join(root, "app", "pages", "getting-started.wrn"),
+ join(root, "app", "pages", "packages", "core.wrn"),
+ ]) {
+ expect(readFileSync(file, "utf8")).toContain('Components');
+ }
+});
+
test("every package page shows multiple named usage examples", () => {
for (const name of expected) {
const source = readFileSync(join(packagePages, `${name}.wrn`), "utf8");
diff --git a/app/pages/404.wrn b/app/pages/404.wrn
index 92953d2e..c19f52aa 100644
--- a/app/pages/404.wrn
+++ b/app/pages/404.wrn
@@ -7,8 +7,8 @@ page Pagenotfound {
view {
The address may be outdated or misspelled. No private or duplicate route is exposed here.
WRNexusJS 0.2.64 packages are not available from the public npm registry. Installation requires approval and private registry credentials supplied by WorkRoot. Never paste registry tokens into source control, issue reports, or support messages.
bunx @wrnexus/cli@0.2.64 create my-appAccess approval, response time, licensing terms, and support level remain owner-controlled. This site does not collect access requests directly.
WRNexusJS is Bun-native and SSR-first. File discovery maps pages and API handlers; middleware enriches or short-circuits a request; the compiler turns .wrn declarations into server render functions and small feature runtimes.
core owns contexts, middleware, sessions and rooms; router discovers routes; compiler parses .wrn; ssr renders documents; csr supplies browser runtimes; dev-server and cli orchestrate development and builds.
Validation happens at trust boundaries. Session authentication establishes identity; authorization makes resource decisions. CSP, Trusted Types, CSRF, upload checks, WebSocket origins, request limits, and output escaping are layered controls—not substitutes for application policy.
Rooms are process-local unless connected through pub/sub. Redis-backed pub/sub distributes events. Queue durability depends on the selected driver and must be evaluated explicitly.
The gateway can dispatch multiple applications while preserving route, component, asset, config, and session boundaries. Validate host routing and isolation before production.
wrnexus build . produces dist/server.js and hashed/static assets. Run the server with Bun, apply migrations before traffic, terminate TLS at a trusted edge, and forward only expected proxy headers.
Mobile compatibility bridges SSR-safe Capacitor capabilities; native route generation is experimental and is not general web portability. Test each target platform.
app/routes.gen.ts, .wrnexus/, and dist/ are generated. The runtime is Bun-only. Preview packages are private. Historical compatibility and long-term support policy are not yet published.
No comparative speed claims are published. A valid baseline must record scripts, commit, Bun/framework versions, hardware, OS, warmup, samples, workload, raw results, median, percentiles, memory, HTML size, browser JavaScript size, and run date.
The roadmap starts with WRNexusJS-only measurements before any maintained equivalent-workload comparison.
Documentation is aligned to all 26 installed packages. This release adds @wrnexus/helpers, original-request URL helpers, safe login redirects, working wrnexus workspace add, and forward-auth redirect propagation.
Run wrnexus update --latest and keep every @wrnexus/* package on 0.2.64. Existing applications must explicitly add @wrnexus/helpers before importing it; newly scaffolded applications include it automatically.
The packages use semantic-looking versions, but a formal compatibility and old-release support policy has not been approved. Preview consumers should treat minor releases as potentially requiring migration review.
Production-ready, server-rendered components documented directly from the installed .wrn sources.
Showing {category} components
Reusable accept all cookies button component.
View component → +contentReusable accessible accordion component.
View component → +contentReusable accessible carousel component.
View component → +contentReusable accessible chart summary component.
View component → +overlaysReusable accessible dialog component.
View component → +contentReusable accessible error summary component.
View component → +contentReusable accessible icon component.
View component → +overlaysReusable accessible menu component.
View component → +contentReusable accessible tabs component.
View component → +contentReusable accessible tooltip component.
View component → +contentReusable accordion component.
View component → +overlaysReusable account menu component.
View component → +feedbackReusable account status banner component.
View component → +overlaysReusable action menu component.
View component → +dataReusable active filter list component.
View component → +dataReusable activity list component.
View component → +contentReusable add on card component.
View component → +formsReusable address input component.
View component → +contentReusable address preview component.
View component → +contentReusable advanced filter builder component.
View component → +feedbackReusable alert component.
View component → +overlaysReusable alert dialog component.
View component → +formsReusable amount input component.
View component → +contentReusable analytics dashboard preview component.
View component → +layoutReusable anchor navigation component.
View component → +coreReusable announcement bar component.
View component → +formsReusable apartment input component.
View component → +feedbackReusable api authentication notice component.
View component → +contentReusable api endpoint card component.
View component → +contentReusable api error example component.
View component → +dataReusable api header table component.
View component → +overlaysReusable api key create dialog component.
View component → +contentReusable api key display component.
View component → +formsReusable api key input component.
View component → +feedbackReusable api method badge component.
View component → +dataReusable api parameter table component.
View component → +feedbackReusable api rate limit notice component.
View component → +contentReusable api request example component.
View component → +contentReusable api response example component.
View component → +dataReusable api schema table component.
View component → +contentReusable api schema viewer component.
View component → +feedbackReusable api version badge component.
View component → +layoutReusable app header component.
View component → +layoutReusable architecture section component.
View component → +visualizationReusable area chart component.
View component → +layoutReusable article hero component.
View component → +layoutReusable article layout component.
View component → +actionsReusable article newsletter c t a component.
View component → +layoutReusable article page shell component.
View component → +actionsReusable article share actions component.
View component → +coreReusable aspect ratio component.
View component → +contentReusable asset card component.
View component → +formsReusable attachment picker component.
View component → +contentReusable attachment upload component.
View component → +contentReusable audio upload component.
View component → +contentReusable audit log preview component.
View component → +dataReusable audit table component.
View component → +formsReusable authenticator code input component.
View component → +contentReusable author avatar component.
View component → +contentReusable author card component.
View component → +contentReusable authorized application card component.
View component → +dataReusable auto grid component.
View component → +contentReusable automation example card component.
View component → +contentReusable availability calendar component.
View component → +contentReusable avatar component.
View component → +formsReusable avatar group component.
View component → +contentReusable avatar upload component.
View component → +actionsReusable back button component.
View component → +coreReusable back to top component.
View component → +feedbackReusable badge component.
View component → +contentReusable bank transfer details component.
View component → +feedbackReusable banner component.
View component → +visualizationReusable bar chart component.
View component → +feedbackReusable beta badge component.
View component → +contentReusable billing address form component.
View component → +contentReusable billing example component.
View component → +formsReusable billing period toggle component.
View component → +formsReusable blackout date picker component.
View component → +contentReusable blog card component.
View component → +dataReusable blog grid component.
View component → +dataReusable blog list component.
View component → +contentReusable blog search component.
View component → +contentReusable body text component.
View component → +formsReusable border radius picker component.
View component → +layoutReusable bottom navigation component.
View component → +formsReusable brand color picker component.
View component → +formsReusable brand selector component.
View component → +coreReusable breadcrumbs component.
View component → +layoutReusable browser frame component.
View component → +contentReusable budget range slider component.
View component → +formsReusable budget selector component.
View component → +formsReusable business hours picker component.
View component → +actionsReusable button component.
View component → +formsReusable button group component.
View component → +formsReusable button selector component.
View component → +contentReusable calendar component.
View component → +dataReusable calendar grid component.
View component → +layoutReusable calendar header component.
View component → +layoutReusable calendar navigation component.
View component → +formsReusable callback url input component.
View component → +contentReusable campaign card component.
View component → +contentReusable campaign performance preview component.
View component → +visualizationReusable campaign progress component.
View component → +dataReusable capability grid component.
View component → +formsReusable captcha field component.
View component → +contentReusable card component.
View component → +contentReusable card payment form component.
View component → +formsReusable card selector component.
View component → +feedbackReusable card skeleton component.
View component → +contentReusable career application form component.
View component → +dataReusable career benefits grid component.
View component → +contentReusable carousel component.
View component → +contentReusable case study card component.
View component → +layoutReusable case study hero component.
View component → +contentReusable case study preview component.
View component → +actionsReusable centered c t a component.
View component → +layoutReusable centered hero component.
View component → +layoutReusable centered section header component.
View component → +contentReusable certificate upload component.
View component → +feedbackReusable certification badge component.
View component → +layoutReusable challenge section component.
View component → +feedbackReusable channel badge component.
View component → +contentReusable channel card component.
View component → +visualizationReusable channel comparison chart component.
View component → +dataReusable channel comparison table component.
View component → +visualizationReusable channel fallback diagram component.
View component → +visualizationReusable channel flow component.
View component → +contentReusable channel icon component.
View component → +dataReusable channel rate table component.
View component → +formsReusable channel selector component.
View component → +feedbackReusable character counter component.
View component → +feedbackReusable chart empty state component.
View component → +contentReusable chart tooltip component.
View component → +coreReusable checkbox component.
View component → +formsReusable checkbox group component.
View component → +contentReusable checklist component.
View component → +visualizationReusable checklist progress component.
View component → +coreReusable chip component.
View component → +formsReusable chip input component.
View component → +visualizationReusable circular progress component.
View component → +formsReusable city selector component.
View component → +actionsReusable clear filters button component.
View component → +contentReusable clickable card component.
View component → +actionsReusable close button component.
View component → +coreReusable cluster component.
View component → +contentReusable code component.
View component → +contentReusable code block component.
View component → +actionsReusable code copy button component.
View component → +layoutReusable code header component.
View component → +formsReusable code input component.
View component → +feedbackReusable code language badge component.
View component → +contentReusable code tabs component.
View component → +contentReusable code text component.
View component → +visualizationReusable cohort chart component.
View component → +dataReusable color grid component.
View component → +formsReusable color hex input component.
View component → +formsReusable color picker component.
View component → +formsReusable color selector component.
View component → +contentReusable color swatch component.
View component → +coreReusable combobox component.
View component → +feedbackReusable coming soon badge component.
View component → +feedbackReusable coming soon state component.
View component → +contentReusable command block component.
View component → +overlaysReusable command menu component.
View component → +formsReusable command search input component.
View component → +layoutReusable company hero component.
View component → +formsReusable company name input component.
View component → +layoutReusable company page shell component.
View component → +formsReusable company size selector component.
View component → +formsReusable comparison date range picker component.
View component → +dataReusable comparison table component.
View component → +visualizationReusable completion meter component.
View component → +dataReusable compliance badge list component.
View component → +contentReusable compliance program card component.
View component → +overlaysReusable confirmation dialog component.
View component → +formsReusable confirm password input component.
View component → +contentReusable connected account card component.
View component → +contentReusable connection card component.
View component → +contentReusable consent timeline preview component.
View component → +contentReusable contact card component.
View component → +actionsReusable contact c t a component.
View component → +contentReusable contact form component.
View component → +layoutReusable contact hero component.
View component → +layoutReusable contact page shell component.
View component → +coreReusable contact sales banner component.
View component → +actionsReusable contact sales button component.
View component → +contentReusable contact sales form component.
View component → +coreReusable container component.
View component → +overlaysReusable context menu component.
View component → +contentReusable context switcher component.
View component → +dataReusable conversation list component.
View component → +contentReusable conversation preview component.
View component → +visualizationReusable conversion chart component.
View component → +feedbackReusable cookie banner component.
View component → +dataReusable cookie category list component.
View component → +formsReusable cookie category toggle component.
View component → +coreReusable cookie consent component.
View component → +dataReusable cookie details table component.
View component → +overlaysReusable cookie preferences dialog component.
View component → +dataReusable cookie table component.
View component → +formsReusable coordinates input component.
View component → +formsReusable coordinates picker component.
View component → +actionsReusable copy button component.
View component → +actionsReusable copy code button component.
View component → +formsReusable copy secret field component.
View component → +visualizationReusable cost breakdown chart component.
View component → +contentReusable cost summary component.
View component → +feedbackReusable counter component.
View component → +formsReusable country calling code input component.
View component → +formsReusable country calling code selector component.
View component → +formsReusable country selector component.
View component → +formsReusable coupon input component.
View component → +formsReusable credit amount input component.
View component → +contentReusable cron builder component.
View component → +formsReusable cron input component.
View component → +contentReusable csv upload component.
View component → +layoutReusable c t a section component.
View component → +formsReusable currency input component.
View component → +formsReusable currency selector component.
View component → +formsReusable current password input component.
View component → +contentReusable customer logo component.
View component → +contentReusable customer story card component.
View component → +actionsReusable danger button component.
View component → +contentReusable data protection card component.
View component → +dataReusable data retention table component.
View component → +dataReusable data table component.
View component → +formsReusable date input component.
View component → +formsReusable date picker component.
View component → +contentReusable date range calendar component.
View component → +formsReusable date range picker component.
View component → +contentReusable date range slider component.
View component → +formsReusable date time input component.
View component → +formsReusable date time picker component.
View component → +formsReusable date time range picker component.
View component → +formsReusable decimal input component.
View component → +dataReusable definition list component.
View component → +overlaysReusable delete confirmation dialog component.
View component → +contentReusable delivery preview component.
View component → +visualizationReusable delivery status chart component.
View component → +visualizationReusable delivery status timeline component.
View component → +contentReusable demo request form component.
View component → +formsReusable department input component.
View component → +feedbackReusable deprecated feature alert component.
View component → +dataReusable description list component.
View component → +layoutReusable desktop navigation component.
View component → +actionsReusable developer c t a component.
View component → +layoutReusable developer hero component.
View component → +layoutReusable developer page shell component.
View component → +contentReusable developer search component.
View component → +coreReusable developers mega menu component.
View component → +overlaysReusable developers menu component.
View component → +contentReusable device card component.
View component → +coreReusable disclosure component.
View component → +formsReusable discount input component.
View component → +coreReusable display heading component.
View component → +formsReusable display name input component.
View component → +coreReusable divider component.
View component → +contentReusable document preview component.
View component → +contentReusable document upload component.
View component → +formsReusable domain input component.
View component → +actionsReusable do not sell link component.
View component → +visualizationReusable donut chart component.
View component → +actionsReusable download action component.
View component → +actionsReusable download button component.
View component → +contentReusable download gate form component.
View component → +actionsReusable download policy button component.
View component → +contentReusable download resource form component.
View component → +coreReusable drawer component.
View component → +overlaysReusable dropdown menu component.
View component → +layoutReusable dropdown navigation component.
View component → +formsReusable duration input component.
View component → +formsReusable duration picker component.
View component → +contentReusable duration slider component.
View component → +contentReusable elevated card component.
View component → +formsReusable email body editor component.
View component → +contentReusable email composer component.
View component → +formsReusable email input component.
View component → +formsReusable emoji picker component.
View component → +feedbackReusable empty state component.
View component → +visualizationReusable encryption diagram component.
View component → +actionsReusable enterprise c t a component.
View component → +layoutReusable enterprise hero component.
View component → +contentReusable enterprise pricing card component.
View component → +formsReusable environment selector component.
View component → +contentReusable environment switcher component.
View component → +actionsReusable error actions component.
View component → +contentReusable error card component.
View component → +contentReusable error code component.
View component → +layoutReusable error hero component.
View component → +contentReusable error illustration component.
View component → +contentReusable error page component.
View component → +layoutReusable error page shell component.
View component → +feedbackReusable error state component.
View component → +actionsReusable error support link component.
View component → +contentReusable estimated cost summary component.
View component → +dataReusable event table component.
View component → +contentReusable expandable text component.
View component → +formsReusable expiry date time picker component.
View component → +visualizationReusable export progress component.
View component → +actionsReusable external link component.
View component → +contentReusable eyebrow text component.
View component → +contentReusable factor card component.
View component → +contentReusable fallback route builder component.
View component → +visualizationReusable fallback route diagram component.
View component → +coreReusable faq component.
View component → +coreReusable faqaccordion component.
View component → +contentReusable favicon upload component.
View component → +formsReusable fax input component.
View component → +contentReusable feature card component.
View component → +contentReusable feature checklist component.
View component → +dataReusable feature comparison table component.
View component → +contentReusable featured blog card component.
View component → +layoutReusable feature details panel component.
View component → +dataReusable feature grid component.
View component → +contentReusable feature icon card component.
View component → +dataReusable feature list component.
View component → +contentReusable feature tabs component.
View component → +visualizationReusable feature timeline component.
View component → +feedbackReusable feature unavailable state component.
View component → +actionsReusable field actions component.
View component → +coreReusable file-upload component.
View component → +formsReusable file input component.
View component → +dataReusable file list component.
View component → +formsReusable file size input component.
View component → +contentReusable file size label component.
View component → +feedbackReusable file type badge component.
View component → +contentReusable file upload component.
View component → +dataReusable filterable table component.
View component → +coreReusable filter bar component.
View component → +overlaysReusable filter menu component.
View component → +formsReusable filter search input component.
View component → +actionsReusable final c t a component.
View component → +formsReusable first name input component.
View component → +coreReusable flex component.
View component → +formsReusable font picker component.
View component → +formsReusable font size picker component.
View component → +formsReusable font weight picker component.
View component → +contentReusable footer language switcher component.
View component → +feedbackReusable footer status indicator component.
View component → +contentReusable forbidden page component.
View component → +feedbackReusable forbidden state component.
View component → +contentReusable forgot password form component.
View component → +contentReusable form component.
View component → +actionsReusable form actions component.
View component → +feedbackReusable form alert component.
View component → +overlaysReusable form dialog component.
View component → +coreReusable form error component.
View component → +contentReusable form error summary component.
View component → +formsReusable form field component.
View component → +dataReusable form grid component.
View component → +formsReusable form group component.
View component → +contentReusable form help text component.
View component → +contentReusable form label component.
View component → +visualizationReusable form progress component.
View component → +dataReusable form row component.
View component → +layoutReusable form section component.
View component → +coreReusable full bleed component.
View component → +overlaysReusable fullscreen dialog component.
View component → +visualizationReusable funnel chart component.
View component → +visualizationReusable geo chart component.
View component → +formsReusable geofence editor component.
View component → +actionsReusable ghost button component.
View component → +contentReusable glass card component.
View component → +contentReusable global search component.
View component → +actionsReusable gradient c t a component.
View component → +formsReusable gradient picker component.
View component → +formsReusable gradient stop editor component.
View component → +dataReusable grid component.
View component → +contentReusable guide card component.
View component → +contentReusable guide checklist component.
View component → +feedbackReusable guide difficulty badge component.
View component → +dataReusable guide grid component.
View component → +contentReusable guide step component.
View component → +layoutReusable header component.
View component → +actionsReusable header actions component.
View component → +feedbackReusable health indicator component.
View component → +layoutReusable hero component.
View component → +actionsReusable hero actions component.
View component → +layoutReusable hero code panel component.
View component → +contentReusable hero gradient text component.
View component → +actionsReusable hero primary action component.
View component → +contentReusable hero product preview component.
View component → +actionsReusable hero secondary action component.
View component → +contentReusable hero trust text component.
View component → +formsReusable hex color input component.
View component → +formsReusable hidden field component.
View component → +contentReusable highlight text component.
View component → +contentReusable holiday calendar component.
View component → +formsReusable hostname input component.
View component → +formsReusable hour picker component.
View component → +formsReusable hsl color input component.
View component → +coreReusable hstack component.
View component → +formsReusable html editor component.
View component → +contentReusable human approval step component.
View component → +contentReusable icon component.
View component → +actionsReusable icon button component.
View component → +formsReusable icon picker component.
View component → +formsReusable icon selector component.
View component → +formsReusable identifier input component.
View component → +contentReusable illustration component.
View component → +contentReusable image compression preview component.
View component → +formsReusable image editor component.
View component → +overlaysReusable image preview dialog component.
View component → +formsReusable image selector component.
View component → +contentReusable image upload component.
View component → +visualizationReusable import progress component.
View component → +feedbackReusable incident alert component.
View component → +feedbackReusable incident banner component.
View component → +contentReusable incident card component.
View component → +dataReusable incident list component.
View component → +visualizationReusable incident response flow component.
View component → +feedbackReusable incident severity badge component.
View component → +visualizationReusable incident timeline component.
View component → +feedbackReusable industry badge component.
View component → +formsReusable industry selector component.
View component → +contentReusable info card component.
View component → +coreReusable inline component.
View component → +feedbackReusable inline alert component.
View component → +contentReusable inline code component.
View component → +coreReusable input component.
View component → +formsReusable input group component.
View component → +layoutReusable inset panel component.
View component → +formsReusable integer input component.
View component → +contentReusable integration card component.
View component → +contentReusable invoice line item component.
View component → +contentReusable invoice summary component.
View component → +formsReusable ip address input component.
View component → +contentReusable job card component.
View component → +visualizationReusable job progress component.
View component → +formsReusable job title input component.
View component → +formsReusable json input component.
View component → +contentReusable json viewer component.
View component → +dataReusable key value table component.
View component → +contentReusable kyc document upload component.
View component → +formsReusable language selector component.
View component → +contentReusable language switcher component.
View component → +formsReusable last name input component.
View component → +visualizationReusable latency metric component.
View component → +formsReusable latitude input component.
View component → +dataReusable leadership grid component.
View component → +contentReusable lead text component.
View component → +feedbackReusable legal acceptance notice component.
View component → +dataReusable legal bullet list component.
View component → +contentReusable legal contact block component.
View component → +dataReusable legal definition list component.
View component → +layoutReusable legal document header component.
View component → +layoutReusable legal document layout component.
View component → +layoutReusable legal hero component.
View component → +formsReusable legal language selector component.
View component → +feedbackReusable legal notice component.
View component → +layoutReusable legal page shell component.
View component → +actionsReusable legal print button component.
View component → +formsReusable legal region selector component.
View component → +layoutReusable legal section component.
View component → +contentReusable legal summary component.
View component → +dataReusable legal table component.
View component → +coreReusable legal table of contents component.
View component → +feedbackReusable legal version badge component.
View component → +formsReusable letter spacing picker component.
View component → +formsReusable license key input component.
View component → +overlaysReusable lightbox component.
View component → +visualizationReusable line chart component.
View component → +formsReusable line height picker component.
View component → +coreReusable link component.
View component → +actionsReusable link button component.
View component → +dataReusable list component.
View component → +actionsReusable loading button component.
View component → +formsReusable locale selector component.
View component → +actionsReusable localized route link component.
View component → +formsReusable location picker component.
View component → +contentReusable logo component.
View component → +coreReusable logo cloud component.
View component → +contentReusable logo upload component.
View component → +overlaysReusable logout dialog component.
View component → +dataReusable log table component.
View component → +formsReusable longitude input component.
View component → +feedbackReusable maintenance alert component.
View component → +feedbackReusable maintenance banner component.
View component → +contentReusable maintenance card component.
View component → +contentReusable maintenance page component.
View component → +feedbackReusable maintenance state component.
View component → +formsReusable maintenance window picker component.
View component → +formsReusable map picker component.
View component → +formsReusable markdown editor component.
View component → +layoutReusable marketing page shell component.
View component → +layoutReusable marketing section header component.
View component → +formsReusable masked secret field component.
View component → +overlaysReusable mega menu component.
View component → +dataReusable member list component.
View component → +formsReusable mention input component.
View component → +feedbackReusable message character counter component.
View component → +contentReusable message composer component.
View component → +contentReusable message composer preview component.
View component → +formsReusable message limit input component.
View component → +contentReusable message preview component.
View component → +contentReusable message volume slider component.
View component → +visualizationReusable metric component.
View component → +contentReusable metric card component.
View component → +dataReusable metric grid component.
View component → +contentReusable metric text component.
View component → +formsReusable minute picker component.
View component → +layoutReusable mission section component.
View component → +layoutReusable mobile device frame component.
View component → +formsReusable mobile input component.
View component → +actionsReusable mobile menu button component.
View component → +layoutReusable mobile navigation component.
View component → +contentReusable mobile table card component.
View component → +coreReusable modal component.
View component → +formsReusable monthly volume selector component.
View component → +formsReusable month picker component.
View component → +formsReusable month year picker component.
View component → +contentReusable multi file upload component.
View component → +formsReusable multiple email input component.
View component → +coreReusable multi select component.
View component → +contentReusable muted text component.
View component → +formsReusable name input component.
View component → +coreReusable narrow container component.
View component → +layoutReusable navigation component.
View component → +contentReusable navigation item component.
View component → +overlaysReusable navigation mega menu component.
View component → +feedbackReusable new badge component.
View component → +formsReusable new password input component.
View component → +actionsReusable newsletter c t a component.
View component → +contentReusable newsletter form component.
View component → +feedbackReusable no results state component.
View component → +contentReusable not found page component.
View component → +feedbackReusable not found state component.
View component → +contentReusable notification card component.
View component → +coreReusable notification dot component.
View component → +dataReusable notification list component.
View component → +formsReusable number input component.
View component → +contentReusable office card component.
View component → +contentReusable offline page component.
View component → +feedbackReusable offline state component.
View component → +visualizationReusable onboarding progress component.
View component → +contentReusable one time secret display component.
View component → +feedbackReusable online indicator component.
View component → +contentReusable opacity slider component.
View component → +actionsReusable open a p i c t a component.
View component → +feedbackReusable optional indicator component.
View component → +formsReusable organization selector component.
View component → +formsReusable otp input component.
View component → +contentReusable otp verification form component.
View component → +contentReusable outlined card component.
View component → +feedbackReusable page alert component.
View component → +coreReusable page header component.
View component → +coreReusable page heading component.
View component → +coreReusable page shell component.
View component → +feedbackReusable page skeleton component.
View component → +coreReusable pagination component.
View component → +layoutReusable panel component.
View component → +contentReusable partner application form component.
View component → +dataReusable partner logo grid component.
View component → +contentReusable partner program card component.
View component → +actionsReusable passkey button component.
View component → +formsReusable password input component.
View component → +dataReusable password requirement list component.
View component → +visualizationReusable password strength meter component.
View component → +formsReusable password visibility toggle component.
View component → +formsReusable path input component.
View component → +contentReusable payment method card component.
View component → +contentReusable pdf preview component.
View component → +formsReusable percentage input component.
View component → +formsReusable permission selector component.
View component → +formsReusable phone input component.
View component → +visualizationReusable pie chart component.
View component → +coreReusable pill component.
View component → +formsReusable pin input component.
View component → +formsReusable plain text editor component.
View component → +actionsReusable plan c t a component.
View component → +dataReusable plan feature list component.
View component → +dataReusable plan limit list component.
View component → +formsReusable plan selector component.
View component → +contentReusable platform pillar card component.
View component → +dataReusable policy version table component.
View component → +overlaysReusable popover component.
View component → +formsReusable port input component.
View component → +formsReusable port number input component.
View component → +formsReusable positive number input component.
View component → +formsReusable postal code input component.
View component → +actionsReusable postman c t a component.
View component → +formsReusable preset date range picker component.
View component → +contentReusable press release card component.
View component → +feedbackReusable preview badge component.
View component → +layoutReusable previous next navigation component.
View component → +formsReusable price input component.
View component → +contentReusable price range slider component.
View component → +contentReusable price text component.
View component → +contentReusable pricing card component.
View component → +dataReusable pricing comparison table component.
View component → +contentReusable pricing contact form component.
View component → +formsReusable pricing feature group component.
View component → +dataReusable pricing grid component.
View component → +layoutReusable pricing hero component.
View component → +contentReusable pricing plan card component.
View component → +dataReusable pricing table component.
View component → +formsReusable pricing toggle component.
View component → +actionsReusable primary button component.
View component → +actionsReusable print action component.
View component → +actionsReusable print policy button component.
View component → +formsReusable priority selector component.
View component → +feedbackReusable privacy notice component.
View component → +visualizationReusable product architecture diagram component.
View component → +contentReusable product card component.
View component → +layoutReusable product category section component.
View component → +actionsReusable product c t a component.
View component → +dataReusable product feature list component.
View component → +dataReusable product grid component.
View component → +layoutReusable product hero component.
View component → +contentReusable product icon component.
View component → +dataReusable product integration list component.
View component → +dataReusable product list component.
View component → +contentReusable product logo component.
View component → +coreReusable product mega menu component.
View component → +contentReusable product mini card component.
View component → +contentReusable product navigation card component.
View component → +layoutReusable product page shell component.
View component → +formsReusable product selector component.
View component → +overlaysReusable products mega menu component.
View component → +feedbackReusable product status badge component.
View component → +dataReusable product use case list component.
View component → +coreReusable progress component.
View component → +coreReusable progress bar component.
View component → +visualizationReusable progress chart component.
View component → +visualizationReusable progress ring component.
View component → +contentReusable progress slider component.
View component → +contentReusable project card component.
View component → +formsReusable project selector component.
View component → +contentReusable project switcher component.
View component → +formsReusable promo code input component.
View component → +overlaysReusable prompt dialog component.
View component → +formsReusable provider selector component.
View component → +coreReusable public footer component.
View component → +layoutReusable public header component.
View component → +contentReusable public header logo component.
View component → +coreReusable public mobile navigation component.
View component → +layoutReusable public page shell component.
View component → +coreReusable public search component.
View component → +formsReusable publish date time picker component.
View component → +contentReusable push composer component.
View component → +formsReusable push notification editor component.
View component → +contentReusable qr code component.
View component → +formsReusable quantity input component.
View component → +contentReusable quantity stepper component.
View component → +formsReusable quiet hours picker component.
View component → +contentReusable quote text component.
View component → +coreReusable radio component.
View component → +formsReusable radio group component.
View component → +formsReusable range input component.
View component → +contentReusable range slider component.
View component → +feedbackReusable rate limited state component.
View component → +formsReusable rate limit input component.
View component → +contentReusable rate limit page component.
View component → +dataReusable rate table component.
View component → +contentReusable rating slider component.
View component → +formsReusable recipient selector component.
View component → +contentReusable recovery code form component.
View component → +formsReusable recovery code input component.
View component → +contentReusable recurrence rule builder component.
View component → +formsReusable recurring schedule picker component.
View component → +formsReusable redirect uri input component.
View component → +formsReusable reference input component.
View component → +formsReusable regex input component.
View component → +feedbackReusable regional privacy banner component.
View component → +dataReusable region availability table component.
View component → +formsReusable region selector component.
View component → +feedbackReusable region unavailable alert component.
View component → +feedbackReusable region unavailable state component.
View component → +actionsReusable reject optional cookies button component.
View component → +actionsReusable reopen cookie settings button component.
View component → +contentReusable report card component.
View component → +contentReusable request response viewer component.
View component → +contentReusable request viewer component.
View component → +feedbackReusable required indicator component.
View component → +contentReusable reset password form component.
View component → +layoutReusable resizable panel component.
View component → +contentReusable resource card component.
View component → +contentReusable resource download card component.
View component → +layoutReusable resource page shell component.
View component → +contentReusable resource search component.
View component → +overlaysReusable resources mega menu component.
View component → +feedbackReusable resource type badge component.
View component → +contentReusable response viewer component.
View component → +actionsReusable responsible disclosure c t a component.
View component → +dataReusable responsive table component.
View component → +layoutReusable results section component.
View component → +dataReusable retention table component.
View component → +formsReusable retry count input component.
View component → +visualizationReusable revenue chart component.
View component → +formsReusable rgb color input component.
View component → +formsReusable rich text editor component.
View component → +formsReusable rich text input component.
View component → +formsReusable role selector component.
View component → +formsReusable rolling date range picker component.
View component → +actionsReusable save cookie preferences button component.
View component → +formsReusable saved filter selector component.
View component → +formsReusable scheduled date time picker component.
View component → +formsReusable schedule message picker component.
View component → +formsReusable schedule picker component.
View component → +layoutReusable screenshot frame component.
View component → +coreReusable scroll area component.
View component → +contentReusable s d k card component.
View component → +formsReusable sdk language selector component.
View component → +contentReusable s d k language tabs component.
View component → +coreReusable sdktabs component.
View component → +actionsReusable search button component.
View component → +contentReusable search category tabs component.
View component → +overlaysReusable search dialog component.
View component → +feedbackReusable search empty state component.
View component → +formsReusable search input component.
View component → +feedbackReusable search loading state component.
View component → +contentReusable search result item component.
View component → +actionsReusable secondary button component.
View component → +formsReusable second picker component.
View component → +contentReusable secret display component.
View component → +formsReusable secret input component.
View component → +overlaysReusable secret reveal dialog component.
View component → +layoutReusable section component.
View component → +actionsReusable section actions component.
View component → +layoutReusable section header component.
View component → +coreReusable section heading component.
View component → +feedbackReusable security alert component.
View component → +contentReusable security contact card component.
View component → +contentReusable security feature card component.
View component → +layoutReusable security hero component.
View component → +dataReusable security pillar grid component.
View component → +dataReusable security practice list component.
View component → +contentReusable security report form component.
View component → +coreReusable select component.
View component → +formsReusable sender id input component.
View component → +contentReusable server error page component.
View component → +dataReusable service level table component.
View component → +feedbackReusable service status badge component.
View component → +dataReusable service status list component.
View component → +dataReusable service status row component.
View component → +contentReusable session card component.
View component → +overlaysReusable session expired dialog component.
View component → +contentReusable setup checklist component.
View component → +formsReusable severity selector component.
View component → +formsReusable shadow picker component.
View component → +actionsReusable share action component.
View component → +actionsReusable share button component.
View component → +layoutReusable sidebar layout component.
View component → +layoutReusable side panel component.
View component → +contentReusable sign in form component.
View component → +actionsReusable sign in link component.
View component → +contentReusable sign up form component.
View component → +contentReusable site search component.
View component → +feedbackReusable skeleton component.
View component → +actionsReusable skip link component.
View component → +dataReusable sla table component.
View component → +contentReusable slider component.
View component → +formsReusable slug input component.
View component → +contentReusable small text component.
View component → +visualizationReusable smart route diagram component.
View component → +contentReusable sms composer component.
View component → +formsReusable sms message editor component.
View component → +feedbackReusable sms segment counter component.
View component → +coreReusable social share component.
View component → +layoutReusable solution hero component.
View component → +layoutReusable solution page shell component.
View component → +layoutReusable solution section component.
View component → +overlaysReusable solutions mega menu component.
View component → +dataReusable sortable table component.
View component → +coreReusable spacer component.
View component → +coreReusable spinner component.
View component → +actionsReusable split button component.
View component → +actionsReusable split c t a component.
View component → +layoutReusable split hero component.
View component → +layoutReusable split layout component.
View component → +layoutReusable split section header component.
View component → +coreReusable stack component.
View component → +actionsReusable start free button component.
View component → +contentReusable stat card component.
View component → +formsReusable state selector component.
View component → +feedbackReusable status badge component.
View component → +coreReusable status banner component.
View component → +layoutReusable status page shell component.
View component → +formsReusable status selector component.
View component → +contentReusable status subscribe form component.
View component → +dataReusable status table component.
View component → +layoutReusable step navigation component.
View component → +contentReusable stepper component.
View component → +formsReusable stepper input component.
View component → +overlaysReusable step up authentication dialog component.
View component → +formsReusable sticker picker component.
View component → +coreReusable sticky component.
View component → +layoutReusable sticky layout component.
View component → +formsReusable street address input component.
View component → +formsReusable subdomain input component.
View component → +formsReusable subject input component.
View component → +dataReusable subprocessor table component.
View component → +coreReusable subsection heading component.
View component → +contentReusable success card component.
View component → +feedbackReusable success state component.
View component → +contentReusable support request form component.
View component → +coreReusable surface component.
View component → +coreReusable switch component.
View component → +dataReusable table component.
View component → +layoutReusable table header component.
View component → +dataReusable table row component.
View component → +feedbackReusable table skeleton component.
View component → +contentReusable tabs component.
View component → +coreReusable tag component.
View component → +formsReusable tag input component.
View component → +feedbackReusable tax notice component.
View component → +formsReusable tax rate input component.
View component → +contentReusable team member card component.
View component → +formsReusable team size selector component.
View component → +contentReusable template card component.
View component → +formsReusable template selector component.
View component → +formsReusable template variable input component.
View component → +visualizationReusable tenant isolation diagram component.
View component → +contentReusable terminal block component.
View component → +actionsReusable tertiary button component.
View component → +contentReusable testimonial card component.
View component → +contentReusable testimonial carousel component.
View component → +overlaysReusable test message dialog component.
View component → +coreReusable textarea component.
View component → +formsReusable text input component.
View component → +actionsReusable text link component.
View component → +feedbackReusable text skeleton component.
View component → +coreReusable theme-toggle component.
View component → +formsReusable theme color picker component.
View component → +contentReusable theme switcher component.
View component → +formsReusable time input component.
View component → +visualizationReusable timeline component.
View component → +visualizationReusable timeline chart component.
View component → +contentReusable timeline item component.
View component → +formsReusable timeout input component.
View component → +formsReusable time picker component.
View component → +formsReusable time range picker component.
View component → +formsReusable timezone aware time picker component.
View component → +formsReusable timezone selector component.
View component → +coreReusable toast component.
View component → +actionsReusable toast action component.
View component → +coreReusable toast host component.
View component → +contentReusable toast icon component.
View component → +visualizationReusable toast progress component.
View component → +formsReusable toggle component.
View component → +formsReusable toggle group component.
View component → +formsReusable token input component.
View component → +contentReusable tooltip component.
View component → +contentReusable totp verification form component.
View component → +contentReusable translated text component.
View component → +dataReusable tree table component.
View component → +feedbackReusable trend indicator component.
View component → +contentReusable truncated text component.
View component → +dataReusable trust badge list component.
View component → +coreReusable typography component.
View component → +feedbackReusable unavailable region state component.
View component → +contentReusable unified timeline preview component.
View component → +overlaysReusable unsaved changes dialog component.
View component → +contentReusable upload item component.
View component → +contentReusable upload preview component.
View component → +visualizationReusable upload progress component.
View component → +visualizationReusable uptime chart component.
View component → +visualizationReusable uptime metric component.
View component → +formsReusable url input component.
View component → +dataReusable usage pricing table component.
View component → +formsReusable use case selector component.
View component → +contentReusable user card component.
View component → +formsReusable username input component.
View component → +contentReusable value card component.
View component → +dataReusable values grid component.
View component → +formsReusable verification code input component.
View component → +feedbackReusable verified badge component.
View component → +formsReusable version selector component.
View component → +contentReusable vertical tabs component.
View component → +contentReusable video card component.
View component → +overlaysReusable video preview dialog component.
View component → +contentReusable video upload component.
View component → +dataReusable virtualized table component.
View component → +layoutReusable vision section component.
View component → +coreReusable visually hidden component.
View component → +contentReusable voice script composer component.
View component → +formsReusable voice script editor component.
View component → +formsReusable volume input component.
View component → +contentReusable volume slider component.
View component → +contentReusable warning card component.
View component → +contentReusable webhook event card component.
View component → +visualizationReusable webhook flow diagram component.
View component → +contentReusable webhook payload viewer component.
View component → +formsReusable webhook url input component.
View component → +contentReusable webinar card component.
View component → +contentReusable webinar registration form component.
View component → +coreReusable well component.
View component → +contentReusable whats app composer component.
View component → +formsReusable whats app number input component.
View component → +formsReusable whats app template editor component.
View component → +coreReusable wide container component.
View component → +contentReusable wizard component.
View component → +layoutReusable wizard header component.
View component → +layoutReusable wizard navigation component.
View component → +contentReusable workflow canvas preview component.
View component → +visualizationReusable workflow progress component.
View component → +contentReusable workspace card component.
View component → +formsReusable workspace selector component.
View component → +contentReusable workspace switcher component.
View component → +formsReusable year picker component.
View component → +contentReusable zoom slider component.
View component →Reusable accept all cookies button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AcceptAllCookiesButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="AcceptAllCookiesButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AcceptAllCookiesButton.wrn
component AcceptAllCookiesButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable accessible accordion component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleAccordion eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleAccordion".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleAccordion.wrn
component AccessibleAccordion {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible carousel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleCarousel eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleCarousel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleCarousel.wrn
component AccessibleCarousel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible chart summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleChartSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleChartSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleChartSummary.wrn
component AccessibleChartSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="AccessibleDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleDialog.wrn
component AccessibleDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable accessible error summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleErrorSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleErrorSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleErrorSummary.wrn
component AccessibleErrorSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible icon component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleIcon eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleIcon".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleIcon.wrn
component AccessibleIcon {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="AccessibleMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleMenu.wrn
component AccessibleMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable accessible tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleTabs.wrn
component AccessibleTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accessible tooltip component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccessibleTooltip eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AccessibleTooltip".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccessibleTooltip.wrn
component AccessibleTooltip {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable accordion component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Accordion title="Question" open="false" />Legacy mount name: data-component="Accordion".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Question" |
open | boolean | Optional | false |
defaultclickInstalled source: components/Accordion.wrn
component Accordion {
+ props {
+ class = ""
+ title = "Question"
+ open = false
+ }
+
+ state expanded = open
+
+ view {
+ <div class="border-b border-slate-200 dark:border-slate-800 {class}" >
+ <button
+ type="button"
+ class="flex w-full items-center justify-between gap-4 py-5 text-left font-semibold"
+ aria-expanded="{expanded}"
+ @click="expanded = !expanded"
+ >
+ <span >
+ {title}
+ </span>
+ <span class="text-xl transition-transform {expanded ? 'rotate-45' : ''}">+</span>
+ </button>
+ <div
+ data-show="expanded"
+ class="pb-5 text-slate-600 dark:text-slate-300"
+ >
+ <slot />
+ </div>
+ </div>
+ }
+}
+Reusable account menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccountMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="AccountMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccountMenu.wrn
component AccountMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable account status banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AccountStatusBanner label="AccountStatus" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="AccountStatusBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "AccountStatus" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AccountStatusBanner.wrn
component AccountStatusBanner {
+ props {
+ label = "AccountStatus"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable action menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ActionMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="ActionMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ActionMenu.wrn
component ActionMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable active filter list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ActiveFilterList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ActiveFilterList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ActiveFilterList.wrn
component ActiveFilterList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable activity list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ActivityList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ActivityList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ActivityList.wrn
component ActivityList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable add on card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AddOnCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AddOnCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AddOnCard.wrn
component AddOnCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable address input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AddressInput label="Address" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="AddressInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Address" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AddressInput.wrn
component AddressInput {
+ props {
+ label = "Address"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable address preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AddressPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AddressPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AddressPreview.wrn
component AddressPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable advanced filter builder component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AdvancedFilterBuilder eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AdvancedFilterBuilder".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AdvancedFilterBuilder.wrn
component AdvancedFilterBuilder {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable alert dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AlertDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="AlertDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AlertDialog.wrn
component AlertDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Alert title="Notice" description="description" variant="info" dismissible="false" />Legacy mount name: data-component="Alert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Notice" |
description | string | Optional | "" |
variant | string | Optional | "info" |
dismissible | boolean | Optional | false |
defaultclickInstalled source: components/Alert.wrn
component Alert {
+ props {
+ class = ""
+ title = "Notice"
+ description = ""
+ variant = "info"
+ dismissible = false
+ }
+
+ state visible = true
+
+ view {
+ <div
+ data-show="visible"
+ role="alert"
+ class="flex items-start gap-3 rounded-2xl border p-4 {variant === 'success' ? 'border-emerald-200 bg-emerald-50 text-emerald-900 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-200' : variant === 'warning' ? 'border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-200' : variant === 'danger' ? 'border-red-200 bg-red-50 text-red-900 dark:border-red-900 dark:bg-red-950/40 dark:text-red-200' : 'border-blue-200 bg-blue-50 text-blue-900 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-200'} {class}"
+ >
+ <div class="min-w-0 flex-1" >
+ <h3 class="font-semibold" >
+ {title}
+ </h3>
+ <p
+ data-show="description"
+ class="mt-1 text-sm opacity-80"
+ >
+ {description}
+ </p>
+ <div class="mt-2" >
+ <slot />
+ </div>
+ </div>
+ <button
+ data-show="dismissible"
+ type="button"
+ aria-label="Dismiss"
+ @click="visible = false"
+ class="rounded-lg p-1 hover:bg-black/5"
+ >
+ ×
+ </button>
+ </div>
+ }
+}
+Reusable amount input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AmountInput label="Amount" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="AmountInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Amount" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AmountInput.wrn
component AmountInput {
+ props {
+ label = "Amount"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable analytics dashboard preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AnalyticsDashboardPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AnalyticsDashboardPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AnalyticsDashboardPreview.wrn
component AnalyticsDashboardPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable anchor navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AnchorNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="AnchorNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AnchorNavigation.wrn
component AnchorNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable announcement bar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AnnouncementBar badge="New" message="WRNexusJS Organizations is now available." description="Build secure multi-tenant applications with teams, roles, domains, and enterprise SSO." href="/organizations" actionLabel="Explore organizations" />Legacy mount name: data-component="AnnouncementBar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
badge | string | Optional | "New" |
message | string | Optional | "WRNexusJS Organizations is now available." |
description | string | Optional | "Build secure multi-tenant applications with teams, roles, domains, and enterprise SSO." |
href | string | Optional | "/organizations" |
actionLabel | string | Optional | "Explore organizations" |
ariaLabel | string | Optional | "Announcement" |
This component does not declare a slot.
clickInstalled source: components/AnnouncementBar.wrn
component AnnouncementBar {
+ props {
+ class = ""
+ badge = "New"
+ message = "WRNexusJS Organizations is now available."
+ description = "Build secure multi-tenant applications with teams, roles, domains, and enterprise SSO."
+ href = "/organizations"
+ actionLabel = "Explore organizations"
+ ariaLabel = "Announcement"
+ }
+
+ state visible = true
+
+ view {
+ <aside
+ role="region"
+ aria-label="{ariaLabel}"
+ class="relative z-[70] overflow-hidden border-b border-indigo-200 bg-indigo-50 text-slate-900 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-white {class}"
+ class:hidden="!visible"
+ >
+ <!-- Decorative background -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -left-20 -top-24 h-40 w-40 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -right-20 -bottom-24 h-40 w-40 rounded-full bg-violet-300/30 blur-3xl dark:bg-violet-500/10"></div>
+ </div>
+
+ <div
+ class="relative flex min-h-11 w-full items-center justify-between gap-4 px-4 py-2.5 sm:px-6 lg:px-10 xl:px-12"
+ >
+ <div class="flex min-w-0 flex-1 items-center justify-center gap-3">
+ <!-- Badge -->
+ <span
+ class="hidden shrink-0 items-center gap-1.5 rounded-full bg-indigo-600 px-2.5 py-1 text-[10px] font-bold uppercase tracking-[0.12em] text-white shadow-sm sm:inline-flex"
+ >
+ <span class="icon-[lucide--sparkles] h-3 w-3" aria-hidden="true" ></span>
+
+ {badge}
+ </span>
+
+ <!-- Message -->
+ <p
+ class="min-w-0 text-center text-xs font-medium leading-5 text-slate-700 dark:text-slate-300 sm:text-sm"
+ >
+ <span class="font-semibold text-slate-950 dark:text-white">
+ {message}
+ </span>
+
+ <span class="hidden md:inline">
+ {description}
+ </span>
+ </p>
+
+ <!-- CTA -->
+ <a
+ href="{href}"
+ class="group hidden shrink-0 items-center gap-1.5 text-xs font-bold text-indigo-700 transition hover:text-indigo-900 dark:text-indigo-300 dark:hover:text-indigo-200 sm:inline-flex"
+ >
+ {actionLabel}
+
+ <span class="icon-[lucide--arrow-right] h-3.5 w-3.5 transition-transform group-hover:translate-x-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <!-- Mobile CTA -->
+ <a
+ href="{href}"
+ aria-label="{actionLabel}"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-indigo-100 text-indigo-700 transition hover:bg-indigo-200 dark:bg-indigo-500/15 dark:text-indigo-300 dark:hover:bg-indigo-500/25 sm:hidden"
+ >
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+
+ <!-- Close -->
+ <button
+ type="button"
+ @click="visible = false"
+ aria-label="Dismiss announcement"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-500 transition hover:bg-indigo-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:text-slate-400 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </aside>
+ }
+}
+Reusable apartment input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApartmentInput label="Apartment" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ApartmentInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Apartment" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApartmentInput.wrn
component ApartmentInput {
+ props {
+ label = "Apartment"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable api authentication notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiAuthenticationNotice label="ApiAuthentication" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ApiAuthenticationNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ApiAuthentication" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiAuthenticationNotice.wrn
component ApiAuthenticationNotice {
+ props {
+ label = "ApiAuthentication"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable api endpoint card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiEndpointCard method="GET" path="/api/example" description="description" />Legacy mount name: data-component="ApiEndpointCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
method | string | Optional | "GET" |
path | string | Optional | "/api/example" |
description | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiEndpointCard.wrn
component ApiEndpointCard {
+ props {
+ class = ""
+ method = "GET"
+ path = "/api/example"
+ description = ""
+ }
+
+ view {
+ <article
+ class="rounded-2xl border border-slate-200 bg-white p-5 dark:border-slate-800 dark:bg-slate-900 {class}"
+ >
+ <div class="flex flex-wrap items-center gap-3" >
+ <span
+ class="rounded-lg px-2.5 py-1 font-mono text-xs font-bold {method === 'GET' ? 'bg-emerald-100 text-emerald-700' : method === 'POST' ? 'bg-blue-100 text-blue-700' : method === 'DELETE' ? 'bg-red-100 text-red-700' : 'bg-amber-100 text-amber-700'}"
+ >
+ {method}
+ </span>
+ <code class="text-sm font-semibold">
+ {path}
+ </code>
+ </div>
+ <p
+ data-show="description"
+ class="mt-3 text-sm text-slate-500"
+ >
+ {description}
+ </p>
+ <div class="mt-4">
+ <slot />
+ </div>
+ </article>
+ }
+}
+Reusable api error example component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiErrorExample eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ApiErrorExample".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiErrorExample.wrn
component ApiErrorExample {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable api header table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiHeaderTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ApiHeaderTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiHeaderTable.wrn
component ApiHeaderTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable api key create dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiKeyCreateDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="ApiKeyCreateDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiKeyCreateDialog.wrn
component ApiKeyCreateDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable api key display component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiKeyDisplay eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ApiKeyDisplay".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiKeyDisplay.wrn
component ApiKeyDisplay {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable api key input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiKeyInput label="ApiKey" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ApiKeyInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ApiKey" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiKeyInput.wrn
component ApiKeyInput {
+ props {
+ label = "ApiKey"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable api method badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiMethodBadge label="ApiMethod" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ApiMethodBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ApiMethod" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiMethodBadge.wrn
component ApiMethodBadge {
+ props {
+ label = "ApiMethod"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable api parameter table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiParameterTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ApiParameterTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiParameterTable.wrn
component ApiParameterTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable api rate limit notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiRateLimitNotice label="ApiRateLimit" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ApiRateLimitNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ApiRateLimit" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiRateLimitNotice.wrn
component ApiRateLimitNotice {
+ props {
+ label = "ApiRateLimit"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable api request example component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiRequestExample eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ApiRequestExample".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiRequestExample.wrn
component ApiRequestExample {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable api response example component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiResponseExample eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ApiResponseExample".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiResponseExample.wrn
component ApiResponseExample {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable api schema table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiSchemaTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ApiSchemaTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiSchemaTable.wrn
component ApiSchemaTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable api schema viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiSchemaViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ApiSchemaViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiSchemaViewer.wrn
component ApiSchemaViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable api version badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ApiVersionBadge label="ApiVersion" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ApiVersionBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ApiVersion" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ApiVersionBadge.wrn
component ApiVersionBadge {
+ props {
+ label = "ApiVersion"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable app header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AppHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="AppHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AppHeader.wrn
component AppHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable architecture section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArchitectureSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ArchitectureSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArchitectureSection.wrn
component ArchitectureSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable area chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AreaChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="AreaChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AreaChart.wrn
component AreaChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable article hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArticleHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ArticleHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArticleHero.wrn
component ArticleHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable article layout component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArticleLayout eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ArticleLayout".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArticleLayout.wrn
component ArticleLayout {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable article newsletter c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArticleNewsletterCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ArticleNewsletterCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArticleNewsletterCTA.wrn
component ArticleNewsletterCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable article page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArticlePageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ArticlePageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArticlePageShell.wrn
component ArticlePageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable article share actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ArticleShareActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ArticleShareActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ArticleShareActions.wrn
component ArticleShareActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable aspect ratio component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AspectRatio />Legacy mount name: data-component="AspectRatio".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AspectRatio.wrn
component AspectRatio {
+ props {
+ class = ""
+ }
+ view { <div class="wire-aspect-ratio {class}"><slot /></div> }
+}
+Reusable asset card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AssetCard title="title" description="description" href="href" />Legacy mount name: data-component="AssetCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AssetCard.wrn
component AssetCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--asset {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable attachment picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AttachmentPicker label="Attachment" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="AttachmentPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Attachment" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AttachmentPicker.wrn
component AttachmentPicker {
+ props {
+ label = "Attachment"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable attachment upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AttachmentUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AttachmentUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AttachmentUpload.wrn
component AttachmentUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable audio upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AudioUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AudioUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AudioUpload.wrn
component AudioUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable audit log preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuditLogPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AuditLogPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuditLogPreview.wrn
component AuditLogPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable audit table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuditTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="AuditTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuditTable.wrn
component AuditTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable authenticator code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuthenticatorCodeInput label="AuthenticatorCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="AuthenticatorCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "AuthenticatorCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuthenticatorCodeInput.wrn
component AuthenticatorCodeInput {
+ props {
+ label = "AuthenticatorCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable author avatar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuthorAvatar eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AuthorAvatar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuthorAvatar.wrn
component AuthorAvatar {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable author card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuthorCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AuthorCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuthorCard.wrn
component AuthorCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable authorized application card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AuthorizedApplicationCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AuthorizedApplicationCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AuthorizedApplicationCard.wrn
component AuthorizedApplicationCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable auto grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AutoGrid />Legacy mount name: data-component="AutoGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AutoGrid.wrn
component AutoGrid {
+ props {
+ class = ""
+ }
+ view { <div class="wire-auto-grid {class}"><slot /></div> }
+}
+Reusable automation example card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AutomationExampleCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AutomationExampleCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AutomationExampleCard.wrn
component AutomationExampleCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable availability calendar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AvailabilityCalendar eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AvailabilityCalendar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AvailabilityCalendar.wrn
component AvailabilityCalendar {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable avatar group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AvatarGroup label="Avatar" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="AvatarGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Avatar" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AvatarGroup.wrn
component AvatarGroup {
+ props {
+ label = "Avatar"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable avatar upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<AvatarUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="AvatarUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/AvatarUpload.wrn
component AvatarUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable avatar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Avatar src="src" alt="alt" initials="WR" size="md" />Legacy mount name: data-component="Avatar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
src | string | Optional | "" |
alt | string | Optional | "" |
initials | string | Optional | "WR" |
size | string | Optional | "md" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Avatar.wrn
component Avatar {
+ props {
+ class = ""
+ src = ""
+ alt = ""
+ initials = "WR"
+ size = "md"
+ }
+ view {
+ <span class="inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full bg-gradient-to-br from-violet-500 to-fuchsia-500 font-semibold text-white {size === 'sm' ? 'size-8 text-xs' : size === 'lg' ? 'size-14 text-base' : 'size-10 text-sm'} {class}"><img data-show="src" src="{src}" alt="{alt}" class="h-full w-full object-cover" /><span data-show="!src" aria-hidden="true">{initials}</span></span>
+ }
+}
+Reusable back button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BackButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="BackButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BackButton.wrn
component BackButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--ghost {class}">{label}<slot /></button> }
+}
+Reusable back to top component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BackToTop label="Back to top" assistiveLabel="Return to the top of the page" threshold="500" />Legacy mount name: data-component="BackToTop".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Back to top" |
assistiveLabel | string | Optional | "Return to the top of the page" |
threshold | number | Optional | 500 |
This component does not declare a slot.
clickInstalled source: components/BackToTop.wrn
component BackToTop {
+ props {
+ class = ""
+ label = "Back to top"
+ assistiveLabel = "Return to the top of the page"
+ threshold = 500
+ }
+
+ state visible = false
+
+ functions {
+ function updateBackToTopVisibility() {
+ visible = window.scrollY > threshold
+ }
+
+ function scrollToTop() {
+ window.scrollTo({
+ top: 0,
+ behavior: "smooth"
+ })
+ }
+ }
+
+ lifecycle {
+ mount {
+ updateBackToTopVisibility()
+
+ window.addEventListener(
+ "scroll",
+ updateBackToTopVisibility,
+ { passive: true }
+ )
+ }
+
+ unmount {
+ window.removeEventListener(
+ "scroll",
+ updateBackToTopVisibility
+ )
+ }
+ }
+
+ watch visible {
+ console.debug(
+ "Back-to-top visibility:",
+ value,
+ previous
+ )
+ }
+
+ view {
+ <div
+ class="group fixed bottom-6 right-5 z-[70] flex items-center gap-2 transition-all duration-300 sm:right-6 lg:bottom-8 lg:right-8 {class}"
+ class:pointer-events-none="!visible"
+ class:translate-y-5="!visible"
+ class:scale-90="!visible"
+ class:opacity-0="!visible"
+ class:pointer-events-auto="visible"
+ class:translate-y-0="visible"
+ class:scale-100="visible"
+ class:opacity-100="visible"
+ >
+ <!-- Hover label -->
+ <span
+ class="pointer-events-none hidden translate-x-2 whitespace-nowrap rounded-xl border border-slate-200 bg-white/95 px-3 py-2 text-xs font-semibold text-slate-700 opacity-0 shadow-lg shadow-slate-950/10 backdrop-blur-xl transition-all duration-200 group-hover:translate-x-0 group-hover:opacity-100 dark:border-white/10 dark:bg-slate-900/95 dark:text-slate-200 dark:shadow-black/30 sm:block"
+ >
+ {label}
+ </span>
+
+ <!-- Gradient border wrapper -->
+ <div
+ class="relative rounded-2xl bg-linear-to-br from-indigo-500 via-violet-500 to-cyan-500 p-px shadow-xl shadow-indigo-600/20 transition duration-300 group-hover:-translate-y-1 group-hover:shadow-2xl group-hover:shadow-indigo-600/30"
+ >
+ <!-- Glow -->
+ <div aria-hidden="true" class="absolute inset-1 rounded-2xl bg-indigo-500/20 opacity-0 blur-xl transition-opacity duration-300 group-hover:opacity-100" ></div>
+
+ <button
+ type="button"
+ @click="scrollToTop()"
+ aria-label="{label}"
+ title="{label}"
+ class="relative grid h-12 w-12 place-items-center rounded-[15px] bg-white/95 text-indigo-700 backdrop-blur-xl transition duration-300 hover:bg-indigo-600 hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 active:scale-95 dark:bg-slate-900/95 dark:text-indigo-300 dark:hover:bg-indigo-500 dark:hover:text-white dark:focus-visible:ring-offset-slate-950 sm:h-13 sm:w-13"
+ >
+ <!-- Arrow -->
+ <span class="icon-[lucide--arrow-up] h-5 w-5 transition-transform duration-300 group-hover:-translate-y-0.5" aria-hidden="true" ></span>
+
+ <span class="sr-only">
+ {assistiveLabel}
+ </span>
+ </button>
+ </div>
+ </div>
+ }
+}
+Reusable badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Badge label="Badge" variant="neutral" />Legacy mount name: data-component="Badge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Badge" |
variant | string | Optional | "neutral" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Badge.wrn
component Badge {
+ props {
+ class = ""
+ label = "Badge"
+ variant = "neutral"
+ }
+ view {
+ <span class="inline-flex items-center rounded-full px-2.5 py-1 text-xs font-semibold ring-1 ring-inset {variant === 'success' ? 'bg-emerald-50 text-emerald-700 ring-emerald-600/20 dark:bg-emerald-950/40 dark:text-emerald-300' : variant === 'warning' ? 'bg-amber-50 text-amber-700 ring-amber-600/20 dark:bg-amber-950/40 dark:text-amber-300' : variant === 'danger' ? 'bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-950/40 dark:text-red-300' : variant === 'brand' ? 'bg-violet-50 text-violet-700 ring-violet-600/20 dark:bg-violet-950/40 dark:text-violet-300' : 'bg-slate-100 text-slate-700 ring-slate-600/10 dark:bg-slate-800 dark:text-slate-300'} {class}">{label}</span>
+ }
+}
+Reusable bank transfer details component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BankTransferDetails eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BankTransferDetails".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BankTransferDetails.wrn
component BankTransferDetails {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Banner text="Announcement" href="href" actionLabel="Learn more" variant="brand" />Legacy mount name: data-component="Banner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
text | string | Optional | "Announcement" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
variant | string | Optional | "brand" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Banner.wrn
component Banner {
+ props {
+ class = ""
+ text = "Announcement"
+ href = ""
+ actionLabel = "Learn more"
+ variant = "brand"
+ }
+ view {
+ <aside class="px-4 py-3 text-center text-sm font-medium {variant === 'warning' ? 'bg-amber-400 text-amber-950' : 'bg-violet-600 text-white'} {class}"><span>{text}</span><a data-show="href" href="{href}" class="ml-2 underline underline-offset-4">{actionLabel} →</a></aside>
+ }
+}
+Reusable bar chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BarChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="BarChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BarChart.wrn
component BarChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable beta badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BetaBadge label="Beta" variant="default" />Legacy mount name: data-component="BetaBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Beta" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BetaBadge.wrn
component BetaBadge {
+ props {
+ label = "Beta"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--betabadge {class}">{label}<slot /></span> }
+}
+Reusable billing address form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BillingAddressForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BillingAddressForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BillingAddressForm.wrn
component BillingAddressForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable billing example component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BillingExample eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BillingExample".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BillingExample.wrn
component BillingExample {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable billing period toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BillingPeriodToggle label="BillingPeriod" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BillingPeriodToggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "BillingPeriod" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BillingPeriodToggle.wrn
component BillingPeriodToggle {
+ props {
+ label = "BillingPeriod"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable blackout date picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BlackoutDatePicker label="BlackoutDate" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BlackoutDatePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "BlackoutDate" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BlackoutDatePicker.wrn
component BlackoutDatePicker {
+ props {
+ label = "BlackoutDate"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable blog card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BlogCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BlogCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BlogCard.wrn
component BlogCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable blog grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BlogGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="BlogGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BlogGrid.wrn
component BlogGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable blog list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BlogList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="BlogList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BlogList.wrn
component BlogList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable blog search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BlogSearch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BlogSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BlogSearch.wrn
component BlogSearch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable body text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BodyText text="text" align="start" />Legacy mount name: data-component="BodyText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BodyText.wrn
component BodyText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--body wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable border radius picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BorderRadiusPicker label="BorderRadius" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BorderRadiusPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "BorderRadius" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BorderRadiusPicker.wrn
component BorderRadiusPicker {
+ props {
+ label = "BorderRadius"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable bottom navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BottomNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="BottomNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BottomNavigation.wrn
component BottomNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable brand color picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BrandColorPicker label="BrandColor" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BrandColorPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "BrandColor" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BrandColorPicker.wrn
component BrandColorPicker {
+ props {
+ label = "BrandColor"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable brand selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BrandSelector label="Brand" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BrandSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Brand" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BrandSelector.wrn
component BrandSelector {
+ props {
+ label = "Brand"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable breadcrumbs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Breadcrumbs items="[]" centered="false" compact="false" showHome="true" homeLabel="Home" />Legacy mount name: data-component="Breadcrumbs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
items | string | Optional | [] |
centered | boolean | Optional | false |
compact | boolean | Optional | false |
showHome | boolean | Optional | true |
homeLabel | string | Optional | "Home" |
homeHref | string | Optional | "/" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Breadcrumbs.wrn
component Breadcrumbs {
+ props {
+ class: string = ""
+ items = []
+ centered = false
+ compact = false
+ showHome = true
+ homeLabel = "Home"
+ homeHref = "/"
+ }
+
+ view {
+ <nav
+ aria-label="Breadcrumb"
+ class="w-full {class}"
+ class:hidden="items.length === 0 && !showHome"
+ >
+ <ol
+ class="flex flex-wrap items-center text-slate-500 dark:text-slate-400"
+ class:justify-center="centered"
+ class:gap-1.5="compact"
+ class:text-xs="compact"
+ class:gap-2="!compact"
+ class:text-sm="!compact"
+ >
+ <!-- Home -->
+ <li
+ class:hidden="!showHome"
+ class:inline-flex="showHome"
+ >
+ <a
+ href="{homeHref}"
+ class="group inline-flex items-center gap-1.5 rounded-lg transition hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--home] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ <span class:hidden="compact">
+ {homeLabel}
+ </span>
+
+ <span
+ class="sr-only"
+ class:hidden="!compact"
+ >
+ {homeLabel}
+ </span>
+ </a>
+ </li>
+
+ <!-- Separator after home -->
+ <li
+ aria-hidden="true"
+ class="text-slate-300 dark:text-slate-700"
+ class:hidden="!showHome || items.length === 0"
+ class:inline-flex="showHome && items.length > 0"
+ >
+ <span class="icon-[lucide--chevron-right] h-3.5 w-3.5" ></span>
+ </li>
+
+ <!-- Dynamic breadcrumb items -->
+ {#each items as item, index}
+ <li class="inline-flex min-w-0 items-center gap-2">
+ <!-- Linked item -->
+ <a
+ href="{item.href}"
+ class="max-w-48 truncate rounded-lg transition hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:hover:text-indigo-300 sm:max-w-64"
+ class:hidden="item.current || item.href === ''"
+ class:inline-flex="!item.current && item.href !== ''"
+ >
+ {item.label}
+ </a>
+
+ <!-- Current item -->
+ <span
+ aria-current="page"
+ class="max-w-48 truncate font-semibold text-slate-950 dark:text-white sm:max-w-64"
+ class:hidden="!item.current"
+ class:inline-flex="item.current"
+ >
+ {item.label}
+ </span>
+
+ <!-- Plain unlinked item -->
+ <span
+ class="max-w-48 truncate text-slate-600 dark:text-slate-300 sm:max-w-64"
+ class:hidden="item.current || item.href !== ''"
+ class:inline-flex="!item.current && item.href === ''"
+ >
+ {item.label}
+ </span>
+
+ <!-- Separator -->
+ <span
+ aria-hidden="true"
+ class="inline-flex text-slate-300 dark:text-slate-700"
+ class:hidden="index === items.length - 1"
+ >
+ <span class="icon-[lucide--chevron-right] h-3.5 w-3.5" ></span>
+ </span>
+ </li>
+ {/each}
+ </ol>
+ </nav>
+ }
+}
+Reusable browser frame component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BrowserFrame eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="BrowserFrame".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BrowserFrame.wrn
component BrowserFrame {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable budget range slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BudgetRangeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="BudgetRangeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BudgetRangeSlider.wrn
component BudgetRangeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable budget selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BudgetSelector label="Budget" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BudgetSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Budget" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BudgetSelector.wrn
component BudgetSelector {
+ props {
+ label = "Budget"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable business hours picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<BusinessHoursPicker label="BusinessHours" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="BusinessHoursPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "BusinessHours" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/BusinessHoursPicker.wrn
component BusinessHoursPicker {
+ props {
+ label = "BusinessHours"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable button group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ButtonGroup label="Button" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ButtonGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Button" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ButtonGroup.wrn
component ButtonGroup {
+ props {
+ label = "Button"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable button selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ButtonSelector label="Button" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ButtonSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Button" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ButtonSelector.wrn
component ButtonSelector {
+ props {
+ label = "Button"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Button label="Button" type="button" variant="primary" size="md" disabled="false" />Legacy mount name: data-component="Button".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Button" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
size | string | Optional | "md" |
disabled | boolean | Optional | false |
loading | boolean | Optional | false |
icon | string | Optional | "" |
className | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Button.wrn
component Button {
+ props {
+ label = "Button"
+ type = "button"
+ variant = "primary"
+ size = "md"
+ disabled = false
+ loading = false
+ icon = ""
+ className = ""
+ }
+ view {
+ <button type="{type}" disabled="{disabled || loading}" aria-busy="{loading}" class="inline-flex min-h-11 items-center justify-center gap-2 rounded-xl font-semibold transition-all duration-200 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 active:scale-[0.98] {size === 'sm' ? 'px-3 py-2 text-sm' : size === 'lg' ? 'px-6 py-3.5 text-base' : 'px-4 py-2.5 text-sm'} {variant === 'secondary' ? 'border border-slate-300 bg-white text-slate-900 hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-900 dark:text-white dark:hover:bg-slate-800' : variant === 'ghost' ? 'text-slate-700 hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-slate-800' : variant === 'danger' ? 'bg-red-600 text-white hover:bg-red-700' : 'bg-violet-600 text-white shadow-sm hover:-translate-y-0.5 hover:bg-violet-700 hover:shadow-md'} {className}">
+ <span data-show="loading" class="size-4 animate-spin rounded-full border-2 border-current border-r-transparent"></span>
+ <span>{label}</span>
+ </button>
+ }
+}
+Reusable calendar grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CalendarGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CalendarGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CalendarGrid.wrn
component CalendarGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable calendar header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CalendarHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CalendarHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CalendarHeader.wrn
component CalendarHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable calendar navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CalendarNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CalendarNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CalendarNavigation.wrn
component CalendarNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable calendar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Calendar eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Calendar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Calendar.wrn
component Calendar {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable callback url input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CallbackUrlInput label="CallbackUrl" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CallbackUrlInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CallbackUrl" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CallbackUrlInput.wrn
component CallbackUrlInput {
+ props {
+ label = "CallbackUrl"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable campaign card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CampaignCard title="title" description="description" href="href" />Legacy mount name: data-component="CampaignCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CampaignCard.wrn
component CampaignCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--campaign {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable campaign performance preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CampaignPerformancePreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CampaignPerformancePreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CampaignPerformancePreview.wrn
component CampaignPerformancePreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable campaign progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CampaignProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="CampaignProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CampaignProgress.wrn
component CampaignProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable capability grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CapabilityGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CapabilityGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CapabilityGrid.wrn
component CapabilityGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable captcha field component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CaptchaField label="Captcha" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CaptchaField".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Captcha" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CaptchaField.wrn
component CaptchaField {
+ props {
+ label = "Captcha"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable card payment form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CardPaymentForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CardPaymentForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CardPaymentForm.wrn
component CardPaymentForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable card selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CardSelector label="Card" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CardSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Card" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CardSelector.wrn
component CardSelector {
+ props {
+ label = "Card"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable card skeleton component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CardSkeleton label="Card" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="CardSkeleton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Card" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CardSkeleton.wrn
component CardSkeleton {
+ props {
+ label = "Card"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Card variant="default" padding="md" interactive="false" />Legacy mount name: data-component="Card".
| Prop | Type | Requirement | Default |
|---|---|---|---|
variant | string | Optional | "default" |
padding | string | Optional | "md" |
interactive | boolean | Optional | false |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Card.wrn
component Card {
+ props {
+ variant = "default"
+ padding = "md"
+ interactive = false
+ className = ""
+ }
+ view {
+ <article class="rounded-2xl border border-slate-200 bg-white text-slate-950 shadow-sm transition duration-300 dark:border-slate-800 dark:bg-slate-900 dark:text-white {padding === 'sm' ? 'p-4' : padding === 'lg' ? 'p-8' : 'p-6'} {variant === 'glass' ? 'bg-white/75 backdrop-blur-xl dark:bg-slate-900/70' : variant === 'elevated' ? 'shadow-xl shadow-slate-950/5' : ''} {interactive ? 'hover:-translate-y-1 hover:shadow-xl' : ''} {className}"><slot /></article>
+ }
+}
+Reusable career application form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CareerApplicationForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CareerApplicationForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CareerApplicationForm.wrn
component CareerApplicationForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable career benefits grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CareerBenefitsGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CareerBenefitsGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CareerBenefitsGrid.wrn
component CareerBenefitsGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable carousel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Carousel eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Carousel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Carousel.wrn
component Carousel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable case study card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CaseStudyCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CaseStudyCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CaseStudyCard.wrn
component CaseStudyCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable case study hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CaseStudyHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CaseStudyHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CaseStudyHero.wrn
component CaseStudyHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable case study preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CaseStudyPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CaseStudyPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CaseStudyPreview.wrn
component CaseStudyPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable centered c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CenteredCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="CenteredCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CenteredCTA.wrn
component CenteredCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable centered hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CenteredHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CenteredHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CenteredHero.wrn
component CenteredHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable centered section header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CenteredSectionHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CenteredSectionHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CenteredSectionHeader.wrn
component CenteredSectionHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable certificate upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CertificateUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CertificateUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CertificateUpload.wrn
component CertificateUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable certification badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CertificationBadge label="Certification" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="CertificationBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Certification" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CertificationBadge.wrn
component CertificationBadge {
+ props {
+ label = "Certification"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable challenge section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChallengeSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ChallengeSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChallengeSection.wrn
component ChallengeSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable channel badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelBadge label="Channel" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ChannelBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Channel" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelBadge.wrn
component ChannelBadge {
+ props {
+ label = "Channel"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable channel card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelCard title="title" description="description" href="href" />Legacy mount name: data-component="ChannelCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelCard.wrn
component ChannelCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--channel {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable channel comparison chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelComparisonChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ChannelComparisonChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelComparisonChart.wrn
component ChannelComparisonChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable channel comparison table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelComparisonTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ChannelComparisonTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelComparisonTable.wrn
component ChannelComparisonTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable channel fallback diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelFallbackDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ChannelFallbackDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelFallbackDiagram.wrn
component ChannelFallbackDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable channel flow component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelFlow title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ChannelFlow".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelFlow.wrn
component ChannelFlow {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable channel icon component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelIcon eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ChannelIcon".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelIcon.wrn
component ChannelIcon {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable channel rate table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelRateTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ChannelRateTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelRateTable.wrn
component ChannelRateTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable channel selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChannelSelector label="Channel" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ChannelSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Channel" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChannelSelector.wrn
component ChannelSelector {
+ props {
+ label = "Channel"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable character counter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CharacterCounter label="Character" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="CharacterCounter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Character" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CharacterCounter.wrn
component CharacterCounter {
+ props {
+ label = "Character"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable chart empty state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChartEmptyState label="ChartEmpty" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ChartEmptyState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ChartEmpty" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChartEmptyState.wrn
component ChartEmptyState {
+ props {
+ label = "ChartEmpty"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable chart tooltip component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChartTooltip eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ChartTooltip".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChartTooltip.wrn
component ChartTooltip {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable checkbox group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CheckboxGroup label="Checkbox" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CheckboxGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Checkbox" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CheckboxGroup.wrn
component CheckboxGroup {
+ props {
+ label = "Checkbox"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable checkbox component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Checkbox id="id" name="name" label="Checkbox" description="description" checked="false" />Legacy mount name: data-component="Checkbox".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Checkbox" |
description | string | Optional | "" |
checked | boolean | Optional | false |
disabled | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Checkbox.wrn
component Checkbox {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Checkbox"
+ description = ""
+ checked = false
+ disabled = false
+ }
+ view {
+ <label for="{id}" class="flex min-h-11 cursor-pointer items-start gap-3 rounded-xl p-2 transition hover:bg-slate-50 dark:hover:bg-slate-900 {class}"><input id="{id}" name="{name}" type="checkbox" checked="{checked}" disabled="{disabled}" class="mt-0.5 size-5 rounded border-slate-300 text-violet-600 focus:ring-violet-500 dark:border-slate-700 dark:bg-slate-950" /><span><span class="block text-sm font-semibold text-slate-900 dark:text-white">{label}</span><span data-show="description" class="mt-0.5 block text-sm text-slate-500 dark:text-slate-400">{description}</span></span></label>
+ }
+}
+Reusable checklist progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChecklistProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ChecklistProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChecklistProgress.wrn
component ChecklistProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable checklist component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Checklist eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Checklist".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Checklist.wrn
component Checklist {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable chip input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ChipInput label="Chip" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ChipInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Chip" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ChipInput.wrn
component ChipInput {
+ props {
+ label = "Chip"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable chip component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Chip label="Chip" variant="default" />Legacy mount name: data-component="Chip".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Chip" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Chip.wrn
component Chip {
+ props {
+ label = "Chip"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--chip {class}">{label}<slot /></span> }
+}
+Reusable circular progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CircularProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="CircularProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CircularProgress.wrn
component CircularProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable city selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CitySelector label="City" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CitySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "City" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CitySelector.wrn
component CitySelector {
+ props {
+ label = "City"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable clear filters button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ClearFiltersButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ClearFiltersButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ClearFiltersButton.wrn
component ClearFiltersButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable clickable card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ClickableCard title="title" description="description" href="href" />Legacy mount name: data-component="ClickableCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ClickableCard.wrn
component ClickableCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--clickable {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable close button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CloseButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="CloseButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CloseButton.wrn
component CloseButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--ghost {class}">{label}<slot /></button> }
+}
+Reusable cluster component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Cluster gap="4" />Legacy mount name: data-component="Cluster".
| Prop | Type | Requirement | Default |
|---|---|---|---|
gap | string | Optional | "4" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Cluster.wrn
component Cluster {
+ props {
+ gap = "4"
+ className = ""
+ }
+ view {
+ <div class="flex flex-wrap items-center gap-{gap} {className}"><slot /></div>
+ }
+}
+Reusable code block component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeBlock language="text" filename="filename" code="code" />Legacy mount name: data-component="CodeBlock".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
language | string | Optional | "text" |
filename | string | Optional | "" |
code | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/CodeBlock.wrn
component CodeBlock {
+ props {
+ class = ""
+ language = "text"
+ filename = ""
+ code = ""
+ }
+ state copied = false
+ view {
+ <div class="overflow-hidden rounded-2xl border border-slate-800 bg-slate-950 text-slate-100 {class}"><div class="flex min-h-11 items-center justify-between border-b border-slate-800 px-4 text-xs text-slate-400"><span>{filename || language}</span><button type="button" @click="navigator.clipboard.writeText(code); copied = true" class="rounded-lg px-2 py-1 hover:bg-slate-800">{copied ? 'Copied' : 'Copy'}</button></div><pre class="overflow-x-auto p-4 text-sm leading-6"><code>{code}</code></pre></div>
+ }
+}
+Reusable code copy button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeCopyButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="CodeCopyButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeCopyButton.wrn
component CodeCopyButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable code header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CodeHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeHeader.wrn
component CodeHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeInput label="Code" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Code" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeInput.wrn
component CodeInput {
+ props {
+ label = "Code"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable code language badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeLanguageBadge label="CodeLanguage" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="CodeLanguageBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CodeLanguage" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeLanguageBadge.wrn
component CodeLanguageBadge {
+ props {
+ label = "CodeLanguage"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable code tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CodeTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeTabs.wrn
component CodeTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable code text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CodeText text="text" align="start" />Legacy mount name: data-component="CodeText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CodeText.wrn
component CodeText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--body wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable code component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Code eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Code".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Code.wrn
component Code {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable cohort chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CohortChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="CohortChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CohortChart.wrn
component CohortChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable color grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ColorGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ColorGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ColorGrid.wrn
component ColorGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable color hex input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ColorHexInput label="ColorHex" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ColorHexInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ColorHex" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ColorHexInput.wrn
component ColorHexInput {
+ props {
+ label = "ColorHex"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable color picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ColorPicker label="Color" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ColorPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Color" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ColorPicker.wrn
component ColorPicker {
+ props {
+ label = "Color"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable color selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ColorSelector label="Color" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ColorSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Color" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ColorSelector.wrn
component ColorSelector {
+ props {
+ label = "Color"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable color swatch component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ColorSwatch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ColorSwatch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ColorSwatch.wrn
component ColorSwatch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable combobox component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Combobox id="combobox" name="name" label="Choose an option" placeholder="Search options" options="[]" />Legacy mount name: data-component="Combobox".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "combobox" |
name | string | Optional | "" |
label | string | Optional | "Choose an option" |
placeholder | string | Optional | "Search options" |
options | string | Optional | [] |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Combobox.wrn
component Combobox {
+ props {
+ id = "combobox"
+ name = ""
+ label = "Choose an option"
+ placeholder = "Search options"
+ options = []
+ required = false
+ disabled = false
+ class = ""
+ }
+ view {
+ <div class="wire-field {class}"><label for="{id}" class="wire-label">{label}</label><input id="{id}" name="{name}" list="{id}-options" placeholder="{placeholder}" required="{required}" disabled="{disabled}" role="combobox" aria-autocomplete="list" class="wire-input" /><datalist id="{id}-options">{#each options as option}<option value="{option.value}">{option.label}</option>{/each}</datalist></div>
+ }
+}
+Reusable coming soon badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComingSoonBadge label="ComingSoon" variant="default" />Legacy mount name: data-component="ComingSoonBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ComingSoon" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComingSoonBadge.wrn
component ComingSoonBadge {
+ props {
+ label = "ComingSoon"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--comingsoonbadge {class}">{label}<slot /></span> }
+}
+Reusable coming soon state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComingSoonState label="ComingSoon" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ComingSoonState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ComingSoon" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComingSoonState.wrn
component ComingSoonState {
+ props {
+ label = "ComingSoon"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable command block component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CommandBlock eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CommandBlock".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CommandBlock.wrn
component CommandBlock {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable command menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CommandMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="CommandMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CommandMenu.wrn
component CommandMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable command search input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CommandSearchInput label="CommandSearch" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CommandSearchInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CommandSearch" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CommandSearchInput.wrn
component CommandSearchInput {
+ props {
+ label = "CommandSearch"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable company hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CompanyHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CompanyHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CompanyHero.wrn
component CompanyHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable company name input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CompanyNameInput label="CompanyName" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CompanyNameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CompanyName" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CompanyNameInput.wrn
component CompanyNameInput {
+ props {
+ label = "CompanyName"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable company page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CompanyPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="CompanyPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CompanyPageShell.wrn
component CompanyPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable company size selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CompanySizeSelector label="CompanySize" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CompanySizeSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CompanySize" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CompanySizeSelector.wrn
component CompanySizeSelector {
+ props {
+ label = "CompanySize"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable comparison date range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComparisonDateRangePicker label="ComparisonDateRange" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ComparisonDateRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ComparisonDateRange" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComparisonDateRangePicker.wrn
component ComparisonDateRangePicker {
+ props {
+ label = "ComparisonDateRange"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable comparison table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComparisonTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ComparisonTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComparisonTable.wrn
component ComparisonTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable completion meter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CompletionMeter title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="CompletionMeter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CompletionMeter.wrn
component CompletionMeter {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable compliance badge list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComplianceBadgeList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ComplianceBadgeList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComplianceBadgeList.wrn
component ComplianceBadgeList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable compliance program card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ComplianceProgramCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ComplianceProgramCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ComplianceProgramCard.wrn
component ComplianceProgramCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable confirm password input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConfirmPasswordInput label="ConfirmPassword" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ConfirmPasswordInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ConfirmPassword" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConfirmPasswordInput.wrn
component ConfirmPasswordInput {
+ props {
+ label = "ConfirmPassword"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable confirmation dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConfirmationDialog title="Confirm action" description="Are you sure you want to continue?" confirmLabel="Confirm" cancelLabel="Cancel" danger="false" />Legacy mount name: data-component="ConfirmationDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "Confirm action" |
description | string | Optional | "Are you sure you want to continue?" |
confirmLabel | string | Optional | "Confirm" |
cancelLabel | string | Optional | "Cancel" |
danger | boolean | Optional | false |
open | boolean | Optional | false |
class | string | Optional | "" |
confirmclickInstalled source: components/ConfirmationDialog.wrn
component ConfirmationDialog {
+ props {
+ title = "Confirm action"
+ description = "Are you sure you want to continue?"
+ confirmLabel = "Confirm"
+ cancelLabel = "Cancel"
+ danger = false
+ open = false
+ class = ""
+ }
+ state visible = open
+ view {
+ <div data-show="visible" class="wire-overlay {class}" role="presentation"><section role="alertdialog" aria-modal="true" aria-labelledby="confirmation-title" aria-describedby="confirmation-description" class="wire-dialog"><h2 id="confirmation-title" class="wire-dialog__title">{title}</h2><p id="confirmation-description" class="wire-dialog__description">{description}</p><div class="wire-dialog__actions"><button type="button" class="wire-btn wire-btn--ghost" @click="visible = false">{cancelLabel}</button><button type="button" class="wire-btn {danger ? 'wire-btn--danger' : 'wire-btn--primary'}"><slot name="confirm">{confirmLabel}</slot></button></div></section></div>
+ }
+}
+Reusable connected account card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConnectedAccountCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ConnectedAccountCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConnectedAccountCard.wrn
component ConnectedAccountCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable connection card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConnectionCard title="title" description="description" href="href" />Legacy mount name: data-component="ConnectionCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConnectionCard.wrn
component ConnectionCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--connection {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable consent timeline preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConsentTimelinePreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ConsentTimelinePreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConsentTimelinePreview.wrn
component ConsentTimelinePreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable contact card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactCard title="title" description="description" href="href" />Legacy mount name: data-component="ContactCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactCard.wrn
component ContactCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--contact {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable contact c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ContactCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactCTA.wrn
component ContactCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable contact form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ContactForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactForm.wrn
component ContactForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable contact hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ContactHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactHero.wrn
component ContactHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable contact page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ContactPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactPageShell.wrn
component ContactPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable contact sales banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactSalesBanner eyebrow="Enterprise identity" title="Ready to secure your next application?" description="description" primaryLabel="Contact sales" primaryHref="/contact" />Legacy mount name: data-component="ContactSalesBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "Enterprise identity" |
title | string | Optional | "Ready to secure your next application?" |
description | string | Optional | "" |
primaryLabel | string | Optional | "Contact sales" |
primaryHref | string | Optional | "/contact" |
secondaryLabel | string | Optional | "Start free" |
secondaryHref | string | Optional | "/sign-up" |
iconClass | string | Optional | "icon-[lucide--messages-square]" |
centered | boolean | Optional | false |
compact | boolean | Optional | false |
points | string | Optional | [] |
trustPoints | string | Optional | [] |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ContactSalesBanner.wrn
component ContactSalesBanner {
+ props {
+ class: string = ""
+ eyebrow = "Enterprise identity"
+ title = "Ready to secure your next application?"
+ description = ""
+
+ primaryLabel = "Contact sales"
+ primaryHref = "/contact"
+
+ secondaryLabel = "Start free"
+ secondaryHref = "/sign-up"
+
+ iconClass = "icon-[lucide--messages-square]"
+
+ centered = false
+ compact = false
+
+ points = []
+ trustPoints = []
+ }
+
+ view {
+ <section
+ aria-labelledby="contact-sales-banner-title"
+ class="px-5 sm:px-8 lg:px-10 xl:px-12 {class}"
+ class:py-10="compact"
+ class:sm:py-12="compact"
+ class:py-14="!compact"
+ class:sm:py-16="!compact"
+ class:lg:py-20="!compact"
+ >
+ <div
+ class="relative mx-auto w-full max-w-7xl overflow-hidden rounded-3xl border border-indigo-200/80 bg-linear-to-br from-indigo-50 via-white to-violet-50 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 dark:shadow-black/20"
+ >
+ <!-- Background decoration -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -right-24 -top-24 h-64 w-64 rounded-full bg-indigo-300/20 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -bottom-28 -left-20 h-64 w-64 rounded-full bg-violet-300/20 blur-3xl dark:bg-violet-500/10"></div>
+
+ <div class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-indigo-400/50 to-transparent dark:via-indigo-400/20"></div>
+ </div>
+
+ <div
+ class="relative"
+ class:px-6="compact"
+ class:py-7="compact"
+ class:sm:px-8="compact"
+ class:px-6="!compact"
+ class:py-8="!compact"
+ class:sm:px-9="!compact"
+ class:sm:py-10="!compact"
+ class:lg:px-12="!compact"
+ class:lg:py-12="!compact"
+ >
+ <!-- Main content -->
+ <div
+ class="gap-8"
+ class:flex="centered"
+ class:flex-col="centered"
+ class:items-center="centered"
+ class:text-center="centered"
+ class:mx-auto="centered"
+ class:max-w-4xl="centered"
+ class:grid="!centered"
+ class:lg:grid-cols-[minmax(0,1fr)_auto]="!centered"
+ class:lg:items-center="!centered"
+ class:lg:gap-12="!centered"
+ >
+ <!-- Copy -->
+ <div
+ class="min-w-0"
+ class:max-w-3xl="centered"
+ class:max-w-4xl="!centered"
+ >
+ <!-- Eyebrow -->
+ <div
+ class="flex"
+ class:hidden="eyebrow === ''"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-white/80 px-3 py-1.5 text-xs font-semibold text-indigo-700 shadow-sm backdrop-blur-sm dark:border-indigo-500/20 dark:bg-white/5 dark:text-indigo-300"
+ >
+ <span class="{iconClass} h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ {eyebrow}
+ </span>
+ </div>
+
+ <!-- Title -->
+ <h2
+ id="contact-sales-banner-title"
+ class="font-bold tracking-tight text-slate-950 dark:text-white"
+ class:mt-5="eyebrow !== ''"
+ class:text-2xl="compact"
+ class:leading-tight="compact"
+ class:sm:text-3xl="compact"
+ class:text-3xl="!compact"
+ class:leading-tight="!compact"
+ class:sm:text-4xl="!compact"
+ >
+ {title}
+ </h2>
+
+ <!-- Description -->
+ <p
+ class="mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400 sm:text-base"
+ class:hidden="description === ''"
+ class:mx-auto="centered"
+ class:max-w-2xl="centered"
+ class:max-w-3xl="!centered"
+ >
+ {description}
+ </p>
+
+ <!-- Dynamic points -->
+ <div
+ class="mt-6 flex flex-wrap gap-x-5 gap-y-3"
+ class:hidden="points.length === 0"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ {#each points.slice(0, 4) as point}
+ <div class="inline-flex items-center gap-2 text-sm font-medium text-slate-700 dark:text-slate-300">
+ <span
+ class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--check] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </span>
+
+ {point}
+ </div>
+ {/each}
+ </div>
+ </div>
+
+ <!-- Actions -->
+ <div
+ class="flex shrink-0 flex-col gap-3 sm:flex-row"
+ class:hidden="primaryLabel === '' && secondaryLabel === ''"
+ class:mt-1="centered"
+ class:justify-center="centered"
+ >
+ <a
+ href="{secondaryHref}"
+ class="h-12 items-center justify-center rounded-xl border border-slate-200 bg-white/90 px-5 text-sm font-semibold text-slate-700 shadow-sm backdrop-blur-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-white hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ class:hidden="secondaryLabel === ''"
+ class:inline-flex="secondaryLabel !== ''"
+ >
+ {secondaryLabel}
+ </a>
+
+ <a
+ href="{primaryHref}"
+ class="group h-12 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ class:hidden="primaryLabel === ''"
+ class:inline-flex="primaryLabel !== ''"
+ >
+ {primaryLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+
+ <!-- Dynamic trust strip -->
+ <div
+ class="mt-8 border-t border-indigo-200/70 pt-5 dark:border-indigo-500/15"
+ class:hidden="compact || trustPoints.length === 0"
+ >
+ <div
+ class="flex flex-wrap items-center gap-x-6 gap-y-3"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ {#each trustPoints.slice(0, 4) as trustPoint}
+ <span class="inline-flex items-center gap-2 text-xs font-medium text-slate-500 dark:text-slate-400">
+ <span class="{trustPoint.iconClass} h-4 w-4 {trustPoint.iconColorClass}" aria-hidden="true" ></span>
+
+ {trustPoint.label}
+ </span>
+ {/each}
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable contact sales button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactSalesButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ContactSalesButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactSalesButton.wrn
component ContactSalesButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable contact sales form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContactSalesForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ContactSalesForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContactSalesForm.wrn
component ContactSalesForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable container component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Container size="default" />Legacy mount name: data-component="Container".
| Prop | Type | Requirement | Default |
|---|---|---|---|
size | string | Optional | "default" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Container.wrn
component Container {
+ props {
+ size = "default"
+ className = ""
+ }
+ view {
+ <div class="w-full {size === 'narrow' ? 'max-w-3xl' : size === 'wide' ? 'max-w-screen-2xl' : 'max-w-7xl'} {className}"><slot /></div>
+ }
+}
+Reusable context menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContextMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="ContextMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContextMenu.wrn
component ContextMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable context switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ContextSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ContextSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ContextSwitcher.wrn
component ContextSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable conversation list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConversationList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ConversationList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConversationList.wrn
component ConversationList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable conversation preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConversationPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ConversationPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConversationPreview.wrn
component ConversationPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable conversion chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ConversionChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ConversionChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ConversionChart.wrn
component ConversionChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable cookie banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieBanner title="We use cookies" description="We use essential cookies and optional analytics to improve your experience." privacyHref="/privacy" />Legacy mount name: data-component="CookieBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "We use cookies" |
description | string | Optional | "We use essential cookies and optional analytics to improve your experience." |
privacyHref | string | Optional | "/privacy" |
This component does not declare a slot.
clickInstalled source: components/CookieBanner.wrn
component CookieBanner {
+ props {
+ class = ""
+ title = "We use cookies"
+ description = "We use essential cookies and optional analytics to improve your experience."
+ privacyHref = "/privacy"
+ }
+ state visible = true
+ view {
+ <aside data-show="visible" class="fixed inset-x-4 bottom-4 z-50 max-w-4xl rounded-3xl border border-slate-200 bg-white/95 p-5 shadow-2xl backdrop-blur-xl dark:border-slate-800 dark:bg-slate-900/95 {class}" role="dialog" aria-label="Cookie preferences"><div class="flex flex-col gap-5 md:flex-row md:items-center"><div class="min-w-0 flex-1"><h2 class="font-bold">{title}</h2><p class="mt-1 text-sm text-slate-500">{description} <a href="{privacyHref}" class="text-violet-600 underline">Privacy policy</a></p></div><div class="flex flex-wrap gap-2"><button @click="visible = false" class="min-h-11 rounded-xl border border-slate-300 px-4 text-sm font-semibold dark:border-slate-700">Reject optional</button><button @click="visible = false" class="min-h-11 rounded-xl bg-violet-600 px-4 text-sm font-semibold text-white">Accept all</button></div></div></aside>
+ }
+}
+Reusable cookie category list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieCategoryList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CookieCategoryList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CookieCategoryList.wrn
component CookieCategoryList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable cookie category toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieCategoryToggle label="CookieCategory" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CookieCategoryToggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CookieCategory" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CookieCategoryToggle.wrn
component CookieCategoryToggle {
+ props {
+ label = "CookieCategory"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable cookie consent component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieConsent />Legacy mount name: data-component="CookieConsent".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
clickchangeInstalled source: components/CookieConsent.wrn
component CookieConsent {
+ props {
+ class: string = ""
+ }
+ state bannerOpen = false
+ state preferencesOpen = false
+
+ state analyticsCookies = false
+ state personalizationCookies = false
+ state marketingCookies = false
+
+ view {
+ <div class="{class}" class:hidden="!bannerOpen">
+ <!-- Cookie consent banner -->
+ <section
+ role="dialog"
+ aria-modal="false"
+ aria-labelledby="cookie-consent-title"
+ aria-describedby="cookie-consent-description"
+ class="fixed inset-x-0 bottom-0 z-[80] p-4 sm:p-5 lg:p-6 {class}"
+ class:hidden="!bannerOpen || preferencesOpen"
+ class:block="bannerOpen && !preferencesOpen"
+ >
+ <div
+ class="mx-auto w-full max-w-7xl overflow-hidden rounded-3xl border border-slate-200 bg-white/95 shadow-2xl shadow-slate-950/20 backdrop-blur-xl dark:border-white/10 dark:bg-slate-900/95 dark:shadow-black/40"
+ >
+ <div class="grid items-center gap-6 p-5 sm:p-6 lg:grid-cols-[minmax(0,1fr)_auto] lg:p-7">
+
+ <!-- Message -->
+ <div class="flex items-start gap-4">
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-2xl bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--cookie] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0">
+ <div class="flex flex-wrap items-center gap-2">
+ <h2
+ id="cookie-consent-title"
+ class="text-base font-bold text-slate-950 dark:text-white"
+ >
+ Your privacy matters
+ </h2>
+
+ <span
+ class="inline-flex items-center rounded-full bg-emerald-100 px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ Privacy first
+ </span>
+ </div>
+
+ <p
+ id="cookie-consent-description"
+ class="mt-2 max-w-3xl text-sm leading-6 text-slate-600 dark:text-slate-400"
+ >
+ We use essential cookies to operate WRNexusJS. With your
+ permission, we also use analytics and personalization cookies
+ to improve your experience.
+ </p>
+
+ <div class="mt-3 flex flex-wrap items-center gap-x-4 gap-y-2">
+ <a
+ href="/cookies"
+ class="inline-flex items-center gap-1.5 text-xs font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ Cookie policy
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </a>
+
+ <a
+ href="/privacy"
+ class="inline-flex items-center gap-1.5 text-xs font-semibold text-slate-500 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ Privacy policy
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <!-- Actions -->
+ <div class="grid gap-2 sm:grid-cols-3 lg:flex lg:items-center">
+ <button
+ type="button"
+ @click=" analyticsCookies = false; personalizationCookies = false; marketingCookies = false; bannerOpen = false "
+ data-cookie-action="essential"
+ class="inline-flex h-11 items-center justify-center rounded-xl border border-slate-200 bg-white px-4 text-sm font-semibold text-slate-700 transition hover:border-slate-300 hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-white/20 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ Essential only
+ </button>
+
+ <button
+ type="button"
+ @click="preferencesOpen = true"
+ class="inline-flex h-11 items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-4 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/15"
+ >
+ <span class="icon-[lucide--settings-2] h-4 w-4" aria-hidden="true" ></span>
+
+ Preferences
+ </button>
+
+ <button
+ type="button"
+ @click=" analyticsCookies = true; personalizationCookies = true; marketingCookies = true; bannerOpen = false "
+ data-cookie-action="accept-all"
+ class="inline-flex h-11 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Accept all
+
+ <span class="icon-[lucide--check] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- Preferences backdrop -->
+ <button type="button" @click="preferencesOpen = false" aria-label="Close cookie preferences" class="fixed inset-0 z-[90] bg-slate-950/50 backdrop-blur-sm" class:hidden="!preferencesOpen" class:block="preferencesOpen" ></button>
+
+ <!-- Preferences modal -->
+ <section
+ role="dialog"
+ aria-modal="true"
+ aria-labelledby="cookie-preferences-title"
+ aria-describedby="cookie-preferences-description"
+ class="fixed inset-0 z-[100] overflow-y-auto p-4 sm:p-6"
+ class:hidden="!preferencesOpen"
+ class:block="preferencesOpen"
+ >
+ <div class="flex min-h-full items-end justify-center sm:items-center">
+ <div
+ class="relative w-full max-w-2xl overflow-hidden rounded-t-3xl border border-slate-200 bg-white shadow-2xl shadow-slate-950/30 dark:border-white/10 dark:bg-slate-900 dark:shadow-black/50 sm:rounded-3xl"
+ >
+ <!-- Modal header -->
+ <header class="border-b border-slate-200 px-5 py-5 dark:border-white/10 sm:px-6">
+ <div class="flex items-start justify-between gap-4">
+ <div class="flex items-start gap-4">
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-2xl bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--sliders-horizontal] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div>
+ <h2
+ id="cookie-preferences-title"
+ class="text-lg font-bold tracking-tight text-slate-950 dark:text-white"
+ >
+ Cookie preferences
+ </h2>
+
+ <p
+ id="cookie-preferences-description"
+ class="mt-1 text-sm leading-6 text-slate-500 dark:text-slate-400"
+ >
+ Choose which optional cookies WRNexusJS may use.
+ </p>
+ </div>
+ </div>
+
+ <button
+ type="button"
+ @click="preferencesOpen = false"
+ aria-label="Close cookie preferences"
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl border border-slate-200 bg-white text-slate-500 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-400 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </header>
+
+ <!-- Preference groups -->
+ <div class="max-h-[60dvh] space-y-3 overflow-y-auto p-5 sm:p-6">
+
+ <!-- Essential -->
+ <article
+ class="rounded-2xl bg-emerald-500/10 p-4 ring-1 ring-inset ring-emerald-500/15 transition dark:bg-emerald-500/10 dark:ring-emerald-400/10"
+ >
+ <div class="flex items-start justify-between gap-4">
+ <div class="flex items-start gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-emerald-500/15 text-emerald-700 dark:bg-emerald-400/10 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--shield-check] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </span>
+
+ <div>
+ <div class="flex flex-wrap items-center gap-2">
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Essential cookies
+ </h3>
+
+ <span
+ class="rounded-full bg-emerald-500/15 px-2 py-0.5 text-[10px] font-bold uppercase tracking-wide text-emerald-700 dark:bg-emerald-400/10 dark:text-emerald-300"
+ >
+ Always active
+ </span>
+ </div>
+
+ <p class="mt-1.5 text-xs leading-5 text-slate-600 dark:text-slate-400">
+ Required for authentication, security, sessions, preferences, and core website functionality.
+ </p>
+ </div>
+ </div>
+
+ <span
+ class="relative inline-flex h-6 w-11 shrink-0 cursor-not-allowed rounded-full bg-emerald-500"
+ aria-hidden="true"
+ >
+ <span class="absolute right-1 top-1 h-4 w-4 rounded-full bg-white shadow-sm" ></span>
+ </span>
+ </div>
+ </article>
+
+ <!-- Analytics -->
+ <article
+ class="rounded-2xl p-4 transition-all duration-200 {analyticsCookies ? 'bg-indigo-50 ring-1 ring-inset ring-indigo-200 dark:bg-indigo-500/10 dark:ring-indigo-500/20' : 'bg-slate-50 ring-1 ring-inset ring-slate-200 dark:bg-white/5 dark:ring-white/10' }"
+ >
+ <label class="flex cursor-pointer items-start justify-between gap-4">
+ <span class="flex min-w-0 items-start gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition-all duration-200 {analyticsCookies ? 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300' : 'bg-slate-200 text-slate-500 dark:bg-white/10 dark:text-slate-400' }"
+ >
+ <span class="icon-[lucide--chart-no-axes-combined] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="block text-sm font-bold text-slate-950 dark:text-white">
+ Analytics cookies
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-600 dark:text-slate-400">
+ Help us understand website usage, performance, and navigation patterns.
+ </span>
+ </span>
+ </span>
+
+ <span class="relative mt-0.5 shrink-0">
+ <input
+ type="checkbox"
+ name="analytics"
+ checked="{analyticsCookies}"
+ @change="analyticsCookies = event.target.checked"
+ class="peer sr-only"
+ />
+
+ <span class="block h-6 w-11 rounded-full bg-slate-300 transition-colors duration-200 peer-checked:bg-indigo-600 peer-focus-visible:ring-4 peer-focus-visible:ring-indigo-500/20 dark:bg-slate-700" ></span>
+
+ <span class="absolute left-1 top-1 h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200 peer-checked:translate-x-5" ></span>
+ </span>
+ </label>
+ </article>
+
+ <!-- Personalization -->
+ <article
+ class="rounded-2xl p-4 transition-all duration-200 {personalizationCookies ? 'bg-violet-50 ring-1 ring-inset ring-violet-200 dark:bg-violet-500/10 dark:ring-violet-500/20' : 'bg-slate-50 ring-1 ring-inset ring-slate-200 dark:bg-white/5 dark:ring-white/10' }"
+ >
+ <label class="flex cursor-pointer items-start justify-between gap-4">
+ <span class="flex min-w-0 items-start gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition-all duration-200 {personalizationCookies ? 'bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-300' : 'bg-slate-200 text-slate-500 dark:bg-white/10 dark:text-slate-400' }"
+ >
+ <span class="icon-[lucide--sparkles] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="block text-sm font-bold text-slate-950 dark:text-white">
+ Personalization cookies
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-600 dark:text-slate-400">
+ Remember your choices and provide a more relevant website experience.
+ </span>
+ </span>
+ </span>
+
+ <span class="relative mt-0.5 shrink-0">
+ <input
+ type="checkbox"
+ name="personalization"
+ checked="{personalizationCookies}"
+ @change="personalizationCookies = event.target.checked"
+ class="peer sr-only"
+ />
+
+ <span class="block h-6 w-11 rounded-full bg-slate-300 transition-colors duration-200 peer-checked:bg-violet-600 peer-focus-visible:ring-4 peer-focus-visible:ring-violet-500/20 dark:bg-slate-700" ></span>
+
+ <span class="absolute left-1 top-1 h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200 peer-checked:translate-x-5" ></span>
+ </span>
+ </label>
+ </article>
+
+ <!-- Marketing -->
+ <article
+ class="rounded-2xl p-4 transition-all duration-200 {marketingCookies ? 'bg-rose-50 ring-1 ring-inset ring-rose-200 dark:bg-rose-500/10 dark:ring-rose-500/20' : 'bg-slate-50 ring-1 ring-inset ring-slate-200 dark:bg-white/5 dark:ring-white/10' }"
+ >
+ <label class="flex cursor-pointer items-start justify-between gap-4">
+ <span class="flex min-w-0 items-start gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition-all duration-200 {marketingCookies ? 'bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-300' : 'bg-slate-200 text-slate-500 dark:bg-white/10 dark:text-slate-400' }"
+ >
+ <span class="icon-[lucide--megaphone] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="block text-sm font-bold text-slate-950 dark:text-white">
+ Marketing cookies
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-600 dark:text-slate-400">
+ Measure campaigns and show relevant WRNexusJS content across supported services.
+ </span>
+ </span>
+ </span>
+
+ <span class="relative mt-0.5 shrink-0">
+ <input
+ type="checkbox"
+ name="marketing"
+ checked="{marketingCookies}"
+ @change="marketingCookies = event.target.checked"
+ class="peer sr-only"
+ />
+
+ <span class="block h-6 w-11 rounded-full bg-slate-300 transition-colors duration-200 peer-checked:bg-rose-600 peer-focus-visible:ring-4 peer-focus-visible:ring-rose-500/20 dark:bg-slate-700" ></span>
+
+ <span class="absolute left-1 top-1 h-4 w-4 rounded-full bg-white shadow-sm transition-transform duration-200 peer-checked:translate-x-5" ></span>
+ </span>
+ </label>
+ </article>
+ </div>
+
+ <!-- Modal footer -->
+ <footer
+ class="border-t border-slate-200 bg-slate-50 px-5 py-4 dark:border-white/10 dark:bg-white/[0.02] sm:px-6"
+ >
+ <div class="grid gap-2 sm:grid-cols-3">
+ <button
+ type="button"
+ @click=" analyticsCookies = false; personalizationCookies = false; marketingCookies = false "
+ class="inline-flex h-11 items-center justify-center rounded-xl border border-slate-200 bg-white px-4 text-sm font-semibold text-slate-700 transition hover:border-slate-300 hover:bg-slate-100 hover:text-slate-950 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ Reject optional
+ </button>
+
+ <button
+ type="button"
+ @click=" analyticsCookies = true; personalizationCookies = true; marketingCookies = true "
+ class="inline-flex h-11 items-center justify-center rounded-xl border border-indigo-200 bg-indigo-50 px-4 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:bg-indigo-500/15"
+ >
+ Enable all
+ </button>
+
+ <button
+ type="button"
+ @click=" preferencesOpen = false; bannerOpen = false "
+ data-cookie-action="save-preferences"
+ class="inline-flex h-11 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl"
+ >
+ <span class="icon-[lucide--save] h-4 w-4" aria-hidden="true" ></span>
+
+ Save preferences
+ </button>
+ </div>
+ </footer>
+ </div>
+ </div>
+ </section>
+ </div>
+ }
+}
+Reusable cookie details table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieDetailsTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CookieDetailsTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CookieDetailsTable.wrn
component CookieDetailsTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable cookie preferences dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookiePreferencesDialog title="Cookie preferences" description="Choose which optional cookies you allow. Essential cookies are always enabled." saveLabel="Save preferences" acceptLabel="Accept all" rejectLabel="Reject optional" />Legacy mount name: data-component="CookiePreferencesDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "Cookie preferences" |
description | string | Optional | "Choose which optional cookies you allow. Essential cookies are always enabled." |
saveLabel | string | Optional | "Save preferences" |
acceptLabel | string | Optional | "Accept all" |
rejectLabel | string | Optional | "Reject optional" |
open | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
changeclickInstalled source: components/CookiePreferencesDialog.wrn
component CookiePreferencesDialog {
+ props {
+ title = "Cookie preferences"
+ description = "Choose which optional cookies you allow. Essential cookies are always enabled."
+ saveLabel = "Save preferences"
+ acceptLabel = "Accept all"
+ rejectLabel = "Reject optional"
+ open = false
+ class = ""
+ }
+ state visible = open
+ state analytics = false
+ state marketing = false
+ view {
+ <div data-show="visible" class="wire-overlay {class}" role="presentation"><section role="dialog" aria-modal="true" aria-labelledby="cookie-preferences-title" class="wire-dialog wire-cookie-dialog"><h2 id="cookie-preferences-title" class="wire-dialog__title">{title}</h2><p class="wire-dialog__description">{description}</p><div class="wire-cookie-list"><label class="wire-cookie-option"><span><strong>Essential</strong><small>Required for security and core functionality.</small></span><input type="checkbox" checked disabled /></label><label class="wire-cookie-option"><span><strong>Analytics</strong><small>Helps improve product performance.</small></span><input type="checkbox" checked="{analytics}" @change="analytics = event.target.checked" /></label><label class="wire-cookie-option"><span><strong>Marketing</strong><small>Supports relevant campaigns and measurement.</small></span><input type="checkbox" checked="{marketing}" @change="marketing = event.target.checked" /></label></div><div class="wire-dialog__actions wire-dialog__actions--wrap"><button type="button" class="wire-btn wire-btn--ghost" @click="analytics = false; marketing = false">{rejectLabel}</button><button type="button" class="wire-btn wire-btn--default" @click="analytics = true; marketing = true">{acceptLabel}</button><button type="button" class="wire-btn wire-btn--primary" @click="visible = false">{saveLabel}</button></div></section></div>
+ }
+}
+Reusable cookie table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CookieTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="CookieTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CookieTable.wrn
component CookieTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable coordinates input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CoordinatesInput label="Coordinates" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CoordinatesInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Coordinates" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CoordinatesInput.wrn
component CoordinatesInput {
+ props {
+ label = "Coordinates"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable coordinates picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CoordinatesPicker label="Coordinates" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CoordinatesPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Coordinates" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CoordinatesPicker.wrn
component CoordinatesPicker {
+ props {
+ label = "Coordinates"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable copy button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CopyButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="CopyButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CopyButton.wrn
component CopyButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--default {class}">{label}<slot /></button> }
+}
+Reusable copy code button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CopyCodeButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="CopyCodeButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CopyCodeButton.wrn
component CopyCodeButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable copy secret field component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CopySecretField label="CopySecret" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CopySecretField".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CopySecret" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CopySecretField.wrn
component CopySecretField {
+ props {
+ label = "CopySecret"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable cost breakdown chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CostBreakdownChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="CostBreakdownChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CostBreakdownChart.wrn
component CostBreakdownChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable cost summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CostSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CostSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CostSummary.wrn
component CostSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable counter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Counter label="Status" variant="default" />Legacy mount name: data-component="Counter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Status" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Counter.wrn
component Counter {
+ props {
+ label = "Status"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--counter {class}">{label}<slot /></span> }
+}
+Reusable country calling code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CountryCallingCodeInput label="CountryCallingCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CountryCallingCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CountryCallingCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CountryCallingCodeInput.wrn
component CountryCallingCodeInput {
+ props {
+ label = "CountryCallingCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable country calling code selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CountryCallingCodeSelector label="CountryCallingCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CountryCallingCodeSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CountryCallingCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CountryCallingCodeSelector.wrn
component CountryCallingCodeSelector {
+ props {
+ label = "CountryCallingCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable country selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CountrySelector label="Country" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CountrySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Country" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CountrySelector.wrn
component CountrySelector {
+ props {
+ label = "Country"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable coupon input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CouponInput label="Coupon" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CouponInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Coupon" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CouponInput.wrn
component CouponInput {
+ props {
+ label = "Coupon"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable credit amount input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CreditAmountInput label="CreditAmount" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CreditAmountInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CreditAmount" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CreditAmountInput.wrn
component CreditAmountInput {
+ props {
+ label = "CreditAmount"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable cron builder component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CronBuilder eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CronBuilder".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CronBuilder.wrn
component CronBuilder {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable cron input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CronInput label="Cron" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CronInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Cron" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CronInput.wrn
component CronInput {
+ props {
+ label = "Cron"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable csv upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CsvUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CsvUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CsvUpload.wrn
component CsvUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable c t a section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CTASection eyebrow="Ready?" title="Start building today" description="description" primaryLabel="Get started" primaryHref="#" />Legacy mount name: data-component="CTASection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "Ready?" |
title | string | Optional | "Start building today" |
description | string | Optional | "" |
primaryLabel | string | Optional | "Get started" |
primaryHref | string | Optional | "#" |
secondaryLabel | string | Optional | "Contact sales" |
secondaryHref | string | Optional | "#" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/CTASection.wrn
component CTASection {
+ props {
+ class = ""
+ eyebrow = "Ready?"
+ title = "Start building today"
+ description = ""
+ primaryLabel = "Get started"
+ primaryHref = "#"
+ secondaryLabel = "Contact sales"
+ secondaryHref = "#"
+ }
+ view {
+ <section class="overflow-hidden rounded-3xl bg-gradient-to-br from-violet-600 via-violet-700 to-fuchsia-700 text-center text-white shadow-2xl {class}"><p class="text-sm font-bold uppercase tracking-[0.18em] text-violet-100">{eyebrow}</p><h2 class="mx-auto mt-3 max-w-3xl text-3xl font-black sm:text-4xl">{title}</h2><p data-show="description" class="mx-auto mt-4 max-w-2xl text-violet-100">{description}</p><div class="mt-8 flex flex-wrap justify-center gap-3"><a href="{primaryHref}" class="inline-flex min-h-12 items-center rounded-xl bg-white px-5 font-semibold text-violet-700 shadow-lg transition hover:-translate-y-0.5">{primaryLabel}</a><a data-show="secondaryLabel" href="{secondaryHref}" class="inline-flex min-h-12 items-center rounded-xl border border-white/30 px-5 font-semibold text-white transition hover:bg-white/10">{secondaryLabel}</a></div></section>
+ }
+}
+Reusable currency input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CurrencyInput label="Currency" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CurrencyInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Currency" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CurrencyInput.wrn
component CurrencyInput {
+ props {
+ label = "Currency"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable currency selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CurrencySelector label="Currency" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CurrencySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Currency" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CurrencySelector.wrn
component CurrencySelector {
+ props {
+ label = "Currency"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable current password input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CurrentPasswordInput label="CurrentPassword" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="CurrentPasswordInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "CurrentPassword" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CurrentPasswordInput.wrn
component CurrentPasswordInput {
+ props {
+ label = "CurrentPassword"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable customer logo component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CustomerLogo eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CustomerLogo".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CustomerLogo.wrn
component CustomerLogo {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable customer story card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<CustomerStoryCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="CustomerStoryCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/CustomerStoryCard.wrn
component CustomerStoryCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable danger button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DangerButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="DangerButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DangerButton.wrn
component DangerButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--danger {class}">{label}<slot /></button> }
+}
+Reusable data protection card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DataProtectionCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DataProtectionCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DataProtectionCard.wrn
component DataProtectionCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable data retention table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DataRetentionTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="DataRetentionTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DataRetentionTable.wrn
component DataRetentionTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable data table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DataTable caption="Data table" columns="[]" rows="[]" emptyMessage="No data available." striped="false" />Legacy mount name: data-component="DataTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
caption | string | Optional | "Data table" |
columns | string | Optional | [] |
rows | string | Optional | [] |
emptyMessage | string | Optional | "No data available." |
striped | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DataTable.wrn
component DataTable {
+ props {
+ caption = "Data table"
+ columns = []
+ rows = []
+ emptyMessage = "No data available."
+ striped = false
+ class = ""
+ }
+ view {
+ <div class="wire-table-wrap {class}" tabindex="0" role="region" aria-label="{caption}"><table class="wire-table {striped ? 'wire-table--striped' : ''}"><caption class="wire-visually-hidden">{caption}</caption><thead><tr>{#each columns as column}<th scope="col">{column.label}</th>{/each}</tr></thead><tbody>{#each rows as row}<tr>{#each columns as column}<td>{row[column.key]}</td>{/each}</tr>{:empty}<tr><td colspan="{columns.length}">{emptyMessage}</td></tr>{/each}</tbody></table></div>
+ }
+}
+Reusable date input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateInput id="id" name="name" label="Date" value="value" placeholder="placeholder" />Legacy mount name: data-component="DateInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Date" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DateInput.wrn
component DateInput {
+ props {
+ class = ""
+ id: string = ""
+ name: string = ""
+ label: string = "Date"
+ value: string = ""
+ placeholder: string = ""
+ help: string = ""
+ error: string = ""
+ required: boolean = false
+ disabled: boolean = false
+ readonly: boolean = false
+ autocomplete: string = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="date" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable date picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DatePicker id="date" name="date" label="Date" value="value" min="min" />Legacy mount name: data-component="DatePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "date" |
name | string | Optional | "date" |
label | string | Optional | "Date" |
value | string | Optional | "" |
min | string | Optional | "" |
max | string | Optional | "" |
required | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DatePicker.wrn
component DatePicker {
+ props {
+ class = ""
+ id: string = "date"
+ name: string = "date"
+ label: string = "Date"
+ value: string = ""
+ min: string = ""
+ max: string = ""
+ required: boolean = false
+ }
+ view {
+ <DateInput class="{class}" id="{id}" name="{name}" label="{label}" value="{value}" required="{required}" />
+ }
+}
+Reusable date range calendar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateRangeCalendar eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DateRangeCalendar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DateRangeCalendar.wrn
component DateRangeCalendar {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable date range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateRangePicker label="Date range" startName="startDate" endName="endDate" />Legacy mount name: data-component="DateRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Date range" |
startName | string | Optional | "startDate" |
endName | string | Optional | "endDate" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DateRangePicker.wrn
component DateRangePicker {
+ props {
+ class = ""
+ label = "Date range"
+ startName = "startDate"
+ endName = "endDate"
+ }
+ view {
+ <fieldset class="{class}"><legend class="mb-2 text-sm font-semibold">{label}</legend><div class="grid gap-3 sm:grid-cols-2"><DateInput id="{startName}" name="{startName}" label="Start date" /><DateInput id="{endName}" name="{endName}" label="End date" /></div></fieldset>
+ }
+}
+Reusable date range slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateRangeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DateRangeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DateRangeSlider.wrn
component DateRangeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable date time input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateTimeInput id="id" name="name" label="DateTime" value="value" placeholder="placeholder" />Legacy mount name: data-component="DateTimeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "DateTime" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DateTimeInput.wrn
component DateTimeInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "DateTime"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="datetime-local" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable date time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateTimePicker id="datetime-picker" name="datetime" label="Date and time" value="value" min="min" />Legacy mount name: data-component="DateTimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "datetime-picker" |
name | string | Optional | "datetime" |
label | string | Optional | "Date and time" |
value | string | Optional | "" |
min | string | Optional | "" |
max | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DateTimePicker.wrn
component DateTimePicker {
+ props {
+ id = "datetime-picker"
+ name = "datetime"
+ label = "Date and time"
+ value = ""
+ min = ""
+ max = ""
+ required = false
+ disabled = false
+ class = ""
+ }
+ view { <div class="wire-field {class}"><label for="{id}" class="wire-label">{label}</label><input id="{id}" name="{name}" type="datetime-local" value="{value}" min="{min}" max="{max}" required="{required}" disabled="{disabled}" class="wire-input" /></div> }
+}
+Reusable date time range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DateTimeRangePicker label="DateTimeRange" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DateTimeRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "DateTimeRange" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DateTimeRangePicker.wrn
component DateTimeRangePicker {
+ props {
+ label = "DateTimeRange"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable decimal input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DecimalInput label="Decimal" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DecimalInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Decimal" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DecimalInput.wrn
component DecimalInput {
+ props {
+ label = "Decimal"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable definition list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DefinitionList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="DefinitionList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DefinitionList.wrn
component DefinitionList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable delete confirmation dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeleteConfirmationDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="DeleteConfirmationDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeleteConfirmationDialog.wrn
component DeleteConfirmationDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable delivery preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeliveryPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DeliveryPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeliveryPreview.wrn
component DeliveryPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable delivery status chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeliveryStatusChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="DeliveryStatusChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeliveryStatusChart.wrn
component DeliveryStatusChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable delivery status timeline component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeliveryStatusTimeline title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="DeliveryStatusTimeline".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeliveryStatusTimeline.wrn
component DeliveryStatusTimeline {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable demo request form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DemoRequestForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DemoRequestForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DemoRequestForm.wrn
component DemoRequestForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable department input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DepartmentInput label="Department" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DepartmentInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Department" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DepartmentInput.wrn
component DepartmentInput {
+ props {
+ label = "Department"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable deprecated feature alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeprecatedFeatureAlert label="DeprecatedFeature" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="DeprecatedFeatureAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "DeprecatedFeature" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeprecatedFeatureAlert.wrn
component DeprecatedFeatureAlert {
+ props {
+ label = "DeprecatedFeature"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable description list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DescriptionList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="DescriptionList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DescriptionList.wrn
component DescriptionList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable desktop navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DesktopNavigation label="Primary navigation" items="[]" />Legacy mount name: data-component="DesktopNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Primary navigation" |
items | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DesktopNavigation.wrn
component DesktopNavigation {
+ props {
+ label = "Primary navigation"
+ items = []
+ class = ""
+ }
+ view { <nav aria-label="{label}" class="wire-desktop-nav {class}"><ul>{#each items as item}<li><a href="{item.href}" aria-current="{item.current ? 'page' : 'false'}">{item.label}</a></li>{/each}</ul></nav> }
+}
+Reusable developer c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeveloperCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="DeveloperCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeveloperCTA.wrn
component DeveloperCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable developer hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeveloperHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="DeveloperHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeveloperHero.wrn
component DeveloperHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable developer page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeveloperPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="DeveloperPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeveloperPageShell.wrn
component DeveloperPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable developer search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeveloperSearch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DeveloperSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeveloperSearch.wrn
component DeveloperSearch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable developers mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DevelopersMegaMenu />Legacy mount name: data-component="DevelopersMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/DevelopersMegaMenu.wrn
component DevelopersMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+ <div
+ class="border-t border-slate-200 bg-white shadow-2xl shadow-slate-950/10 dark:border-white/10 dark:bg-slate-950 dark:shadow-black/30 {class}"
+ >
+ <div class="mx-auto max-w-7xl px-6 py-8 lg:px-10">
+ <div class="grid gap-8 lg:grid-cols-[minmax(0,1.55fr)_minmax(18rem,0.8fr)]">
+
+ <!-- Developer resources -->
+ <section>
+ <div class="mb-5 flex items-end justify-between gap-6">
+ <div>
+ <p class="text-xs font-semibold uppercase tracking-[0.16em] text-indigo-600 dark:text-indigo-400">
+ Developers
+ </p>
+
+ <h2 class="mt-2 text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ Build secure identity into any application
+ </h2>
+
+ <p class="mt-1 text-sm text-slate-500 dark:text-slate-400">
+ Explore documentation, APIs, SDKs, examples, and tools built
+ for modern development teams.
+ </p>
+ </div>
+
+ <a
+ href="/docs"
+ class="group hidden items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300 xl:inline-flex"
+ >
+ Open documentation
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <div class="grid gap-2 md:grid-cols-2">
+
+ <!-- Documentation -->
+ <a
+ href="/docs"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-indigo-200 hover:bg-indigo-50 dark:hover:border-indigo-500/20 dark:hover:bg-indigo-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 transition group-hover:bg-indigo-600 group-hover:text-white dark:bg-indigo-500/15 dark:text-indigo-300 dark:group-hover:bg-indigo-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--book-open] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Documentation
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-indigo-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-indigo-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Guides for authentication, users, organizations, and
+ authorization.
+ </span>
+ </span>
+ </a>
+
+ <!-- API reference -->
+ <a
+ href="/docs/api"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-violet-200 hover:bg-violet-50 dark:hover:border-violet-500/20 dark:hover:bg-violet-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-violet-100 text-violet-700 transition group-hover:bg-violet-600 group-hover:text-white dark:bg-violet-500/15 dark:text-violet-300 dark:group-hover:bg-violet-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--braces] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ API reference
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-violet-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-violet-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Complete endpoint, request, response, and error
+ documentation.
+ </span>
+ </span>
+ </a>
+
+ <!-- SDKs -->
+ <a
+ href="/sdks"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-cyan-200 hover:bg-cyan-50 dark:hover:border-cyan-500/20 dark:hover:bg-cyan-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-cyan-100 text-cyan-700 transition group-hover:bg-cyan-600 group-hover:text-white dark:bg-cyan-500/15 dark:text-cyan-300 dark:group-hover:bg-cyan-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--package] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ SDKs
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-cyan-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-cyan-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Official libraries for JavaScript, TypeScript, Go, Java,
+ Python, and more.
+ </span>
+ </span>
+ </a>
+
+ <!-- Examples -->
+ <a
+ href="/examples"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-emerald-200 hover:bg-emerald-50 dark:hover:border-emerald-500/20 dark:hover:bg-emerald-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-emerald-100 text-emerald-700 transition group-hover:bg-emerald-600 group-hover:text-white dark:bg-emerald-500/15 dark:text-emerald-300 dark:group-hover:bg-emerald-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--flask-conical] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Examples
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-emerald-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-emerald-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Ready-to-run projects for common frameworks and identity
+ flows.
+ </span>
+ </span>
+ </a>
+
+ <!-- Webhooks -->
+ <a
+ href="/docs/webhooks"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-amber-200 hover:bg-amber-50 dark:hover:border-amber-500/20 dark:hover:bg-amber-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-amber-100 text-amber-700 transition group-hover:bg-amber-600 group-hover:text-white dark:bg-amber-500/15 dark:text-amber-300 dark:group-hover:bg-amber-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--webhook] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Webhooks
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-amber-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-amber-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Respond to user, session, organization, and security events.
+ </span>
+ </span>
+ </a>
+
+ <!-- Changelog -->
+ <a
+ href="/changelog"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-rose-200 hover:bg-rose-50 dark:hover:border-rose-500/20 dark:hover:bg-rose-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-rose-100 text-rose-700 transition group-hover:bg-rose-600 group-hover:text-white dark:bg-rose-500/15 dark:text-rose-300 dark:group-hover:bg-rose-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--history] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Changelog
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-rose-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-rose-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Review platform releases, improvements, and migration notes.
+ </span>
+ </span>
+ </a>
+ </div>
+
+ <a
+ href="/docs"
+ class="mt-4 flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/15 xl:hidden"
+ >
+ Open documentation
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ </section>
+
+ <!-- Developer toolkit -->
+ <aside
+ class="relative overflow-hidden rounded-3xl border border-indigo-200 bg-linear-to-br from-indigo-50 via-white to-violet-50 p-6 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 dark:shadow-black/20"
+ >
+ <!-- Decorative glow -->
+ <div aria-hidden="true" class="absolute -right-20 -top-20 h-48 w-48 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div aria-hidden="true" class="absolute -bottom-24 -left-20 h-48 w-48 rounded-full bg-violet-300/30 blur-3xl dark:bg-violet-500/10" ></div>
+
+ <div class="relative">
+ <!-- Header -->
+ <div class="flex items-center justify-between gap-4">
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-white/80 px-3 py-1.5 text-xs font-semibold text-indigo-700 backdrop-blur-sm dark:border-indigo-500/20 dark:bg-white/5 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--code-2] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ Developer toolkit
+ </span>
+
+ <span class="inline-flex items-center gap-2 text-xs font-medium text-slate-500 dark:text-slate-400">
+ <span class="relative flex h-2 w-2">
+ <span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60"></span>
+ <span class="relative inline-flex h-2 w-2 rounded-full bg-emerald-500"></span>
+ </span>
+
+ APIs operational
+ </span>
+ </div>
+
+ <!-- Intro -->
+ <div
+ class="mt-5 grid h-12 w-12 place-items-center rounded-2xl bg-indigo-600 text-white shadow-lg shadow-indigo-600/20"
+ >
+ <span class="icon-[lucide--blocks] h-6 w-6" aria-hidden="true" ></span>
+ </div>
+
+ <h3 class="mt-5 text-xl font-bold tracking-tight text-slate-950 dark:text-white">
+ Everything developers need
+ </h3>
+
+ <p class="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
+ Build, test, and ship secure identity flows with APIs, SDKs,
+ examples, webhooks, and complete documentation.
+ </p>
+
+ <!-- Toolkit links -->
+ <div class="mt-6 grid gap-3">
+ <!-- Documentation -->
+ <a
+ href="/docs"
+ class="group flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-white/80 px-4 py-3.5 transition hover:border-indigo-300 hover:bg-white hover:shadow-md dark:border-white/10 dark:bg-white/5 dark:hover:border-indigo-500/30 dark:hover:bg-white/10"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--book-open] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ Documentation
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Guides and platform concepts
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 shrink-0 text-slate-400 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-indigo-600 dark:group-hover:text-indigo-300" aria-hidden="true" ></span>
+ </a>
+
+ <!-- API reference -->
+ <a
+ href="/docs/api"
+ class="group flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-white/80 px-4 py-3.5 transition hover:border-violet-300 hover:bg-white hover:shadow-md dark:border-white/10 dark:bg-white/5 dark:hover:border-violet-500/30 dark:hover:bg-white/10"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-xl bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-300"
+ >
+ <span class="icon-[lucide--braces] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ API reference
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Endpoints, requests, and responses
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 shrink-0 text-slate-400 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-violet-600 dark:group-hover:text-violet-300" aria-hidden="true" ></span>
+ </a>
+
+ <!-- SDKs -->
+ <a
+ href="/sdks"
+ class="group flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-white/80 px-4 py-3.5 transition hover:border-cyan-300 hover:bg-white hover:shadow-md dark:border-white/10 dark:bg-white/5 dark:hover:border-cyan-500/30 dark:hover:bg-white/10"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-xl bg-cyan-100 text-cyan-700 dark:bg-cyan-500/15 dark:text-cyan-300"
+ >
+ <span class="icon-[lucide--package] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ Official SDKs
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Libraries for your preferred stack
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 shrink-0 text-slate-400 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-cyan-600 dark:group-hover:text-cyan-300" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <!-- Actions -->
+ <div class="mt-6 grid grid-cols-2 gap-3">
+ <a
+ href="/docs/quickstart"
+ class="group flex h-11 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Start building
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+
+ <a
+ href="/examples"
+ class="flex h-11 items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white/80 px-4 text-sm font-semibold text-slate-700 transition hover:border-indigo-300 hover:bg-white hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--flask-conical] h-4 w-4" aria-hidden="true" ></span>
+
+ Examples
+ </a>
+ </div>
+ </div>
+ </aside>
+ </div>
+
+ <!-- Bottom developer links -->
+ <div
+ class="mt-7 flex flex-wrap items-center justify-between gap-4 border-t border-slate-200 pt-5 dark:border-white/10"
+ >
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3">
+ <a
+ href="/docs/authentication"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--fingerprint] h-4 w-4" aria-hidden="true" ></span>
+
+ Authentication guides
+ </a>
+
+ <a
+ href="/docs/organizations"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--building-2] h-4 w-4" aria-hidden="true" ></span>
+
+ Organizations
+ </a>
+
+ <a
+ href="/docs/authorization"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--shield-keyhole] h-4 w-4" aria-hidden="true" ></span>
+
+ Authorization
+ </a>
+
+ <a
+ href="/status"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="relative flex h-2 w-2">
+ <span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60"></span>
+ <span class="relative inline-flex h-2 w-2 rounded-full bg-emerald-500"></span>
+ </span>
+
+ System status
+ </a>
+ </div>
+
+ <a
+ href="/support/developers"
+ class="group inline-flex items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ Developer support
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ }
+}
+Reusable developers menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DevelopersMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="DevelopersMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DevelopersMenu.wrn
component DevelopersMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable device card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DeviceCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DeviceCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DeviceCard.wrn
component DeviceCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable disclosure component.
Components are auto-discovered. Use the component directly in any .wrn view:
<disclosure summary="Details" />Legacy mount name: data-component="disclosure".
| Prop | Type | Requirement | Default |
|---|---|---|---|
summary | string | Optional | "Details" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/disclosure.wrn
// Expand/collapse section using native <details> (no JS).
+component Disclosure {
+ props {
+ summary = "Details"
+ class = ""
+ }
+ view {
+ <details class="wire-disclosure {class}">
+ <summary class="wire-disclosure__summary">{summary}</summary>
+ <div class="wire-disclosure__body"><slot></slot></div>
+ </details>
+ }
+}
+Reusable discount input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DiscountInput label="Discount" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DiscountInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Discount" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DiscountInput.wrn
component DiscountInput {
+ props {
+ label = "Discount"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable display heading component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DisplayHeading text="text" align="start" />Legacy mount name: data-component="DisplayHeading".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DisplayHeading.wrn
component DisplayHeading {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--display wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable display name input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DisplayNameInput label="DisplayName" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DisplayNameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "DisplayName" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DisplayNameInput.wrn
component DisplayNameInput {
+ props {
+ label = "DisplayName"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable divider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Divider />Legacy mount name: data-component="Divider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Divider.wrn
component Divider {
+ props {
+ className = ""
+ }
+ view {
+ <div class="h-px w-full bg-slate-200 dark:bg-slate-800 {className}"><slot /></div>
+ }
+}
+Reusable do not sell link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DoNotSellLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="DoNotSellLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DoNotSellLink.wrn
component DoNotSellLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable document preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DocumentPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DocumentPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DocumentPreview.wrn
component DocumentPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable document upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DocumentUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DocumentUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DocumentUpload.wrn
component DocumentUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable domain input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DomainInput label="Domain" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DomainInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Domain" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DomainInput.wrn
component DomainInput {
+ props {
+ label = "Domain"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable donut chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DonutChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="DonutChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DonutChart.wrn
component DonutChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable download action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DownloadAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="DownloadAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DownloadAction.wrn
component DownloadAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable download button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DownloadButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="DownloadButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DownloadButton.wrn
component DownloadButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--default {class}">{label}<slot /></button> }
+}
+Reusable download gate form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DownloadGateForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DownloadGateForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DownloadGateForm.wrn
component DownloadGateForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable download policy button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DownloadPolicyButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="DownloadPolicyButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DownloadPolicyButton.wrn
component DownloadPolicyButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable download resource form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DownloadResourceForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DownloadResourceForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DownloadResourceForm.wrn
component DownloadResourceForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable drawer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Drawer title="Panel" open="false" side="right" />Legacy mount name: data-component="Drawer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Panel" |
open | boolean | Optional | false |
side | string | Optional | "right" |
defaultclickInstalled source: components/Drawer.wrn
component Drawer {
+ props {
+ class = ""
+ title = "Panel"
+ open = false
+ side = "right"
+ }
+ state visible = open
+ view {
+ <div data-show="visible" class="fixed inset-0 z-50 {class}" role="dialog" aria-modal="true"><button class="absolute inset-0 bg-slate-950/50" aria-label="Close" @click="visible = false"></button><aside class="absolute inset-y-0 w-[min(92vw,28rem)] overflow-auto bg-white p-6 shadow-2xl transition dark:bg-slate-900 {side === 'left' ? 'left-0' : 'right-0'}"><header class="flex items-center justify-between"><h2 class="text-xl font-bold">{title}</h2><button @click="visible = false" class="size-10 rounded-xl hover:bg-slate-100">×</button></header><div class="mt-6"><slot /></div></aside></div>
+ }
+}
+Reusable dropdown menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DropdownMenu label="Menu" />Legacy mount name: data-component="DropdownMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Menu" |
defaultclickInstalled source: components/DropdownMenu.wrn
component DropdownMenu {
+ props {
+ class = ""
+ label = "Menu"
+ }
+ state open = false
+ view {
+ <div class="relative inline-block {class}"><button type="button" aria-haspopup="menu" aria-expanded="{open}" @click="open = !open" class="inline-flex min-h-11 items-center gap-2 rounded-xl border border-slate-300 px-4 text-sm font-semibold dark:border-slate-700">{label}<span aria-hidden="true">⌄</span></button><div data-show="open" role="menu" class="absolute right-0 z-30 mt-2 min-w-48 rounded-xl border border-slate-200 bg-white p-1.5 shadow-xl dark:border-slate-800 dark:bg-slate-900"><slot /></div></div>
+ }
+}
+Reusable dropdown navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DropdownNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="DropdownNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DropdownNavigation.wrn
component DropdownNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable duration input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DurationInput label="Duration" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DurationInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Duration" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DurationInput.wrn
component DurationInput {
+ props {
+ label = "Duration"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable duration picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DurationPicker label="Duration" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="DurationPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Duration" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DurationPicker.wrn
component DurationPicker {
+ props {
+ label = "Duration"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable duration slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<DurationSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="DurationSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/DurationSlider.wrn
component DurationSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable elevated card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ElevatedCard title="title" description="description" href="href" />Legacy mount name: data-component="ElevatedCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ElevatedCard.wrn
component ElevatedCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--elevated {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable email body editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EmailBodyEditor label="EmailBody" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="EmailBodyEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "EmailBody" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EmailBodyEditor.wrn
component EmailBodyEditor {
+ props {
+ label = "EmailBody"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable email composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EmailComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="EmailComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EmailComposer.wrn
component EmailComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable email input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EmailInput id="id" name="name" label="Email" value="value" placeholder="placeholder" />Legacy mount name: data-component="EmailInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Email" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/EmailInput.wrn
component EmailInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Email"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="email" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable emoji picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EmojiPicker label="Emoji" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="EmojiPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Emoji" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EmojiPicker.wrn
component EmojiPicker {
+ props {
+ label = "Emoji"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable empty state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EmptyState eyebrow="eyebrow" title="Nothing found" description="description" iconClass="icon-[lucide--inbox]" primaryLabel="primaryLabel" />Legacy mount name: data-component="EmptyState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Nothing found" |
description | string | Optional | "" |
iconClass | string | Optional | "icon-[lucide--inbox]" |
primaryLabel | string | Optional | "" |
primaryHref | string | Optional | "" |
secondaryLabel | string | Optional | "" |
secondaryHref | string | Optional | "" |
compact | boolean | Optional | false |
centered | boolean | Optional | true |
suggestions | string | Optional | [] |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/EmptyState.wrn
component EmptyState {
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = "Nothing found"
+ description = ""
+
+ iconClass = "icon-[lucide--inbox]"
+
+ primaryLabel = ""
+ primaryHref = ""
+
+ secondaryLabel = ""
+ secondaryHref = ""
+
+ compact = false
+ centered = true
+
+ suggestions = []
+ }
+
+ view {
+ <section
+ aria-labelledby="empty-state-title"
+ class="w-full {class}"
+ class:py-6="compact"
+ class:sm:py-8="compact"
+ class:py-8="!compact"
+ class:sm:py-10="!compact"
+ >
+ <div
+ class=" relative mx-auto w-full overflow-hidden rounded-3xl border border-indigo-200/80 bg-linear-to-br from-indigo-50/90 via-white to-violet-50/80 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 dark:shadow-black/20 "
+ class:max-w-3xl="centered"
+ >
+ <!-- Background decoration -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -right-20 -top-24 h-56 w-56 rounded-full bg-indigo-200/30 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -bottom-24 -left-20 h-56 w-56 rounded-full bg-violet-200/20 blur-3xl dark:bg-violet-500/5"></div>
+
+ <div class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-indigo-300/70 to-transparent dark:via-indigo-500/20"></div>
+ </div>
+
+ <div
+ class="relative"
+ class:px-6="compact"
+ class:py-8="compact"
+ class:sm:px-8="compact"
+ class:sm:py-9="compact"
+ class:px-6="!compact"
+ class:py-10="!compact"
+ class:sm:px-10="!compact"
+ class:sm:py-12="!compact"
+ class:lg:px-12="!compact"
+ class:text-center="centered"
+ >
+ <div
+ class=" {compact ? 'max-w-xl' : 'max-w-2xl'} {centered ? 'mx-auto' : 'mr-auto'} "
+ class:max-w-xl="compact"
+ class:max-w-2xl="!compact"
+ >
+ <!-- Icon -->
+ <div
+ class="flex"
+ class:justify-center="centered"
+ >
+ <span
+ class="grid place-items-center rounded-2xl bg-indigo-50 text-indigo-600 ring-1 ring-inset ring-indigo-200 dark:bg-indigo-500/10 dark:text-indigo-300 dark:ring-indigo-500/20"
+ class:h-12="compact"
+ class:w-12="compact"
+ class:h-14="!compact"
+ class:w-14="!compact"
+ >
+ <span class="{iconClass}" class:h-5="compact" class:w-5="compact" class:h-6="!compact" class:w-6="!compact" aria-hidden="true" ></span>
+ </span>
+ </div>
+
+ <!-- Eyebrow -->
+ <p
+ class="mt-5 text-xs font-bold uppercase tracking-[0.18em] text-indigo-600 dark:text-indigo-400"
+ class:hidden="eyebrow === ''"
+ >
+ {eyebrow}
+ </p>
+
+ <!-- Title -->
+ <h2
+ id="empty-state-title"
+ class="font-bold tracking-tight text-slate-950 dark:text-white"
+ class:mt-5="eyebrow === ''"
+ class:mt-3="eyebrow !== ''"
+ class:text-xl="compact"
+ class:leading-tight="compact"
+ class:sm:text-2xl="compact"
+ class:text-2xl="!compact"
+ class:leading-tight="!compact"
+ class:sm:text-3xl="!compact"
+ class:lg:text-[2rem]="!compact"
+ >
+ {title}
+ </h2>
+
+ <!-- Description -->
+ <p
+ class="mx-auto mt-3 max-w-xl text-sm leading-6 text-slate-600 dark:text-slate-400"
+ class:hidden="description === ''"
+ class:sm:text-base="!compact"
+ class:sm:leading-7="!compact"
+ >
+ {description}
+ </p>
+
+ <!-- Suggestions -->
+ <div
+ class="mt-6 flex flex-wrap gap-2"
+ class:hidden="suggestions.length === 0"
+ class:justify-center="centered"
+ >
+ {#each suggestions.slice(0, 4) as suggestion}
+ <a
+ href="{suggestion.href}"
+ class="inline-flex items-center gap-2 rounded-full border border-slate-200 bg-white px-3 py-2 text-xs font-semibold text-slate-600 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-indigo-50 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/10 dark:hover:text-indigo-300"
+ >
+ <span class="{suggestion.iconClass} h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ {suggestion.label}
+ </a>
+ {/each}
+ </div>
+
+ <!-- Actions -->
+ <div
+ class="flex flex-col gap-3 sm:flex-row"
+ class:mt-7="suggestions.length === 0"
+ class:mt-6="suggestions.length > 0"
+ class:hidden="primaryLabel === '' && secondaryLabel === ''"
+ class:justify-center="centered"
+ >
+ <a
+ href="{secondaryHref}"
+ class="h-11 items-center justify-center rounded-xl border border-slate-200 bg-white px-4 text-sm font-semibold text-slate-700 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-slate-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ class:hidden="secondaryLabel === ''"
+ class:inline-flex="secondaryLabel !== ''"
+ >
+ {secondaryLabel}
+ </a>
+
+ <a
+ href="{primaryHref}"
+ class="group h-11 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ class:hidden="primaryLabel === ''"
+ class:inline-flex="primaryLabel !== ''"
+ >
+ {primaryLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable encryption diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EncryptionDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="EncryptionDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EncryptionDiagram.wrn
component EncryptionDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable enterprise c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EnterpriseCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="EnterpriseCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EnterpriseCTA.wrn
component EnterpriseCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable enterprise hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EnterpriseHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="EnterpriseHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EnterpriseHero.wrn
component EnterpriseHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable enterprise pricing card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EnterprisePricingCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="EnterprisePricingCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EnterprisePricingCard.wrn
component EnterprisePricingCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable environment selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EnvironmentSelector label="Environment" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="EnvironmentSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Environment" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EnvironmentSelector.wrn
component EnvironmentSelector {
+ props {
+ label = "Environment"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable environment switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EnvironmentSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="EnvironmentSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EnvironmentSwitcher.wrn
component EnvironmentSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable error actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ErrorActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorActions.wrn
component ErrorActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable error card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorCard title="title" description="description" href="href" />Legacy mount name: data-component="ErrorCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorCard.wrn
component ErrorCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--error {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable error code component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorCode eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ErrorCode".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorCode.wrn
component ErrorCode {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable error hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ErrorHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorHero.wrn
component ErrorHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable error illustration component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorIllustration eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ErrorIllustration".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorIllustration.wrn
component ErrorIllustration {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable error page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ErrorPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorPageShell.wrn
component ErrorPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable error page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorPage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ErrorPage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorPage.wrn
component ErrorPage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable error state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorState type="error" eyebrow="eyebrow" title="Something went wrong" description="description" errorCode="errorCode" />Legacy mount name: data-component="ErrorState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
type | string | Optional | "error" |
eyebrow | string | Optional | "" |
title | string | Optional | "Something went wrong" |
description | string | Optional | "" |
errorCode | string | Optional | "" |
iconClass | string | Optional | "" |
primaryLabel | string | Optional | "" |
primaryHref | string | Optional | "" |
secondaryLabel | string | Optional | "" |
secondaryHref | string | Optional | "" |
retryLabel | string | Optional | "" |
retryAction | string | Optional | "" |
centered | boolean | Optional | true |
compact | boolean | Optional | false |
details | string | Optional | [] |
This component does not declare a slot.
clickInstalled source: components/ErrorState.wrn
component ErrorState {
+ props {
+ class: string = ""
+ type = "error"
+
+ eyebrow = ""
+ title = "Something went wrong"
+ description = ""
+
+ errorCode = ""
+
+ iconClass = ""
+
+ primaryLabel = ""
+ primaryHref = ""
+
+ secondaryLabel = ""
+ secondaryHref = ""
+
+ retryLabel = ""
+ retryAction = ""
+
+ centered = true
+ compact = false
+
+ details = []
+ }
+
+ view {
+ <section
+ aria-labelledby="error-state-title"
+ role="{type === 'error' ? 'alert' : 'status'}"
+ class="w-full {class}"
+ class:py-6="compact"
+ class:sm:py-8="compact"
+ class:py-8="!compact"
+ class:sm:py-10="!compact"
+ >
+ <div
+ class=" relative w-full overflow-hidden rounded-3xl border shadow-xl {type === 'warning' ? 'border-amber-200/80 bg-linear-to-br from-amber-50 via-white to-orange-50 shadow-amber-950/5 dark:border-amber-500/20 dark:from-amber-500/10 dark:via-slate-900 dark:to-orange-500/10' : type === 'forbidden' ? 'border-violet-200/80 bg-linear-to-br from-violet-50 via-white to-indigo-50 shadow-violet-950/5 dark:border-violet-500/20 dark:from-violet-500/10 dark:via-slate-900 dark:to-indigo-500/10' : type === 'offline' ? 'border-slate-200 bg-linear-to-br from-slate-100 via-white to-indigo-50 shadow-slate-950/5 dark:border-white/10 dark:from-white/5 dark:via-slate-900 dark:to-indigo-500/10' : 'border-rose-200/80 bg-linear-to-br from-rose-50 via-white to-orange-50 shadow-rose-950/5 dark:border-rose-500/20 dark:from-rose-500/10 dark:via-slate-900 dark:to-orange-500/10' } "
+ class:mx-auto="centered"
+ class:max-w-3xl="centered"
+ >
+ <!-- Decorative background -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class=" absolute -right-20 -top-24 h-64 w-64 rounded-full blur-3xl {type === 'warning' ? 'bg-amber-300/25 dark:bg-amber-500/10' : type === 'forbidden' ? 'bg-violet-300/25 dark:bg-violet-500/10' : type === 'offline' ? 'bg-slate-300/25 dark:bg-slate-500/10' : 'bg-rose-300/25 dark:bg-rose-500/10' } " ></div>
+
+ <div class=" absolute -bottom-28 -left-20 h-64 w-64 rounded-full blur-3xl {type === 'warning' ? 'bg-orange-300/20 dark:bg-orange-500/10' : type === 'forbidden' ? 'bg-indigo-300/20 dark:bg-indigo-500/10' : type === 'offline' ? 'bg-indigo-300/15 dark:bg-indigo-500/5' : 'bg-orange-300/20 dark:bg-orange-500/10' } " ></div>
+
+ <div class=" absolute left-1/2 top-0 h-px w-2/3 -translate-x-1/2 bg-linear-to-r from-transparent to-transparent {type === 'warning' ? 'via-amber-400/60 dark:via-amber-400/20' : type === 'forbidden' ? 'via-violet-400/60 dark:via-violet-400/20' : type === 'offline' ? 'via-slate-400/50 dark:via-slate-400/20' : 'via-rose-400/60 dark:via-rose-400/20' } " ></div>
+ </div>
+
+ <div
+ class="relative"
+ class:px-6="compact"
+ class:py-8="compact"
+ class:sm:px-8="compact"
+ class:sm:py-9="compact"
+ class:px-6="!compact"
+ class:py-10="!compact"
+ class:sm:px-10="!compact"
+ class:sm:py-12="!compact"
+ class:lg:px-12="!compact"
+ class:text-center="centered"
+ class:text-left="!centered"
+ >
+ <div class="{compact ? 'max-w-xl' : 'max-w-2xl'} {centered ? 'mx-auto' : 'mr-auto'}" >
+ <!-- Icon -->
+ <div
+ class="flex"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <div class="relative">
+ <div aria-hidden="true" class=" absolute inset-1 rounded-2xl blur-xl {type === 'warning' ? 'bg-amber-500/25' : type === 'forbidden' ? 'bg-violet-500/25' : type === 'offline' ? 'bg-slate-500/20' : 'bg-rose-500/25' } " ></div>
+
+ <span
+ class=" relative grid place-items-center rounded-2xl border bg-white/90 shadow-lg backdrop-blur-sm {compact ? 'h-12 w-12' : 'h-14 w-14'} {type === 'warning' ? 'border-amber-200 text-amber-700 shadow-amber-950/10 dark:border-amber-500/20 dark:bg-amber-500/10 dark:text-amber-300' : type === 'forbidden' ? 'border-violet-200 text-violet-700 shadow-violet-950/10 dark:border-violet-500/20 dark:bg-violet-500/10 dark:text-violet-300' : type === 'offline' ? 'border-slate-200 text-slate-700 shadow-slate-950/10 dark:border-white/10 dark:bg-white/5 dark:text-slate-300' : 'border-rose-200 text-rose-700 shadow-rose-950/10 dark:border-rose-500/20 dark:bg-rose-500/10 dark:text-rose-300' } "
+ >
+ <span class=" {compact ? 'h-5 w-5' : 'h-6 w-6'} {iconClass !== '' ? iconClass : type === 'warning' ? 'icon-[lucide--triangle-alert]' : type === 'forbidden' ? 'icon-[lucide--shield-alert]' : type === 'offline' ? 'icon-[lucide--wifi-off]' : 'icon-[lucide--circle-x]' } " aria-hidden="true" ></span>
+ </span>
+ </div>
+ </div>
+
+ <!-- Error code -->
+ <div
+ class="mt-5 flex"
+ class:hidden="errorCode === ''"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <span
+ class=" rounded-full px-3 py-1 text-xs font-bold tracking-[0.14em] {type === 'warning' ? 'bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300' : type === 'forbidden' ? 'bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-300' : type === 'offline' ? 'bg-slate-200 text-slate-700 dark:bg-white/10 dark:text-slate-300' : 'bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-300' } "
+ >
+ {errorCode}
+ </span>
+ </div>
+
+ <!-- Eyebrow -->
+ <p
+ class=" text-xs font-bold uppercase tracking-[0.18em] {errorCode !== '' ? 'mt-4' : 'mt-5'} {type === 'warning' ? 'text-amber-700 dark:text-amber-400' : type === 'forbidden' ? 'text-violet-700 dark:text-violet-400' : type === 'offline' ? 'text-slate-600 dark:text-slate-400' : 'text-rose-700 dark:text-rose-400' } "
+ class:hidden="eyebrow === ''"
+ >
+ {eyebrow}
+ </p>
+
+ <!-- Title -->
+ <h2
+ id="error-state-title"
+ class=" font-bold leading-tight tracking-tight text-slate-950 dark:text-white {eyebrow !== '' || errorCode !== '' ? 'mt-3' : 'mt-5'} {compact ? 'text-xl sm:text-2xl' : 'text-2xl sm:text-3xl lg:text-[2rem]'} "
+ >
+ {title}
+ </h2>
+
+ <!-- Description -->
+ <p
+ class=" mt-3 max-w-xl text-sm leading-6 text-slate-600 dark:text-slate-400 {!compact ? 'sm:text-base sm:leading-7' : ''} {centered ? 'mx-auto' : 'mr-auto'} "
+ class:hidden="description === ''"
+ >
+ {description}
+ </p>
+
+ <!-- Details -->
+ <div
+ class="mt-6 flex flex-wrap gap-x-5 gap-y-3"
+ class:hidden="details.length === 0"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ {#each details.slice(0, 4) as detail}
+ <div class="inline-flex items-center gap-2 text-sm font-medium text-slate-600 dark:text-slate-300">
+ <span
+ class=" grid h-6 w-6 shrink-0 place-items-center rounded-full {type === 'warning' ? 'bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300' : type === 'forbidden' ? 'bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-300' : type === 'offline' ? 'bg-slate-200 text-slate-700 dark:bg-white/10 dark:text-slate-300' : 'bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-300' } "
+ >
+ <span class="{detail.iconClass} h-3.5 w-3.5" aria-hidden="true" ></span>
+ </span>
+
+ {detail.label}
+ </div>
+ {/each}
+ </div>
+
+ <!-- Actions -->
+ <div
+ class="mt-7 flex flex-col gap-3 sm:flex-row"
+ class:hidden="primaryLabel === '' && secondaryLabel === '' && retryLabel === ''"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <!-- Secondary -->
+ <a
+ href="{secondaryHref}"
+ class="h-11 items-center justify-center rounded-xl border border-slate-200 bg-white/90 px-4 text-sm font-semibold text-slate-700 shadow-sm backdrop-blur-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-white hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ class:hidden="secondaryLabel === ''"
+ class:inline-flex="secondaryLabel !== ''"
+ >
+ {secondaryLabel}
+ </a>
+
+ <!-- Retry -->
+ <button
+ type="button"
+ @click="{retryAction}"
+ class=" group h-11 items-center justify-center gap-2 rounded-xl px-4 text-sm font-bold text-white shadow-lg transition hover:-translate-y-0.5 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 {type === 'warning' ? 'bg-amber-600 shadow-amber-600/20 hover:bg-amber-500 focus-visible:ring-amber-500' : type === 'forbidden' ? 'bg-violet-600 shadow-violet-600/20 hover:bg-violet-500 focus-visible:ring-violet-500' : type === 'offline' ? 'bg-slate-800 shadow-slate-900/20 hover:bg-slate-700 focus-visible:ring-slate-500 dark:bg-slate-200 dark:text-slate-950 dark:hover:bg-white' : 'bg-rose-600 shadow-rose-600/20 hover:bg-rose-500 focus-visible:ring-rose-500' } "
+ class:hidden="retryLabel === ''"
+ class:inline-flex="retryLabel !== ''"
+ >
+ <span class="icon-[lucide--rotate-cw] h-4 w-4 transition-transform group-hover:rotate-45" aria-hidden="true" ></span>
+
+ {retryLabel}
+ </button>
+
+ <!-- Primary link -->
+ <a
+ href="{primaryHref}"
+ class=" group h-11 items-center justify-center gap-2 rounded-xl px-4 text-sm font-bold text-white shadow-lg transition hover:-translate-y-0.5 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 {type === 'warning' ? 'bg-amber-600 shadow-amber-600/20 hover:bg-amber-500 focus-visible:ring-amber-500' : type === 'forbidden' ? 'bg-violet-600 shadow-violet-600/20 hover:bg-violet-500 focus-visible:ring-violet-500' : type === 'offline' ? 'bg-slate-800 shadow-slate-900/20 hover:bg-slate-700 focus-visible:ring-slate-500 dark:bg-slate-200 dark:text-slate-950 dark:hover:bg-white' : 'bg-rose-600 shadow-rose-600/20 hover:bg-rose-500 focus-visible:ring-rose-500' } "
+ class:hidden="primaryLabel === ''"
+ class:inline-flex="primaryLabel !== ''"
+ >
+ {primaryLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable error support link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ErrorSupportLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ErrorSupportLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ErrorSupportLink.wrn
component ErrorSupportLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable estimated cost summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EstimatedCostSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="EstimatedCostSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EstimatedCostSummary.wrn
component EstimatedCostSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable event table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EventTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="EventTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EventTable.wrn
component EventTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable expandable text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ExpandableText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ExpandableText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ExpandableText.wrn
component ExpandableText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable expiry date time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ExpiryDateTimePicker label="ExpiryDateTime" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ExpiryDateTimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ExpiryDateTime" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ExpiryDateTimePicker.wrn
component ExpiryDateTimePicker {
+ props {
+ label = "ExpiryDateTime"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable export progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ExportProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ExportProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ExportProgress.wrn
component ExportProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable external link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ExternalLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ExternalLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ExternalLink.wrn
component ExternalLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable eyebrow text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<EyebrowText text="text" align="start" />Legacy mount name: data-component="EyebrowText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/EyebrowText.wrn
component EyebrowText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--small wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable factor card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FactorCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FactorCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FactorCard.wrn
component FactorCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable fallback route builder component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FallbackRouteBuilder eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FallbackRouteBuilder".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FallbackRouteBuilder.wrn
component FallbackRouteBuilder {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable fallback route diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FallbackRouteDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="FallbackRouteDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FallbackRouteDiagram.wrn
component FallbackRouteDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable faq component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FAQ eyebrow="eyebrow" title="Frequently asked questions" description="description" items="[]" centered="true" />Legacy mount name: data-component="FAQ".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Frequently asked questions" |
description | string | Optional | "" |
items | string | Optional | [] |
centered | boolean | Optional | true |
allowMultiple | boolean | Optional | false |
defaultOpenIndex | number | Optional | 0 |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/FAQ.wrn
component FAQ {
+ props {
+ class = ""
+ eyebrow = ""
+ title = "Frequently asked questions"
+ description = ""
+ items = []
+ centered = true
+ allowMultiple = false
+ defaultOpenIndex = 0
+ }
+ view { <FAQAccordion class="{class}" eyebrow="{eyebrow}" title="{title}" description="{description}" items="{items}" centered="{centered}" allowMultiple="{allowMultiple}" defaultOpenIndex="{defaultOpenIndex}" /> }
+}
+Reusable faqaccordion component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FAQAccordion eyebrow="eyebrow" title="Frequently asked questions" description="description" items="[]" centered="true" />Legacy mount name: data-component="FAQAccordion".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Frequently asked questions" |
description | string | Optional | "" |
items | string | Optional | [] |
centered | boolean | Optional | true |
compact | boolean | Optional | false |
allowMultiple | boolean | Optional | false |
defaultOpenIndex | number | Optional | 0 |
showContact | boolean | Optional | false |
contactText | string | Optional | "Still have questions?" |
contactLabel | string | Optional | "Contact support" |
contactHref | string | Optional | "/support" |
This component does not declare a slot.
clickInstalled source: components/FAQAccordion.wrn
component FAQAccordion {
+ props {
+ class = ""
+ eyebrow = ""
+ title = "Frequently asked questions"
+ description = ""
+
+ items = []
+
+ centered = true
+ compact = false
+
+ allowMultiple = false
+ defaultOpenIndex = 0
+
+ showContact = false
+ contactText = "Still have questions?"
+ contactLabel = "Contact support"
+ contactHref = "/support"
+ }
+
+ state openIndexes = defaultOpenIndex >= 0 ? [defaultOpenIndex] : []
+
+ functions {
+ function isOpen(index) {
+ return openIndexes.includes(index)
+ }
+
+ function toggleItem(index) {
+ if (isOpen(index)) {
+ openIndexes = openIndexes.filter(
+ (itemIndex) => itemIndex !== index
+ )
+ } else if (allowMultiple) {
+ openIndexes = [...openIndexes, index]
+ } else {
+ openIndexes = [index]
+ }
+ }
+ }
+
+ view {
+ <section
+ aria-labelledby="faq-accordion-title"
+ class="w-full px-5 sm:px-8 lg:px-10 xl:px-12 {class}"
+ class:py-10="compact"
+ class:sm:py-12="compact"
+ class:py-14="!compact"
+ class:sm:py-16="!compact"
+ class:lg:py-20="!compact"
+ class:hidden="items.length === 0"
+ >
+ <div
+ class="mx-auto w-full"
+ class:max-w-5xl="centered"
+ class:max-w-7xl="!centered"
+ >
+ <div
+ class="gap-10"
+ class:flex="centered"
+ class:flex-col="centered"
+ class:grid="!centered"
+ class:lg:grid-cols-[minmax(260px,0.7fr)_minmax(0,1.3fr)]="!centered"
+ class:lg:items-start="!centered"
+ class:lg:gap-14="!centered"
+ >
+ <!-- Heading -->
+ <div
+ class="min-w-0"
+ class:mx-auto="centered"
+ class:max-w-3xl="centered"
+ class:text-center="centered"
+ class:max-w-xl="!centered"
+ class:lg:sticky="!centered"
+ class:lg:top-24="!centered"
+ >
+ <!-- Eyebrow -->
+ <p
+ class="text-xs font-bold uppercase tracking-[0.18em] text-indigo-600 dark:text-indigo-400"
+ class:hidden="eyebrow === ''"
+ >
+ {eyebrow}
+ </p>
+
+ <!-- Title -->
+ <h2
+ id="faq-accordion-title"
+ class="font-bold leading-tight tracking-tight text-slate-950 dark:text-white"
+ class:mt-3="eyebrow !== ''"
+ class:text-2xl="compact"
+ class:sm:text-3xl="compact"
+ class:text-3xl="!compact"
+ class:sm:text-4xl="!compact"
+ >
+ {title}
+ </h2>
+
+ <!-- Description -->
+ <p
+ class="mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400"
+ class:hidden="description === ''"
+ class:sm:text-base="!compact"
+ class:mx-auto="centered"
+ class:max-w-2xl="centered"
+ class:max-w-xl="!centered"
+ >
+ {description}
+ </p>
+
+ <!-- Contact card -->
+ <div
+ class="mt-7 rounded-2xl border border-indigo-200/80 bg-linear-to-br from-indigo-50 via-white to-violet-50 p-5 shadow-sm dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-white/[0.03] dark:to-violet-500/10"
+ class:hidden="!showContact"
+ >
+ <div
+ class="flex items-center gap-4"
+ class:justify-center="centered"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-white text-indigo-600 shadow-sm ring-1 ring-inset ring-indigo-200 dark:bg-white/5 dark:text-indigo-300 dark:ring-indigo-500/20"
+ >
+ <span class="icon-[lucide--messages-square] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div
+ class="min-w-0"
+ class:text-left="centered"
+ >
+ <p class="text-sm font-semibold text-slate-950 dark:text-white">
+ {contactText}
+ </p>
+
+ {#if contactLabel !== '' && contactHref !== ''}
+ <a
+ href="{contactHref}"
+ class="mt-1 inline-flex items-center gap-1.5 text-sm font-bold text-indigo-600 transition-colors duration-200 hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ {contactLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ {/if}
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Accordion -->
+ <div class="min-w-0">
+ <div class="space-y-3">
+ {#each items as item, index}
+ <article
+ class=" overflow-hidden rounded-2xl border transition-[border-color,background-color,box-shadow,transform] duration-300 ease-out {isOpen(index) ? 'border-indigo-200 bg-indigo-50/60 shadow-md shadow-indigo-950/5 dark:border-indigo-500/20 dark:bg-indigo-500/10' : 'border-slate-200 bg-white shadow-sm hover:-translate-y-0.5 hover:border-indigo-200 hover:bg-slate-50 dark:border-white/10 dark:bg-white/[0.03] dark:hover:border-indigo-500/20 dark:hover:bg-white/5' } "
+ >
+ <h3>
+ <button
+ type="button"
+ @click="toggleItem(index)"
+ aria-expanded="{isOpen(index)}"
+ aria-controls="faq-answer-{index}"
+ class="flex w-full items-center justify-between gap-5 text-left focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-indigo-500"
+ class:px-4="compact"
+ class:py-4="compact"
+ class:px-5="!compact"
+ class:py-5="!compact"
+ class:sm:px-6="!compact"
+ >
+ <span class="flex min-w-0 items-start gap-3">
+ <!-- Number -->
+ <span
+ class=" mt-0.5 grid h-7 w-7 shrink-0 place-items-center rounded-lg text-xs font-bold transition-[background-color,color,transform] duration-300 ease-out {isOpen(index) ? 'bg-indigo-600 text-white' : 'bg-slate-100 text-slate-500 dark:bg-white/5 dark:text-slate-400' } "
+ >
+ {index + 1}
+ </span>
+
+ <!-- Question -->
+ <span
+ class="font-semibold leading-6 text-slate-950 dark:text-white"
+ class:text-sm="compact"
+ class:text-base="!compact"
+ >
+ {item.question}
+ </span>
+ </span>
+
+ <!-- Toggle icon -->
+ <span
+ class=" grid h-8 w-8 shrink-0 place-items-center rounded-lg transition-[background-color,color,transform] duration-300 ease-out {isOpen(index) ? 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300' : 'bg-slate-100 text-slate-500 dark:bg-white/5 dark:text-slate-400' } "
+ >
+ <span class=" icon-[lucide--chevron-down] h-4 w-4 transition-transform duration-300 ease-out {isOpen(index) ? 'rotate-180' : 'rotate-0'} " aria-hidden="true" ></span>
+ </span>
+ </button>
+ </h3>
+
+ <div
+ id="faq-answer-{index}"
+ role="region"
+ aria-hidden="{!isOpen(index)}"
+ class=" grid overflow-hidden transition-[grid-template-rows,opacity] duration-300 ease-out {isOpen(index) ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0' } "
+ >
+ <div class="min-h-0 overflow-hidden">
+ <div class="border-t border-indigo-200/60 dark:border-indigo-500/15">
+ <div
+ class=" text-sm leading-7 text-slate-600 transition-[transform,opacity] duration-300 ease-out dark:text-slate-400 {compact ? 'px-4 pb-4 pt-3' : 'px-5 pb-5 pt-4 sm:px-6 sm:pb-6 sm:pt-5' } {isOpen(index) ? 'translate-y-0 opacity-100' : '-translate-y-2 opacity-0' } "
+ >
+ <p class="m-0">
+ {item.answer}
+ </p>
+
+ {#if item.linkLabel !== '' && item.href !== ''}
+ <a
+ href="{item.href}"
+ class=" group inline-flex items-center gap-2 text-sm font-bold text-indigo-600 transition-colors duration-200 hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300 "
+ >
+ {item.linkLabel}
+
+ <span class=" icon-[lucide--arrow-up-right] h-4 w-4 transition-transform duration-200 group-hover:translate-x-0.5 group-hover:-translate-y-0.5 " aria-hidden="true" ></span>
+ </a>
+ {/if}
+ </div>
+ </div>
+ </div>
+ </div>
+ </article>
+ {/each}
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <!-- Tailwind safelist for utilities used by reactive class directives -->
+ <span class=" hidden flex flex-col grid justify-center lg:gap-14 lg:grid-cols-[minmax(260px,0.7fr)_minmax(0,1.3fr)] lg:items-start lg:py-20 lg:sticky lg:top-24 max-w-2xl max-w-3xl max-w-5xl max-w-7xl max-w-xl mt-3 mx-auto px-4 px-5 py-4 py-5 py-10 py-14 sm:px-6 sm:py-12 sm:py-16 sm:text-base sm:text-3xl sm:text-4xl text-base text-center text-left text-sm text-2xl text-3xl grid-rows-[0fr] grid-rows-[1fr] opacity-0 opacity-100 -translate-y-2 translate-y-0 rotate-0 rotate-180 " ></span>
+ </section>
+ }
+}
+Reusable favicon upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FaviconUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FaviconUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FaviconUpload.wrn
component FaviconUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable fax input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FaxInput label="Fax" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FaxInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Fax" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FaxInput.wrn
component FaxInput {
+ props {
+ label = "Fax"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable feature card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureCard icon="✦" title="Feature" description="description" href="href" />Legacy mount name: data-component="FeatureCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
icon | string | Optional | "✦" |
title | string | Optional | "Feature" |
description | string | Optional | "" |
href | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/FeatureCard.wrn
component FeatureCard {
+ props {
+ class = ""
+ icon = "✦"
+ title = "Feature"
+ description = ""
+ href = ""
+ }
+ view {
+ <article class="group rounded-2xl border border-slate-200 bg-white p-6 transition duration-300 hover:-translate-y-1 hover:border-violet-300 hover:shadow-xl dark:border-slate-800 dark:bg-slate-900 {class}"><div class="flex size-11 items-center justify-center rounded-xl bg-violet-100 text-xl text-violet-700 transition group-hover:scale-110 dark:bg-violet-950 dark:text-violet-300">{icon}</div><h3 class="mt-5 text-lg font-bold">{title}</h3><p class="mt-2 leading-7 text-slate-600 dark:text-slate-300">{description}</p><a data-show="href" href="{href}" class="mt-4 inline-flex font-semibold text-violet-600">Learn more →</a></article>
+ }
+}
+Reusable feature checklist component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureChecklist eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FeatureChecklist".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureChecklist.wrn
component FeatureChecklist {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable feature comparison table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureComparisonTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FeatureComparisonTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureComparisonTable.wrn
component FeatureComparisonTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable feature details panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureDetailsPanel eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="FeatureDetailsPanel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureDetailsPanel.wrn
component FeatureDetailsPanel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable feature grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureGrid columns="3" />Legacy mount name: data-component="FeatureGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
columns | number | Optional | 3 |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureGrid.wrn
component FeatureGrid {
+ props {
+ columns = 3
+ className = ""
+ }
+ view {
+ <div class="grid gap-5 {columns === 2 ? 'md:grid-cols-2' : columns === 4 ? 'sm:grid-cols-2 xl:grid-cols-4' : 'md:grid-cols-2 lg:grid-cols-3'} {className}"><slot /></div>
+ }
+}
+Reusable feature icon card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureIconCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FeatureIconCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureIconCard.wrn
component FeatureIconCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable feature list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FeatureList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureList.wrn
component FeatureList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable feature tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FeatureTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureTabs.wrn
component FeatureTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable feature timeline component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureTimeline title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="FeatureTimeline".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureTimeline.wrn
component FeatureTimeline {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable feature unavailable state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeatureUnavailableState label="FeatureUnavailable" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="FeatureUnavailableState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FeatureUnavailable" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeatureUnavailableState.wrn
component FeatureUnavailableState {
+ props {
+ label = "FeatureUnavailable"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable featured blog card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FeaturedBlogCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FeaturedBlogCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FeaturedBlogCard.wrn
component FeaturedBlogCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable field actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FieldActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="FieldActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FieldActions.wrn
component FieldActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable file input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileInput label="File" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FileInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "File" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FileInput.wrn
component FileInput {
+ props {
+ label = "File"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable file list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FileList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FileList.wrn
component FileList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable file size input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileSizeInput label="FileSize" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FileSizeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FileSize" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FileSizeInput.wrn
component FileSizeInput {
+ props {
+ label = "FileSize"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable file size label component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileSizeLabel eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FileSizeLabel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FileSizeLabel.wrn
component FileSizeLabel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable file type badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileTypeBadge label="FileType" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="FileTypeBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FileType" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FileTypeBadge.wrn
component FileTypeBadge {
+ props {
+ label = "FileType"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable file-upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<file-upload store="public" endpoint="/api/upload" accept="accept" multiple="false" max="0" />Legacy mount name: data-component="file-upload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
store | string | Optional | "public" |
endpoint | string | Optional | "/api/upload" |
accept | string | Optional | "" |
multiple | boolean | Optional | false |
max | number | Optional | 0 |
label | string | Optional | "Drag files here or click to browse" |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/file-upload.wrn
// Drag-and-drop file uploader with per-file progress. Progressive enhancement:
+// the markup is inert until /__wrnexus/uploader.js loads (auto-injected when a
+// page contains `data-uploader`). Pairs with `handleUpload` on the server —
+// files POST to `endpoint`, which returns `{ ok, files:[{ key, url, … }] }`.
+//
+// <div data-component="file-upload" store="public" endpoint="/api/upload"
+// accept="image/*" max="10000000" multiple="true"></div>
+component FileUpload {
+ props {
+ store = "public"
+ endpoint = "/api/upload"
+ accept = ""
+ multiple = false
+ max = 0
+ label = "Drag files here or click to browse"
+ class = ""
+ }
+ view {
+ <div class="wire-fileupload {class}" data-uploader="{store}" data-endpoint="{endpoint}" data-accept="{accept}" data-multiple="{multiple}" data-max="{max}" data-label="{label}"></div>
+ }
+}
+Reusable file upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FileUpload id="file" name="file" label="Upload file" accept="accept" multiple="false" />Legacy mount name: data-component="FileUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "file" |
name | string | Optional | "file" |
label | string | Optional | "Upload file" |
accept | string | Optional | "" |
multiple | boolean | Optional | false |
help | string | Optional | "Drag and drop or browse" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/FileUpload.wrn
component FileUpload {
+ props {
+ class = ""
+ id = "file"
+ name = "file"
+ label = "Upload file"
+ accept = ""
+ multiple = false
+ help = "Drag and drop or browse"
+ }
+ view {
+ <label for="{id}" class="flex min-h-40 cursor-pointer flex-col items-center justify-center rounded-2xl border-2 border-dashed border-slate-300 bg-slate-50 p-6 text-center transition hover:border-violet-500 hover:bg-violet-50/50 focus-within:ring-4 focus-within:ring-violet-500/10 dark:border-slate-700 dark:bg-slate-900/50 {class}"><span class="text-3xl" aria-hidden="true">⇧</span><span class="mt-2 font-semibold">{label}</span><span class="mt-1 text-sm text-slate-500">{help}</span><input id="{id}" name="{name}" type="file" accept="{accept}" multiple="{multiple}" class="sr-only" /></label>
+ }
+}
+Reusable filter bar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FilterBar label="Filters" clearLabel="Clear filters" showClear="true" />Legacy mount name: data-component="FilterBar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Filters" |
clearLabel | string | Optional | "Clear filters" |
showClear | boolean | Optional | true |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FilterBar.wrn
component FilterBar {
+ props {
+ label = "Filters"
+ clearLabel = "Clear filters"
+ showClear = true
+ class = ""
+ }
+ view { <section aria-label="{label}" class="wire-filter-bar {class}"><div class="wire-filter-bar__controls"><slot /></div><button data-show="showClear" type="reset" class="wire-btn wire-btn--ghost wire-btn--sm">{clearLabel}</button></section> }
+}
+Reusable filter menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FilterMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="FilterMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FilterMenu.wrn
component FilterMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable filter search input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FilterSearchInput label="FilterSearch" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FilterSearchInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FilterSearch" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FilterSearchInput.wrn
component FilterSearchInput {
+ props {
+ label = "FilterSearch"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable filterable table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FilterableTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FilterableTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FilterableTable.wrn
component FilterableTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable final c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FinalCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="FinalCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FinalCTA.wrn
component FinalCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable first name input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FirstNameInput label="FirstName" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FirstNameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FirstName" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FirstNameInput.wrn
component FirstNameInput {
+ props {
+ label = "FirstName"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable flex component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Flex />Legacy mount name: data-component="Flex".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Flex.wrn
component Flex {
+ props {
+ class = ""
+ }
+ view { <div class="wire-flex {class}"><slot /></div> }
+}
+Reusable font picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FontPicker label="Font" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FontPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Font" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FontPicker.wrn
component FontPicker {
+ props {
+ label = "Font"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable font size picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FontSizePicker label="FontSize" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FontSizePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FontSize" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FontSizePicker.wrn
component FontSizePicker {
+ props {
+ label = "FontSize"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable font weight picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FontWeightPicker label="FontWeight" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FontWeightPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FontWeight" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FontWeightPicker.wrn
component FontWeightPicker {
+ props {
+ label = "FontWeight"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable footer language switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FooterLanguageSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="FooterLanguageSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FooterLanguageSwitcher.wrn
component FooterLanguageSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable footer status indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FooterStatusIndicator label="FooterStatus" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="FooterStatusIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "FooterStatus" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FooterStatusIndicator.wrn
component FooterStatusIndicator {
+ props {
+ label = "FooterStatus"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable forbidden page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ForbiddenPage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ForbiddenPage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ForbiddenPage.wrn
component ForbiddenPage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable forbidden state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ForbiddenState label="Forbidden" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ForbiddenState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Forbidden" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ForbiddenState.wrn
component ForbiddenState {
+ props {
+ label = "Forbidden"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable forgot password form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ForgotPasswordForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ForgotPasswordForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ForgotPasswordForm.wrn
component ForgotPasswordForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable form actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="FormActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormActions.wrn
component FormActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable form alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormAlert label="Form" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="FormAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Form" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormAlert.wrn
component FormAlert {
+ props {
+ label = "Form"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable form dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="FormDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormDialog.wrn
component FormDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable form error summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormErrorSummary title="Please fix the following" visible="true" />Legacy mount name: data-component="FormErrorSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Please fix the following" |
visible | boolean | Optional | true |
defaultThis component does not declare a custom event.
Installed source: components/FormErrorSummary.wrn
component FormErrorSummary {
+ props {
+ class = ""
+ title = "Please fix the following"
+ visible = true
+ }
+ view {
+ <section data-show="visible" role="alert" aria-live="polite" class="rounded-2xl border border-red-200 bg-red-50 p-4 text-red-900 dark:border-red-900/60 dark:bg-red-950/40 dark:text-red-200 {class}"><h3 class="font-semibold">{title}</h3><div class="mt-2 text-sm"><slot /></div></section>
+ }
+}
+Reusable form error component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormError id="id" message="message" />Legacy mount name: data-component="FormError".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "" |
message | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormError.wrn
component FormError {
+ props {
+ id = ""
+ message = ""
+ class = ""
+ }
+ view { <p id="{id}" role="alert" aria-live="polite" class="wire-field-message wire-field-message--error {class}">{message}<slot /></p> }
+}
+Reusable form field component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormField label="Field" help="help" error="error" required="false" />Legacy mount name: data-component="FormField".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Field" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
defaultThis component does not declare a custom event.
Installed source: components/FormField.wrn
component FormField {
+ props {
+ class = ""
+ label = "Field"
+ help = ""
+ error = ""
+ required = false
+ }
+ view {
+ <div class="space-y-2 {class}"><div class="text-sm font-semibold">{label}<span data-show="required" class="ml-1 text-red-500">*</span></div><slot /><p data-show="help && !error" class="text-sm text-slate-500">{help}</p><p data-show="error" role="alert" class="text-sm font-medium text-red-600">{error}</p></div>
+ }
+}
+Reusable form grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FormGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormGrid.wrn
component FormGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable form group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormGroup label="Form" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="FormGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Form" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormGroup.wrn
component FormGroup {
+ props {
+ label = "Form"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable form help text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormHelpText id="id" text="text" />Legacy mount name: data-component="FormHelpText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "" |
text | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormHelpText.wrn
component FormHelpText {
+ props {
+ id = ""
+ text = ""
+ class = ""
+ }
+ view { <p id="{id}" class="wire-field-message wire-field-message--help {class}">{text}<slot /></p> }
+}
+Reusable form label component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormLabel for="for" label="Label" required="false" optional="false" />Legacy mount name: data-component="FormLabel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
for | string | Optional | "" |
label | string | Optional | "Label" |
required | boolean | Optional | false |
optional | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/FormLabel.wrn
component FormLabel {
+ props {
+ for = ""
+ label = "Label"
+ required = false
+ optional = false
+ class = ""
+ }
+ view {
+ <label for="{for}" class="wire-label {class}">{label}<span data-show="required" class="wire-required" aria-hidden="true"> *</span><span data-show="optional && !required" class="wire-optional"> (optional)</span></label>
+ }
+}
+Reusable form progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="FormProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormProgress.wrn
component FormProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable form row component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormRow title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="FormRow".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormRow.wrn
component FormRow {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable form section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FormSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="FormSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FormSection.wrn
component FormSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Form action="action" method="post" name="name" loading="false" />Legacy mount name: data-component="Form".
| Prop | Type | Requirement | Default |
|---|---|---|---|
action | string | Optional | "" |
method | string | Optional | "post" |
name | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Form.wrn
component Form {
+ props {
+ action = ""
+ method = "post"
+ name = ""
+ loading = false
+ class = ""
+ }
+ view {
+ <form action="{action}" method="{method}" name="{name}" aria-busy="{loading}" class="wire-form {class}"><slot /></form>
+ }
+}
+Reusable full bleed component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FullBleed />Legacy mount name: data-component="FullBleed".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FullBleed.wrn
component FullBleed {
+ props {
+ class = ""
+ }
+ view { <div class="wire-full-bleed {class}"><slot /></div> }
+}
+Reusable fullscreen dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FullscreenDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="FullscreenDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FullscreenDialog.wrn
component FullscreenDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable funnel chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<FunnelChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="FunnelChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/FunnelChart.wrn
component FunnelChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable geo chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GeoChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="GeoChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GeoChart.wrn
component GeoChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable geofence editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GeofenceEditor label="Geofence" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="GeofenceEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Geofence" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GeofenceEditor.wrn
component GeofenceEditor {
+ props {
+ label = "Geofence"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable ghost button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GhostButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="GhostButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GhostButton.wrn
component GhostButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--ghost {class}">{label}<slot /></button> }
+}
+Reusable glass card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GlassCard title="title" description="description" href="href" />Legacy mount name: data-component="GlassCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GlassCard.wrn
component GlassCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--glass {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable global search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GlobalSearch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="GlobalSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GlobalSearch.wrn
component GlobalSearch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable gradient c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GradientCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="GradientCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GradientCTA.wrn
component GradientCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable gradient picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GradientPicker label="Gradient" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="GradientPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Gradient" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GradientPicker.wrn
component GradientPicker {
+ props {
+ label = "Gradient"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable gradient stop editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GradientStopEditor label="GradientStop" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="GradientStopEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "GradientStop" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GradientStopEditor.wrn
component GradientStopEditor {
+ props {
+ label = "GradientStop"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Grid gap="4" />Legacy mount name: data-component="Grid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
gap | string | Optional | "4" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Grid.wrn
component Grid {
+ props {
+ gap = "4"
+ className = ""
+ }
+ view {
+ <div class="grid gap-{gap} {className}"><slot /></div>
+ }
+}
+Reusable guide card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GuideCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="GuideCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GuideCard.wrn
component GuideCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable guide checklist component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GuideChecklist eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="GuideChecklist".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GuideChecklist.wrn
component GuideChecklist {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable guide difficulty badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GuideDifficultyBadge label="GuideDifficulty" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="GuideDifficultyBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "GuideDifficulty" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GuideDifficultyBadge.wrn
component GuideDifficultyBadge {
+ props {
+ label = "GuideDifficulty"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable guide grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GuideGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="GuideGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GuideGrid.wrn
component GuideGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable guide step component.
Components are auto-discovered. Use the component directly in any .wrn view:
<GuideStep eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="GuideStep".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/GuideStep.wrn
component GuideStep {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable header actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeaderActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="HeaderActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeaderActions.wrn
component HeaderActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Header eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="Header".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Header.wrn
component Header {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable health indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HealthIndicator label="Health" variant="default" />Legacy mount name: data-component="HealthIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Health" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HealthIndicator.wrn
component HealthIndicator {
+ props {
+ label = "Health"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--healthindicator {class}">{label}<slot /></span> }
+}
+Reusable hero actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="HeroActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroActions.wrn
component HeroActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable hero code panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroCodePanel eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="HeroCodePanel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroCodePanel.wrn
component HeroCodePanel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable hero gradient text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroGradientText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HeroGradientText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroGradientText.wrn
component HeroGradientText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable hero primary action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroPrimaryAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="HeroPrimaryAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroPrimaryAction.wrn
component HeroPrimaryAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable hero product preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroProductPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HeroProductPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroProductPreview.wrn
component HeroProductPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable hero secondary action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroSecondaryAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="HeroSecondaryAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroSecondaryAction.wrn
component HeroSecondaryAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable hero trust text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HeroTrustText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HeroTrustText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HeroTrustText.wrn
component HeroTrustText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Hero eyebrow="eyebrow" title="Build faster with WRNexusJS" highlight="highlight" description="description" primaryLabel="Get started" />Legacy mount name: data-component="Hero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Build faster with WRNexusJS" |
highlight | string | Optional | "" |
description | string | Optional | "" |
primaryLabel | string | Optional | "Get started" |
primaryHref | string | Optional | "#" |
secondaryLabel | string | Optional | "Learn more" |
secondaryHref | string | Optional | "#" |
align | string | Optional | "center" |
defaultThis component does not declare a custom event.
Installed source: components/Hero.wrn
component Hero {
+ props {
+ class = ""
+ eyebrow = ""
+ title = "Build faster with WRNexusJS"
+ highlight = ""
+ description = ""
+ primaryLabel = "Get started"
+ primaryHref = "#"
+ secondaryLabel = "Learn more"
+ secondaryHref = "#"
+ align = "center"
+ }
+ view {
+ <section class="relative isolate overflow-hidden {class}"><div class="absolute inset-0 -z-10 bg-[radial-gradient(circle_at_top,rgba(124,58,237,.18),transparent_45%)]"></div><div class="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"><div class="max-w-4xl {align === 'center' ? 'mx-auto text-center' : ''}"><Badge data-show="eyebrow" label="{eyebrow}" variant="brand" /><h1 class="mt-6 text-4xl font-black tracking-tight text-slate-950 sm:text-6xl dark:text-white">{title} <span data-show="highlight" class="bg-gradient-to-r from-violet-600 to-fuchsia-500 bg-clip-text text-transparent">{highlight}</span></h1><p data-show="description" class="mt-6 text-lg leading-8 text-slate-600 sm:text-xl dark:text-slate-300">{description}</p><div class="mt-8 flex flex-wrap gap-3 {align === 'center' ? 'justify-center' : ''}"><a href="{primaryHref}" class="inline-flex min-h-12 items-center rounded-xl bg-violet-600 px-5 font-semibold text-white shadow-lg shadow-violet-600/20 transition hover:-translate-y-0.5 hover:bg-violet-700">{primaryLabel}</a><a data-show="secondaryLabel" href="{secondaryHref}" class="inline-flex min-h-12 items-center rounded-xl border border-slate-300 bg-white px-5 font-semibold text-slate-900 transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-900 dark:text-white">{secondaryLabel}</a></div><div class="mt-10"><slot /></div></div></div></section>
+ }
+}
+Reusable hex color input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HexColorInput label="HexColor" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HexColorInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "HexColor" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HexColorInput.wrn
component HexColorInput {
+ props {
+ label = "HexColor"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable hidden field component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HiddenField label="Hidden" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HiddenField".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Hidden" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HiddenField.wrn
component HiddenField {
+ props {
+ label = "Hidden"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable highlight text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HighlightText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HighlightText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HighlightText.wrn
component HighlightText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable holiday calendar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HolidayCalendar eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HolidayCalendar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HolidayCalendar.wrn
component HolidayCalendar {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable hostname input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HostnameInput label="Hostname" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HostnameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Hostname" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HostnameInput.wrn
component HostnameInput {
+ props {
+ label = "Hostname"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable hour picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HourPicker label="Hour" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HourPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Hour" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HourPicker.wrn
component HourPicker {
+ props {
+ label = "Hour"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable hsl color input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HslColorInput label="HslColor" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HslColorInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "HslColor" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HslColorInput.wrn
component HslColorInput {
+ props {
+ label = "HslColor"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable hstack component.
Components are auto-discovered. Use the component directly in any .wrn view:
<hstack gap="4" align="center" />Legacy mount name: data-component="hstack".
| Prop | Type | Requirement | Default |
|---|---|---|---|
gap | string | Optional | "4" |
align | string | Optional | "center" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/hstack.wrn
// Horizontal stack: row layout with a gap and cross-axis alignment.
+// align: start | center | end | stretch
+component HStack {
+ props {
+ gap = "4"
+ align = "center"
+ class = ""
+ }
+ view {
+ <div class="wire-hstack wire-gap-{gap} wire-items-{align} {class}"><slot></slot></div>
+ }
+}
+Reusable html editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HtmlEditor label="Html" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="HtmlEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Html" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HtmlEditor.wrn
component HtmlEditor {
+ props {
+ label = "Html"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable human approval step component.
Components are auto-discovered. Use the component directly in any .wrn view:
<HumanApprovalStep eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="HumanApprovalStep".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/HumanApprovalStep.wrn
component HumanApprovalStep {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable icon button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IconButton label="Action" icon="•" variant="ghost" disabled="false" />Legacy mount name: data-component="IconButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Action" |
icon | string | Optional | "•" |
variant | string | Optional | "ghost" |
disabled | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/IconButton.wrn
component IconButton {
+ props {
+ class = ""
+ label = "Action"
+ icon = "•"
+ variant = "ghost"
+ disabled = false
+ }
+ view { <button type="button" aria-label="{label}" title="{label}" disabled="{disabled}" class="inline-flex size-11 items-center justify-center rounded-xl transition duration-200 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 disabled:opacity-50 {variant === 'primary' ? 'bg-violet-600 text-white hover:bg-violet-700' : 'text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800'} {class}"><span aria-hidden="true">{icon}</span></button> }
+}
+Reusable icon picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IconPicker label="Icon" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IconPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Icon" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IconPicker.wrn
component IconPicker {
+ props {
+ label = "Icon"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable icon selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IconSelector label="Icon" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IconSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Icon" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IconSelector.wrn
component IconSelector {
+ props {
+ label = "Icon"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable icon component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Icon eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Icon".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Icon.wrn
component Icon {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable identifier input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IdentifierInput label="Identifier" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IdentifierInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Identifier" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IdentifierInput.wrn
component IdentifierInput {
+ props {
+ label = "Identifier"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable illustration component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Illustration eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Illustration".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Illustration.wrn
component Illustration {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable image compression preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImageCompressionPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ImageCompressionPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImageCompressionPreview.wrn
component ImageCompressionPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable image editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImageEditor label="Image" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ImageEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Image" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImageEditor.wrn
component ImageEditor {
+ props {
+ label = "Image"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable image preview dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImagePreviewDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="ImagePreviewDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImagePreviewDialog.wrn
component ImagePreviewDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable image selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImageSelector label="Image" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ImageSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Image" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImageSelector.wrn
component ImageSelector {
+ props {
+ label = "Image"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable image upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImageUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ImageUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImageUpload.wrn
component ImageUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable import progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ImportProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ImportProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ImportProgress.wrn
component ImportProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable incident alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentAlert label="Incident" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="IncidentAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Incident" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentAlert.wrn
component IncidentAlert {
+ props {
+ label = "Incident"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable incident banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentBanner label="Incident" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="IncidentBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Incident" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentBanner.wrn
component IncidentBanner {
+ props {
+ label = "Incident"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable incident card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="IncidentCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentCard.wrn
component IncidentCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable incident list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="IncidentList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentList.wrn
component IncidentList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable incident response flow component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentResponseFlow title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="IncidentResponseFlow".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentResponseFlow.wrn
component IncidentResponseFlow {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable incident severity badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentSeverityBadge label="IncidentSeverity" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="IncidentSeverityBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "IncidentSeverity" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentSeverityBadge.wrn
component IncidentSeverityBadge {
+ props {
+ label = "IncidentSeverity"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable incident timeline component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IncidentTimeline title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="IncidentTimeline".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IncidentTimeline.wrn
component IncidentTimeline {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable industry badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IndustryBadge label="Industry" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="IndustryBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Industry" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IndustryBadge.wrn
component IndustryBadge {
+ props {
+ label = "Industry"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable industry selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IndustrySelector label="Industry" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IndustrySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Industry" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IndustrySelector.wrn
component IndustrySelector {
+ props {
+ label = "Industry"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable info card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InfoCard title="title" description="description" href="href" />Legacy mount name: data-component="InfoCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InfoCard.wrn
component InfoCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--info {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable inline alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InlineAlert label="Inline" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="InlineAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Inline" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InlineAlert.wrn
component InlineAlert {
+ props {
+ label = "Inline"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable inline code component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InlineCode text="text" align="start" />Legacy mount name: data-component="InlineCode".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InlineCode.wrn
component InlineCode {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--small wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable inline component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Inline gap="4" />Legacy mount name: data-component="Inline".
| Prop | Type | Requirement | Default |
|---|---|---|---|
gap | string | Optional | "4" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Inline.wrn
component Inline {
+ props {
+ gap = "4"
+ className = ""
+ }
+ view {
+ <div class="flex flex-wrap items-center gap-{gap} {className}"><slot /></div>
+ }
+}
+Reusable input group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InputGroup label="Input" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="InputGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Input" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InputGroup.wrn
component InputGroup {
+ props {
+ label = "Input"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<input type="text" name="name" value="value" placeholder="placeholder" />Legacy mount name: data-component="input".
| Prop | Type | Requirement | Default |
|---|---|---|---|
type | string | Optional | "text" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/input.wrn
// Text input. Pairs with the validation system (name maps to a field).
+component Input {
+ props {
+ type = "text"
+ name = ""
+ value = ""
+ placeholder = ""
+ class = ""
+ }
+ view {
+ <input type="{type}" name="{name}" value="{value}" placeholder="{placeholder}" class="wire-input {class}">
+ }
+}
+Reusable inset panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InsetPanel />Legacy mount name: data-component="InsetPanel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InsetPanel.wrn
component InsetPanel {
+ props {
+ class = ""
+ }
+ view { <div class="wire-inset-panel {class}"><slot /></div> }
+}
+Reusable integer input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IntegerInput label="Integer" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IntegerInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Integer" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IntegerInput.wrn
component IntegerInput {
+ props {
+ label = "Integer"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable integration card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IntegrationCard title="title" description="description" href="href" />Legacy mount name: data-component="IntegrationCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IntegrationCard.wrn
component IntegrationCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--integration {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable invoice line item component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InvoiceLineItem eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="InvoiceLineItem".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InvoiceLineItem.wrn
component InvoiceLineItem {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable invoice summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<InvoiceSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="InvoiceSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/InvoiceSummary.wrn
component InvoiceSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable ip address input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<IpAddressInput label="IpAddress" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="IpAddressInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "IpAddress" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/IpAddressInput.wrn
component IpAddressInput {
+ props {
+ label = "IpAddress"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable job card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<JobCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="JobCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/JobCard.wrn
component JobCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable job progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<JobProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="JobProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/JobProgress.wrn
component JobProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable job title input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<JobTitleInput label="JobTitle" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="JobTitleInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "JobTitle" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/JobTitleInput.wrn
component JobTitleInput {
+ props {
+ label = "JobTitle"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable json input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<JsonInput label="Json" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="JsonInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Json" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/JsonInput.wrn
component JsonInput {
+ props {
+ label = "Json"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable json viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<JsonViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="JsonViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/JsonViewer.wrn
component JsonViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable key value table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<KeyValueTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="KeyValueTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/KeyValueTable.wrn
component KeyValueTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable kyc document upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<KycDocumentUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="KycDocumentUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/KycDocumentUpload.wrn
component KycDocumentUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable language selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LanguageSelector label="Language" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LanguageSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Language" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LanguageSelector.wrn
component LanguageSelector {
+ props {
+ label = "Language"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable language switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LanguageSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="LanguageSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LanguageSwitcher.wrn
component LanguageSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable last name input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LastNameInput label="LastName" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LastNameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LastName" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LastNameInput.wrn
component LastNameInput {
+ props {
+ label = "LastName"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable latency metric component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LatencyMetric title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="LatencyMetric".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LatencyMetric.wrn
component LatencyMetric {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable latitude input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LatitudeInput label="Latitude" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LatitudeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Latitude" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LatitudeInput.wrn
component LatitudeInput {
+ props {
+ label = "Latitude"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable lead text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LeadText text="text" align="start" />Legacy mount name: data-component="LeadText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LeadText.wrn
component LeadText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--lead wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable leadership grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LeadershipGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="LeadershipGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LeadershipGrid.wrn
component LeadershipGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable legal acceptance notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalAcceptanceNotice label="LegalAcceptance" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="LegalAcceptanceNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LegalAcceptance" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalAcceptanceNotice.wrn
component LegalAcceptanceNotice {
+ props {
+ label = "LegalAcceptance"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable legal bullet list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalBulletList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="LegalBulletList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalBulletList.wrn
component LegalBulletList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable legal contact block component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalContactBlock eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="LegalContactBlock".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalContactBlock.wrn
component LegalContactBlock {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable legal definition list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalDefinitionList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="LegalDefinitionList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalDefinitionList.wrn
component LegalDefinitionList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable legal document header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalDocumentHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="LegalDocumentHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalDocumentHeader.wrn
component LegalDocumentHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable legal document layout component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalDocumentLayout title="Legal document" effectiveDate="effectiveDate" updatedDate="updatedDate" />Legacy mount name: data-component="LegalDocumentLayout".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Legal document" |
effectiveDate | string | Optional | "" |
updatedDate | string | Optional | "" |
tocdefaultThis component does not declare a custom event.
Installed source: components/LegalDocumentLayout.wrn
component LegalDocumentLayout {
+ props {
+ class = ""
+ title = "Legal document"
+ effectiveDate = ""
+ updatedDate = ""
+ }
+ view {
+ <article class="grid max-w-7xl gap-10 lg:grid-cols-[16rem_minmax(0,1fr)] {class}"><aside class="lg:sticky lg:top-24 lg:self-start"><div class="text-sm font-semibold">On this page</div><nav class="mt-4 text-sm text-slate-500"><slot name="toc" /></nav></aside><main class="min-w-0 max-w-3xl"><header class="border-b border-slate-200 pb-8 dark:border-slate-800"><h1 class="text-4xl font-black tracking-tight">{title}</h1><div class="mt-4 flex flex-wrap gap-4 text-sm text-slate-500"><span data-show="effectiveDate">Effective: {effectiveDate}</span><span data-show="updatedDate">Updated: {updatedDate}</span></div></header><div class="prose prose-slate mt-8 max-w-none dark:prose-invert"><slot /></div></main></article>
+ }
+}
+Reusable legal hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="LegalHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalHero.wrn
component LegalHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable legal language selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalLanguageSelector label="LegalLanguage" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LegalLanguageSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LegalLanguage" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalLanguageSelector.wrn
component LegalLanguageSelector {
+ props {
+ label = "LegalLanguage"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable legal notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalNotice label="Legal" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="LegalNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Legal" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalNotice.wrn
component LegalNotice {
+ props {
+ label = "Legal"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable legal page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalPageShell />Legacy mount name: data-component="LegalPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
navigationdefaultThis component does not declare a custom event.
Installed source: components/LegalPageShell.wrn
component LegalPageShell {
+ props {
+ class = ""
+ }
+ view { <div class="wire-page-shell wire-page-shell--legal {class}"><aside class="wire-page-shell__aside"><slot name="navigation" /></aside><main class="wire-page-shell__main"><slot /></main></div> }
+}
+Reusable legal print button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalPrintButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="LegalPrintButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalPrintButton.wrn
component LegalPrintButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable legal region selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalRegionSelector label="LegalRegion" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LegalRegionSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LegalRegion" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalRegionSelector.wrn
component LegalRegionSelector {
+ props {
+ label = "LegalRegion"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable legal section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="LegalSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalSection.wrn
component LegalSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable legal summary component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalSummary eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="LegalSummary".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalSummary.wrn
component LegalSummary {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable legal table of contents component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalTableOfContents title="On this page" items="[]" />Legacy mount name: data-component="LegalTableOfContents".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "On this page" |
items | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/LegalTableOfContents.wrn
component LegalTableOfContents {
+ props {
+ title = "On this page"
+ items = []
+ class = ""
+ }
+ view { <nav aria-label="{title}" class="wire-legal-toc {class}"><h2>{title}</h2><ol>{#each items as item}<li><a href="{item.href}">{item.label}</a></li>{/each}</ol></nav> }
+}
+Reusable legal table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="LegalTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalTable.wrn
component LegalTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable legal version badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LegalVersionBadge label="LegalVersion" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="LegalVersionBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LegalVersion" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LegalVersionBadge.wrn
component LegalVersionBadge {
+ props {
+ label = "LegalVersion"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable letter spacing picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LetterSpacingPicker label="LetterSpacing" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LetterSpacingPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LetterSpacing" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LetterSpacingPicker.wrn
component LetterSpacingPicker {
+ props {
+ label = "LetterSpacing"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable license key input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LicenseKeyInput label="LicenseKey" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LicenseKeyInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LicenseKey" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LicenseKeyInput.wrn
component LicenseKeyInput {
+ props {
+ label = "LicenseKey"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable lightbox component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Lightbox title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="Lightbox".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Lightbox.wrn
component Lightbox {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable line chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LineChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="LineChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LineChart.wrn
component LineChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable line height picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LineHeightPicker label="LineHeight" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LineHeightPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "LineHeight" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LineHeightPicker.wrn
component LineHeightPicker {
+ props {
+ label = "LineHeight"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable link button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LinkButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="LinkButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LinkButton.wrn
component LinkButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--ghost {class}">{label}<slot /></button> }
+}
+Reusable link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Link href="#" label="Link" external="false" />Legacy mount name: data-component="Link".
| Prop | Type | Requirement | Default |
|---|---|---|---|
href | string | Optional | "#" |
label | string | Optional | "Link" |
external | boolean | Optional | false |
className | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Link.wrn
component Link {
+ props {
+ href = "#"
+ label = "Link"
+ external = false
+ className = ""
+ }
+ view {
+ <a href="{href}" target="{external ? '_blank' : ''}" rel="{external ? 'noreferrer' : ''}" class="font-medium text-violet-600 underline-offset-4 transition hover:text-violet-700 hover:underline focus-visible:rounded focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 {className}">{label}<span data-show="external" aria-hidden="true"> ↗</span></a>
+ }
+}
+Reusable list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<List title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="List".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/List.wrn
component List {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable loading button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LoadingButton label="Continue" loadingLabel="Loading…" loading="false" disabled="false" type="button" />Legacy mount name: data-component="LoadingButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Continue" |
loadingLabel | string | Optional | "Loading…" |
loading | boolean | Optional | false |
disabled | boolean | Optional | false |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/LoadingButton.wrn
component LoadingButton {
+ props {
+ label = "Continue"
+ loadingLabel = "Loading…"
+ loading = false
+ disabled = false
+ type = "button"
+ variant = "primary"
+ class = ""
+ }
+ view {
+ <button type="{type}" disabled="{disabled || loading}" aria-disabled="{disabled || loading}" aria-busy="{loading}" class="wire-btn wire-btn--{variant} wire-loading-button {class}"><span data-show="loading" class="wire-spinner wire-spinner--inline" aria-hidden="true"></span><span>{loading ? loadingLabel : label}</span></button>
+ }
+}
+Reusable locale selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LocaleSelector label="Locale" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LocaleSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Locale" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LocaleSelector.wrn
component LocaleSelector {
+ props {
+ label = "Locale"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable localized route link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LocalizedRouteLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="LocalizedRouteLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LocalizedRouteLink.wrn
component LocalizedRouteLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable location picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LocationPicker label="Location" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LocationPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Location" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LocationPicker.wrn
component LocationPicker {
+ props {
+ label = "Location"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable log table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LogTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="LogTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LogTable.wrn
component LogTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable logo cloud component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LogoCloud eyebrow="eyebrow" title="Trusted by teams building modern products" description="description" logos="[]" centered="true" />Legacy mount name: data-component="LogoCloud".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Trusted by teams building modern products" |
description | string | Optional | "" |
logos | string | Optional | [] |
centered | boolean | Optional | true |
compact | boolean | Optional | false |
variant | string | Optional | "strip" |
grayscale | boolean | Optional | true |
showNames | boolean | Optional | false |
maxItems | number | Optional | 8 |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/LogoCloud.wrn
component LogoCloud {
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = "Trusted by teams building modern products"
+ description = ""
+
+ logos = []
+
+ centered = true
+ compact = false
+
+ variant = "strip"
+ grayscale = true
+ showNames = false
+ maxItems = 8
+ }
+
+ view {
+ <section
+ aria-labelledby="logo-cloud-title"
+ class="w-full px-5 sm:px-8 lg:px-10 xl:px-12 {class}"
+ class:py-10="compact"
+ class:sm:py-12="compact"
+ class:py-14="!compact"
+ class:sm:py-16="!compact"
+ class:lg:py-20="!compact"
+ class:hidden="logos.length === 0"
+ >
+ <div
+ class=" relative mx-auto w-full max-w-7xl overflow-hidden {variant === 'card' ? 'rounded-3xl border border-indigo-200/80 bg-linear-to-br from-indigo-50/80 via-white to-violet-50/70 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 dark:shadow-black/20' : '' } "
+ >
+ <!-- Decorative background -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ class:hidden="variant !== 'card'"
+ >
+ <div class="absolute -right-24 -top-28 h-64 w-64 rounded-full bg-indigo-300/20 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -bottom-28 -left-24 h-64 w-64 rounded-full bg-violet-300/15 blur-3xl dark:bg-violet-500/5"></div>
+
+ <div class="absolute left-1/2 top-0 h-px w-2/3 -translate-x-1/2 bg-linear-to-r from-transparent via-indigo-400/60 to-transparent dark:via-indigo-400/20"></div>
+ </div>
+
+ <div
+ class="relative"
+ class:px-6="compact"
+ class:py-8="compact"
+ class:sm:px-8="compact"
+ class:sm:py-10="compact"
+ class:px-7="!compact"
+ class:py-10="!compact"
+ class:sm:px-10="!compact"
+ class:sm:py-12="!compact"
+ class:lg:px-12="!compact"
+ class:lg:py-14="!compact"
+ >
+ <!-- Heading -->
+ <div
+ class="max-w-3xl"
+ class:mx-auto="centered"
+ class:text-center="centered"
+ >
+ <p
+ class="text-xs font-bold uppercase tracking-[0.18em] text-indigo-600 dark:text-indigo-400"
+ class:hidden="eyebrow === ''"
+ >
+ {eyebrow}
+ </p>
+
+ <h2
+ id="logo-cloud-title"
+ class=" font-bold leading-tight tracking-tight text-slate-950 dark:text-white {eyebrow !== '' ? 'mt-3' : ''} {compact ? 'text-2xl sm:text-3xl' : 'text-3xl sm:text-4xl' } "
+ >
+ {title}
+ </h2>
+
+ <p
+ class=" mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400 {centered ? 'mx-auto max-w-2xl' : 'max-w-2xl'} {!compact ? 'sm:text-base' : ''} "
+ class:hidden="description === ''"
+ >
+ {description}
+ </p>
+ </div>
+
+ <!-- Dynamic logo list -->
+ <div
+ class=" mt-8 flex flex-wrap justify-center {variant === 'cards' ? 'gap-4 sm:mt-10' : 'items-center gap-x-10 gap-y-7 sm:mt-10 lg:gap-x-14' } "
+ >
+ {#each logos.slice(0, maxItems) as logo}
+ <a
+ href="{logo.href}"
+ target="{logo.external ? '_blank' : '_self'}"
+ rel="{logo.external ? 'noopener noreferrer' : ''}"
+ aria-label="{logo.name}"
+ class=" group min-w-0 transition duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 {variant === 'cards' ? 'flex w-full items-center gap-4 rounded-2xl border border-slate-200/80 bg-white/80 p-4 shadow-sm backdrop-blur-sm hover:-translate-y-1 hover:border-indigo-300 hover:bg-white hover:shadow-lg dark:border-white/10 dark:bg-white/5 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 sm:w-[calc(50%-0.5rem)] lg:w-[calc(25%-0.75rem)]' : 'flex h-12 items-center justify-center px-2 opacity-70 hover:opacity-100' } "
+ >
+ <!-- Logo mark -->
+ <div
+ class=" flex shrink-0 items-center justify-center {variant === 'cards' ? 'h-12 w-12 rounded-xl bg-slate-50 ring-1 ring-inset ring-slate-200 dark:bg-white/5 dark:ring-white/10' : '' } "
+ >
+ <img
+ src="{logo.src}"
+ alt="{logo.alt !== '' ? logo.alt : logo.name}"
+ loading="lazy"
+ class=" block object-contain transition duration-200 {variant === 'cards' ? 'max-h-7 max-w-9' : 'max-h-8 max-w-36' } {grayscale ? 'grayscale group-hover:grayscale-0' : '' } "
+ />
+
+ <!-- Fallback mark -->
+ <span
+ class=" hidden h-8 w-8 items-center justify-center rounded-lg bg-indigo-50 text-sm font-bold text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300 "
+ >
+ {logo.name.slice(0, 1)}
+ </span>
+ </div>
+
+ <!-- Partner text -->
+ <div
+ class="min-w-0"
+ class:hidden="variant !== 'cards' && !showNames"
+ >
+ <p class="truncate text-sm font-semibold text-slate-800 dark:text-slate-200">
+ {logo.name}
+ </p>
+
+ <p
+ class="mt-0.5 truncate text-xs text-slate-500 dark:text-slate-400"
+ class:hidden="logo.description === ''"
+ >
+ {logo.description}
+ </p>
+ </div>
+ </a>
+ {/each}
+ </div>
+
+ <!-- Optional count -->
+ <p
+ class="mt-6 text-sm text-slate-500 dark:text-slate-400"
+ class:hidden="logos.length <= maxItems"
+ class:text-center="centered"
+ >
+ And {logos.length - maxItems} more teams using WRNexusJS.
+ </p>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable logo upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LogoUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="LogoUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LogoUpload.wrn
component LogoUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable logo component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Logo eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Logo".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Logo.wrn
component Logo {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable logout dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LogoutDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="LogoutDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LogoutDialog.wrn
component LogoutDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable longitude input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<LongitudeInput label="Longitude" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="LongitudeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Longitude" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/LongitudeInput.wrn
component LongitudeInput {
+ props {
+ label = "Longitude"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable maintenance alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenanceAlert label="Maintenance" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="MaintenanceAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Maintenance" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenanceAlert.wrn
component MaintenanceAlert {
+ props {
+ label = "Maintenance"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable maintenance banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenanceBanner label="Maintenance" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="MaintenanceBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Maintenance" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenanceBanner.wrn
component MaintenanceBanner {
+ props {
+ label = "Maintenance"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable maintenance card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenanceCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MaintenanceCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenanceCard.wrn
component MaintenanceCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable maintenance page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenancePage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MaintenancePage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenancePage.wrn
component MaintenancePage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable maintenance state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenanceState label="Maintenance" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="MaintenanceState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Maintenance" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenanceState.wrn
component MaintenanceState {
+ props {
+ label = "Maintenance"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable maintenance window picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaintenanceWindowPicker label="MaintenanceWindow" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MaintenanceWindowPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MaintenanceWindow" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaintenanceWindowPicker.wrn
component MaintenanceWindowPicker {
+ props {
+ label = "MaintenanceWindow"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable map picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MapPicker label="Map" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MapPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Map" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MapPicker.wrn
component MapPicker {
+ props {
+ label = "Map"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable markdown editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MarkdownEditor label="Markdown" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MarkdownEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Markdown" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MarkdownEditor.wrn
component MarkdownEditor {
+ props {
+ label = "Markdown"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable marketing page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MarketingPageShell />Legacy mount name: data-component="MarketingPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MarketingPageShell.wrn
component MarketingPageShell {
+ props {
+ class = ""
+ }
+ view { <div class="wire-page-shell wire-page-shell--marketing {class}"><slot /></div> }
+}
+Reusable marketing section header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MarketingSectionHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="MarketingSectionHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MarketingSectionHeader.wrn
component MarketingSectionHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable masked secret field component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MaskedSecretField label="MaskedSecret" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MaskedSecretField".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MaskedSecret" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MaskedSecretField.wrn
component MaskedSecretField {
+ props {
+ label = "MaskedSecret"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MegaMenu label="Explore" sections="[]" />Legacy mount name: data-component="MegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Explore" |
sections | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/MegaMenu.wrn
component MegaMenu {
+ props {
+ label = "Explore"
+ sections = []
+ class = ""
+ }
+ state open = false
+ view {
+ <div class="wire-mega-menu {class}"><button type="button" class="wire-mega-menu__trigger" aria-expanded="{open}" @click="open = !open">{label}<span aria-hidden="true">⌄</span></button><div data-show="open" class="wire-mega-menu__panel">{#each sections as section}<section><h3>{section.title}</h3><ul>{#each section.items as item}<li><a href="{item.href}">{item.label}</a></li>{/each}</ul></section>{/each}</div></div>
+ }
+}
+Reusable member list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MemberList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="MemberList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MemberList.wrn
component MemberList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable mention input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MentionInput label="Mention" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MentionInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Mention" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MentionInput.wrn
component MentionInput {
+ props {
+ label = "Mention"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable message character counter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessageCharacterCounter label="MessageCharacter" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="MessageCharacterCounter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MessageCharacter" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessageCharacterCounter.wrn
component MessageCharacterCounter {
+ props {
+ label = "MessageCharacter"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable message composer preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessageComposerPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MessageComposerPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessageComposerPreview.wrn
component MessageComposerPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable message composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessageComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MessageComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessageComposer.wrn
component MessageComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable message limit input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessageLimitInput label="MessageLimit" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MessageLimitInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MessageLimit" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessageLimitInput.wrn
component MessageLimitInput {
+ props {
+ label = "MessageLimit"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable message preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessagePreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MessagePreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessagePreview.wrn
component MessagePreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable message volume slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MessageVolumeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MessageVolumeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MessageVolumeSlider.wrn
component MessageVolumeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable metric card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MetricCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MetricCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MetricCard.wrn
component MetricCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable metric grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MetricGrid label="Key metrics" metrics="[]" />Legacy mount name: data-component="MetricGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Key metrics" |
metrics | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/MetricGrid.wrn
component MetricGrid {
+ props {
+ label = "Key metrics"
+ metrics = []
+ class = ""
+ }
+ view { <section aria-label="{label}" class="wire-metric-grid {class}">{#each metrics as metric}<article class="wire-metric"><p class="wire-metric__value">{metric.value}</p><p class="wire-metric__label">{metric.label}</p><p data-show="metric.description" class="wire-metric__description">{metric.description}</p></article>{/each}</section> }
+}
+Reusable metric text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MetricText text="text" align="start" />Legacy mount name: data-component="MetricText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MetricText.wrn
component MetricText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--display wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable metric component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Metric title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="Metric".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Metric.wrn
component Metric {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable minute picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MinutePicker label="Minute" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MinutePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Minute" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MinutePicker.wrn
component MinutePicker {
+ props {
+ label = "Minute"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable mission section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MissionSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="MissionSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MissionSection.wrn
component MissionSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable mobile device frame component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MobileDeviceFrame eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="MobileDeviceFrame".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MobileDeviceFrame.wrn
component MobileDeviceFrame {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable mobile input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MobileInput label="Mobile" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MobileInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Mobile" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MobileInput.wrn
component MobileInput {
+ props {
+ label = "Mobile"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable mobile menu button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MobileMenuButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="MobileMenuButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MobileMenuButton.wrn
component MobileMenuButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable mobile navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MobileNavigation label="Menu" closeLabel="Close menu" items="[]" />Legacy mount name: data-component="MobileNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Menu" |
closeLabel | string | Optional | "Close menu" |
items | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/MobileNavigation.wrn
component MobileNavigation {
+ props {
+ label = "Menu"
+ closeLabel = "Close menu"
+ items = []
+ class = ""
+ }
+ state open = false
+ view {
+ <div class="wire-mobile-nav {class}"><button type="button" class="wire-btn wire-btn--ghost" aria-expanded="{open}" aria-controls="wire-mobile-navigation" @click="open = !open">{open ? closeLabel : label}</button><nav id="wire-mobile-navigation" data-show="open" aria-label="Mobile navigation" class="wire-mobile-nav__panel"><ul>{#each items as item}<li><a href="{item.href}">{item.label}</a></li>{/each}</ul></nav></div>
+ }
+}
+Reusable mobile table card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MobileTableCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MobileTableCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MobileTableCard.wrn
component MobileTableCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable modal component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Modal title="Dialog" description="description" open="false" size="md" closeLabel="Close" />Legacy mount name: data-component="Modal".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Dialog" |
description | string | Optional | "" |
open | boolean | Optional | false |
size | string | Optional | "md" |
closeLabel | string | Optional | "Close" |
defaultclickInstalled source: components/Modal.wrn
component Modal {
+ props {
+ class = ""
+ title = "Dialog"
+ description = ""
+ open = false
+ size = "md"
+ closeLabel = "Close"
+ }
+ state visible = open
+ view {
+ <div data-show="visible" class="fixed inset-0 z-50 flex items-end justify-center p-4 sm:items-center {class}" role="dialog" aria-modal="true" aria-labelledby="modal-title"><button class="absolute inset-0 bg-slate-950/60 backdrop-blur-sm" aria-label="{closeLabel}" @click="visible = false"></button><section class="relative max-h-[90vh] w-full overflow-auto rounded-3xl border border-slate-200 bg-white p-6 shadow-2xl dark:border-slate-800 dark:bg-slate-900 {size === 'sm' ? 'max-w-md' : size === 'lg' ? 'max-w-4xl' : 'max-w-2xl'}"><header class="flex items-start justify-between gap-4"><div><h2 id="modal-title" class="text-xl font-bold">{title}</h2><p data-show="description" class="mt-1 text-sm text-slate-500">{description}</p></div><button type="button" aria-label="{closeLabel}" @click="visible = false" class="inline-flex size-10 items-center justify-center rounded-xl hover:bg-slate-100 dark:hover:bg-slate-800">×</button></header><div class="mt-5"><slot /></div></section></div>
+ }
+}
+Reusable month picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MonthPicker label="Month" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MonthPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Month" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MonthPicker.wrn
component MonthPicker {
+ props {
+ label = "Month"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable month year picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MonthYearPicker label="MonthYear" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MonthYearPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MonthYear" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MonthYearPicker.wrn
component MonthYearPicker {
+ props {
+ label = "MonthYear"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable monthly volume selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MonthlyVolumeSelector label="MonthlyVolume" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MonthlyVolumeSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MonthlyVolume" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MonthlyVolumeSelector.wrn
component MonthlyVolumeSelector {
+ props {
+ label = "MonthlyVolume"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable multi file upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MultiFileUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="MultiFileUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MultiFileUpload.wrn
component MultiFileUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable multi select component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MultiSelect id="multi-select" name="name" label="Choose options" options="[]" required="false" />Legacy mount name: data-component="MultiSelect".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "multi-select" |
name | string | Optional | "" |
label | string | Optional | "Choose options" |
options | string | Optional | [] |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
size | number | Optional | 5 |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/MultiSelect.wrn
component MultiSelect {
+ props {
+ id = "multi-select"
+ name = ""
+ label = "Choose options"
+ options = []
+ required = false
+ disabled = false
+ size = 5
+ class = ""
+ }
+ view {
+ <div class="wire-field {class}"><label for="{id}" class="wire-label">{label}</label><select id="{id}" name="{name}" multiple required="{required}" disabled="{disabled}" size="{size}" class="wire-input wire-multiselect">{#each options as option}<option value="{option.value}" selected="{option.selected}">{option.label}</option>{/each}</select></div>
+ }
+}
+Reusable multiple email input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MultipleEmailInput label="MultipleEmail" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="MultipleEmailInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "MultipleEmail" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MultipleEmailInput.wrn
component MultipleEmailInput {
+ props {
+ label = "MultipleEmail"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable muted text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<MutedText text="text" align="start" />Legacy mount name: data-component="MutedText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/MutedText.wrn
component MutedText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--small wire-text--{align} wire-muted {class}">{text}<slot /></div> }
+}
+Reusable name input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NameInput label="Name" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="NameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Name" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NameInput.wrn
component NameInput {
+ props {
+ label = "Name"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable narrow container component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NarrowContainer />Legacy mount name: data-component="NarrowContainer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NarrowContainer.wrn
component NarrowContainer {
+ props {
+ class = ""
+ }
+ view { <div class="wire-container wire-container--narrow {class}"><slot /></div> }
+}
+Reusable navigation item component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NavigationItem eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="NavigationItem".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NavigationItem.wrn
component NavigationItem {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable navigation mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NavigationMegaMenu title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="NavigationMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NavigationMegaMenu.wrn
component NavigationMegaMenu {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Navigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="Navigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Navigation.wrn
component Navigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable new badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NewBadge label="New" variant="default" />Legacy mount name: data-component="NewBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "New" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NewBadge.wrn
component NewBadge {
+ props {
+ label = "New"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--newbadge {class}">{label}<slot /></span> }
+}
+Reusable new password input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NewPasswordInput label="NewPassword" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="NewPasswordInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "NewPassword" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NewPasswordInput.wrn
component NewPasswordInput {
+ props {
+ label = "NewPassword"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable newsletter c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NewsletterCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="NewsletterCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NewsletterCTA.wrn
component NewsletterCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable newsletter form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NewsletterForm eyebrow="eyebrow" title="Stay up to date" description="description" placeholder="Enter your email" buttonLabel="Subscribe" />Legacy mount name: data-component="NewsletterForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Stay up to date" |
description | string | Optional | "" |
placeholder | string | Optional | "Enter your email" |
buttonLabel | string | Optional | "Subscribe" |
action | string | Optional | "/newsletter/subscribe" |
method | string | Optional | "post" |
emailName | string | Optional | "email" |
privacyLabel | string | Optional | "" |
privacyHref | string | Optional | "/privacy" |
successMessage | string | Optional | "You are subscribed." |
errorMessage | string | Optional | "Something went wrong. Please try again." |
iconClass | string | Optional | "icon-[lucide--mail]" |
centered | boolean | Optional | false |
compact | boolean | Optional | false |
showIcon | boolean | Optional | true |
showPrivacy | boolean | Optional | true |
fullWidth | boolean | Optional | false |
This component does not declare a slot.
submitinputInstalled source: components/NewsletterForm.wrn
component NewsletterForm {
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = "Stay up to date"
+ description = ""
+
+ placeholder = "Enter your email"
+ buttonLabel = "Subscribe"
+
+ action = "/newsletter/subscribe"
+ method = "post"
+ emailName = "email"
+
+ privacyLabel = ""
+ privacyHref = "/privacy"
+
+ successMessage = "You are subscribed."
+ errorMessage = "Something went wrong. Please try again."
+
+ iconClass = "icon-[lucide--mail]"
+
+ centered = false
+ compact = false
+ showIcon = true
+ showPrivacy = true
+ fullWidth = false
+ }
+
+ state email = ""
+ state status = "idle"
+ state message = ""
+
+ view {
+ <section
+ aria-labelledby="newsletter-form-title"
+ class="w-full px-5 sm:px-8 lg:px-10 xl:px-12 {class}"
+ >
+ <div
+ class=" relative mx-auto w-full overflow-hidden rounded-3xl border border-indigo-200/80 bg-linear-to-br from-indigo-50 via-white to-violet-50 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 dark:shadow-black/20 "
+ class:max-w-7xl="fullWidth"
+ class:max-w-3xl="!fullWidth"
+ >
+ <!-- Background decoration -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -right-20 -top-24 h-64 w-64 rounded-full bg-indigo-300/25 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -bottom-28 -left-20 h-64 w-64 rounded-full bg-violet-300/20 blur-3xl dark:bg-violet-500/10"></div>
+
+ <div class="absolute left-1/2 top-0 h-px w-2/3 -translate-x-1/2 bg-linear-to-r from-transparent via-indigo-400/60 to-transparent dark:via-indigo-400/20"></div>
+ </div>
+
+ <div
+ class="relative"
+ class:p-5="compact"
+ class:sm:p-6="compact"
+ class:p-7="!compact"
+ class:sm:p-9="!compact"
+ class:lg:p-10="!compact"
+ >
+ <div
+ class=" {compact ? 'flex flex-col gap-5 lg:flex-row lg:items-center lg:justify-between lg:gap-10' : centered ? 'mx-auto flex max-w-2xl flex-col items-center gap-7 text-center' : 'grid gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(360px,480px)] lg:items-center lg:gap-12' } "
+ >
+ <!-- Content -->
+ <div
+ class=" min-w-0 {compact ? 'max-w-2xl' : ''} {centered && !compact ? 'w-full max-w-2xl' : ''} "
+ >
+ <div class=" flex gap-4 {centered && !compact ? 'flex-col items-center' : 'items-start' } " >
+ <!-- Icon -->
+ <div
+ class="relative shrink-0"
+ class:hidden="!showIcon"
+ >
+ <div aria-hidden="true" class="absolute inset-1 rounded-2xl bg-indigo-500/25 blur-xl" ></div>
+
+ <span
+ class=" relative grid place-items-center rounded-2xl border border-indigo-200 bg-white/90 text-indigo-600 shadow-lg shadow-indigo-950/10 backdrop-blur-sm dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:shadow-black/20 {compact ? 'h-11 w-11' : 'h-13 w-13'} "
+ >
+ <span class=" {iconClass} {compact ? 'h-5 w-5' : 'h-6 w-6'} " aria-hidden="true" ></span>
+ </span>
+ </div>
+
+ <div class="min-w-0">
+ <!-- Eyebrow -->
+ <p
+ class="text-xs font-bold uppercase tracking-[0.18em] text-indigo-600 dark:text-indigo-400"
+ class:hidden="eyebrow === ''"
+ >
+ {eyebrow}
+ </p>
+
+ <!-- Title -->
+ <h2
+ id="newsletter-form-title"
+ class=" font-bold leading-tight tracking-tight text-slate-950 dark:text-white {eyebrow !== '' ? 'mt-2' : ''} {compact ? 'text-xl sm:text-2xl' : 'text-2xl sm:text-3xl' } "
+ >
+ {title}
+ </h2>
+ </div>
+ </div>
+
+ <!-- Description -->
+ <p
+ class=" mt-4 text-sm leading-6 text-slate-600 dark:text-slate-400 {!compact ? 'sm:text-base sm:leading-7' : ''} {centered && !compact ? 'mx-auto max-w-xl' : 'max-w-2xl' } "
+ class:hidden="description === ''"
+ >
+ {description}
+ </p>
+ </div>
+
+ <!-- Form -->
+ <div class=" w-full {compact ? 'lg:max-w-xl' : ''} {centered && !compact ? 'max-w-2xl' : ''} " >
+ <form
+ action="{action}"
+ method="{method}"
+ class="w-full"
+ @submit=" status = 'loading'; message = ''; "
+ >
+ <label
+ for="newsletter-email"
+ class="sr-only"
+ >
+ Email address
+ </label>
+
+ <div
+ class=" flex w-full flex-col gap-2 rounded-2xl border border-slate-200 bg-white/85 p-2 shadow-sm backdrop-blur-sm dark:border-white/10 dark:bg-white/5 sm:flex-row "
+ >
+ <div class="relative min-w-0 flex-1">
+ <span class="pointer-events-none absolute left-3.5 top-1/2 h-4.5 w-4.5 -translate-y-1/2 text-slate-400 icon-[lucide--mail] dark:text-slate-500" aria-hidden="true" ></span>
+
+ <input
+ id="newsletter-email"
+ type="email"
+ name="{emailName}"
+ value="{email}"
+ placeholder="{placeholder}"
+ autocomplete="email"
+ required
+ @input="email = event.target.value"
+ class=" w-full rounded-xl bg-transparent pl-10 pr-3 text-sm text-slate-950 outline-none placeholder:text-slate-400 focus:bg-white dark:text-white dark:placeholder:text-slate-500 dark:focus:bg-white/5 {compact ? 'h-10' : 'h-11'} "
+ />
+ </div>
+
+ <button
+ type="submit"
+ class=" group inline-flex shrink-0 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 disabled:cursor-wait disabled:opacity-70 dark:focus-visible:ring-offset-slate-900 {compact ? 'h-10' : 'h-11'} "
+ disabled="{status === 'loading'}"
+ >
+ <span class="icon-[lucide--loader-circle] h-4 w-4 animate-spin" aria-hidden="true" class:hidden="status !== 'loading'" ></span>
+
+ <span class:hidden="status === 'loading'">
+ {buttonLabel}
+ </span>
+
+ <span class:hidden="status !== 'loading'">
+ Subscribing
+ </span>
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" class:hidden="status === 'loading'" ></span>
+ </button>
+ </div>
+ </form>
+
+ <p
+ class="mt-3 text-xs leading-5 text-slate-500 dark:text-slate-400"
+ class:hidden="!showPrivacy"
+ class:text-center="centered && !compact"
+ >
+ No spam. Unsubscribe at any time.
+
+ <a
+ href="{privacyHref}"
+ class="font-semibold text-indigo-600 transition hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300"
+ class:hidden="privacyLabel === ''"
+ >
+ {privacyLabel}
+ </a>
+ </p>
+
+ <div
+ role="status"
+ aria-live="polite"
+ class="mt-3 rounded-xl px-3 py-2.5 text-sm font-medium"
+ class:hidden="message === ''"
+ class:bg-emerald-50="status === 'success'"
+ class:text-emerald-700="status === 'success'"
+ class:ring-1="status === 'success'"
+ class:ring-inset="status === 'success'"
+ class:ring-emerald-200="status === 'success'"
+ class:dark:bg-emerald-500/10="status === 'success'"
+ class:dark:text-emerald-300="status === 'success'"
+ class:dark:ring-emerald-500/20="status === 'success'"
+ class:bg-rose-50="status === 'error'"
+ class:text-rose-700="status === 'error'"
+ class:ring-1="status === 'error'"
+ class:ring-inset="status === 'error'"
+ class:ring-rose-200="status === 'error'"
+ class:dark:bg-rose-500/10="status === 'error'"
+ class:dark:text-rose-300="status === 'error'"
+ class:dark:ring-rose-500/20="status === 'error'"
+ >
+ {message}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable no results state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NoResultsState label="NoResults" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="NoResultsState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "NoResults" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NoResultsState.wrn
component NoResultsState {
+ props {
+ label = "NoResults"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable not found page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NotFoundPage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="NotFoundPage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NotFoundPage.wrn
component NotFoundPage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable not found state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NotFoundState label="NotFound" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="NotFoundState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "NotFound" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NotFoundState.wrn
component NotFoundState {
+ props {
+ label = "NotFound"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable notification card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NotificationCard title="title" description="description" href="href" />Legacy mount name: data-component="NotificationCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NotificationCard.wrn
component NotificationCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--notification {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable notification dot component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NotificationDot label="Notification" variant="default" />Legacy mount name: data-component="NotificationDot".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Notification" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NotificationDot.wrn
component NotificationDot {
+ props {
+ label = "Notification"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--notificationdot {class}">{label}<slot /></span> }
+}
+Reusable notification list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NotificationList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="NotificationList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/NotificationList.wrn
component NotificationList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable number input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<NumberInput id="id" name="name" label="Number" value="value" placeholder="placeholder" />Legacy mount name: data-component="NumberInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Number" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/NumberInput.wrn
component NumberInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Number"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="number" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable office card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OfficeCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="OfficeCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OfficeCard.wrn
component OfficeCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable offline page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OfflinePage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="OfflinePage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OfflinePage.wrn
component OfflinePage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable offline state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OfflineState label="Offline" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="OfflineState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Offline" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OfflineState.wrn
component OfflineState {
+ props {
+ label = "Offline"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable onboarding progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OnboardingProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="OnboardingProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OnboardingProgress.wrn
component OnboardingProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable one time secret display component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OneTimeSecretDisplay eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="OneTimeSecretDisplay".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OneTimeSecretDisplay.wrn
component OneTimeSecretDisplay {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable online indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OnlineIndicator label="Online" variant="default" />Legacy mount name: data-component="OnlineIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Online" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OnlineIndicator.wrn
component OnlineIndicator {
+ props {
+ label = "Online"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--onlineindicator {class}">{label}<slot /></span> }
+}
+Reusable opacity slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OpacitySlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="OpacitySlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OpacitySlider.wrn
component OpacitySlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable open a p i c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OpenAPICTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="OpenAPICTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OpenAPICTA.wrn
component OpenAPICTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable optional indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OptionalIndicator label="Optional" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="OptionalIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Optional" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OptionalIndicator.wrn
component OptionalIndicator {
+ props {
+ label = "Optional"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable organization selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OrganizationSelector label="Organization" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="OrganizationSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Organization" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OrganizationSelector.wrn
component OrganizationSelector {
+ props {
+ label = "Organization"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable otp input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OtpInput name="otp" length="6" label="Verification code" />Legacy mount name: data-component="OtpInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
name | string | Optional | "otp" |
length | number | Optional | 6 |
label | string | Optional | "Verification code" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/OtpInput.wrn
component OtpInput {
+ props {
+ class = ""
+ name = "otp"
+ length = 6
+ label = "Verification code"
+ }
+ view {
+ <fieldset class="{class}"><legend class="mb-3 text-sm font-semibold">{label}</legend><input name="{name}" inputmode="numeric" autocomplete="one-time-code" maxlength="{length}" pattern="[0-9]*" class="min-h-14 w-full rounded-2xl border border-slate-300 bg-white px-4 text-center font-mono text-2xl tracking-[0.5em] outline-none transition focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 dark:border-slate-700 dark:bg-slate-950" /></fieldset>
+ }
+}
+Reusable otp verification form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OtpVerificationForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="OtpVerificationForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OtpVerificationForm.wrn
component OtpVerificationForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable outlined card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<OutlinedCard title="title" description="description" href="href" />Legacy mount name: data-component="OutlinedCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/OutlinedCard.wrn
component OutlinedCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--outlined {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable page alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PageAlert label="Page" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="PageAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Page" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PageAlert.wrn
component PageAlert {
+ props {
+ label = "Page"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable page header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PageHeader eyebrow="eyebrow" title="title" description="description" primaryLabel="primaryLabel" primaryHref="primaryHref" />Legacy mount name: data-component="PageHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
primaryLabel | string | Optional | "" |
primaryHref | string | Optional | "" |
secondaryLabel | string | Optional | "" |
secondaryHref | string | Optional | "" |
icon | string | Optional | "sparkles" |
centered | boolean | Optional | false |
compact | boolean | Optional | false |
showBreadcrumbs | boolean | Optional | false |
breadcrumbParent | string | Optional | "" |
breadcrumbParentHref | string | Optional | "" |
breadcrumbCurrent | string | Optional | "" |
highlights | string | Optional | [] |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/PageHeader.wrn
component PageHeader {
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = ""
+ description = ""
+
+ primaryLabel = ""
+ primaryHref = ""
+
+ secondaryLabel = ""
+ secondaryHref = ""
+
+ icon = "sparkles"
+
+ centered = false
+ compact = false
+
+ showBreadcrumbs = false
+ breadcrumbParent = ""
+ breadcrumbParentHref = ""
+ breadcrumbCurrent = ""
+
+ highlights = []
+ }
+
+ view {
+ <section
+ aria-labelledby="public-page-title"
+ class="relative overflow-hidden border-b border-slate-200 bg-white dark:border-white/10 dark:bg-slate-950 {class}"
+ >
+ <!-- Background decoration -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -right-40 -top-48 h-96 w-96 rounded-full bg-indigo-300/20 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div class="absolute -left-40 top-20 h-80 w-80 rounded-full bg-violet-300/15 blur-3xl dark:bg-violet-500/5" ></div>
+
+ <div class="absolute left-1/2 top-0 h-px w-2/3 -translate-x-1/2 bg-linear-to-r from-transparent via-indigo-300/60 to-transparent dark:via-indigo-500/20" ></div>
+ </div>
+
+ <div class="relative w-full px-5 sm:px-8 lg:px-10 xl:px-12">
+
+ <!-- Breadcrumbs -->
+ <div
+ class="border-b border-slate-200/80 py-3 dark:border-white/10"
+ class:hidden="!showBreadcrumbs"
+ >
+ <Breadcrumbs
+ centered="{centered}"
+ compact="{false}"
+ items="{[ ...(breadcrumbParent !== '' ? [{ label: breadcrumbParent, href: breadcrumbParentHref, current: false }] : []), ...(breadcrumbCurrent !== '' ? [{ label: breadcrumbCurrent, href: '', current: true }] : []) ]}"
+ />
+ </div>
+
+ <!-- Header body -->
+ <div
+ class=" {compact ? 'py-9 sm:py-10 lg:py-12' : 'py-12 sm:py-14 lg:py-16' } {centered ? 'mx-auto flex max-w-5xl flex-col items-center text-center' : 'grid gap-8 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-start lg:gap-12' } "
+ >
+ <!-- Content -->
+ <div class=" min-w-0 {centered ? 'w-full max-w-4xl' : 'max-w-4xl'} " >
+ <!-- Eyebrow -->
+ <div
+ class="flex"
+ class:hidden="eyebrow === ''"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-indigo-50 px-3 py-1.5 text-xs font-semibold text-indigo-700 shadow-sm dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300"
+ >
+ <span class="grid h-5 w-5 place-items-center rounded-full bg-indigo-100 dark:bg-indigo-500/15" >
+ <span class="icon-[lucide--{icon}] h-3 w-3" aria-hidden="true" ></span>
+ </span>
+
+ {eyebrow}
+ </span>
+ </div>
+
+ <!-- Title -->
+ <h1
+ id="public-page-title"
+ class=" font-bold tracking-tight text-slate-950 dark:text-white {eyebrow !== '' ? 'mt-6' : ''} {compact ? 'text-3xl leading-tight sm:text-4xl lg:text-5xl' : 'text-4xl leading-[1.08] sm:text-5xl lg:text-[3.25rem]' } "
+ >
+ {title}
+ </h1>
+
+ <!-- Description -->
+ <p
+ class=" mt-5 text-base text-slate-600 dark:text-slate-400 {compact ? 'leading-7' : 'leading-8 sm:text-lg'} {centered ? 'mx-auto max-w-3xl' : 'max-w-2xl'} "
+ class:hidden="description === ''"
+ >
+ {description}
+ </p>
+ </div>
+
+ <!-- Single dynamic action group -->
+ <div
+ class=" flex flex-col gap-3 sm:flex-row {centered ? 'mt-8 justify-center' : 'lg:pt-1' } "
+ class:hidden="primaryLabel === '' && secondaryLabel === ''"
+ >
+ <!-- Secondary action -->
+ <a
+ href="{secondaryHref}"
+ class="h-12 items-center justify-center rounded-xl border border-slate-200 bg-white px-5 text-sm font-semibold text-slate-700 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-slate-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ class:hidden="secondaryLabel === ''"
+ class:inline-flex="secondaryLabel !== ''"
+ >
+ {secondaryLabel}
+ </a>
+
+ <!-- Primary action -->
+ <a
+ href="{primaryHref}"
+ class="group h-12 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950"
+ class:hidden="primaryLabel === ''"
+ class:inline-flex="primaryLabel !== ''"
+ >
+ {primaryLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+
+ <!-- Dynamic highlight strip -->
+ <div
+ class="border-t border-slate-200 py-5 dark:border-white/10"
+ class:hidden="compact || highlights.length === 0"
+ class:block="!compact && highlights.length > 0"
+ >
+ <div class="flex gap-y-5">
+ {#each highlights as highlight}
+ <div
+ class="w-full min-w-0 pr-6"
+ class:w-full="highlights.length === 1"
+ class:sm:w-1/2="highlights.length >= 2"
+ class:lg:w-1/2="highlights.length === 2"
+ class:lg:w-1/3="highlights.length === 3"
+ class:lg:w-1/4="highlights.length >= 4"
+ >
+ <div
+ class="flex min-w-0 items-center gap-3"
+ class:justify-center="centered"
+ >
+ <span class="grid h-10 w-10 shrink-0 place-items-center rounded-xl {highlight.iconBoxClass}" >
+ <span class="{highlight.iconClass} h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0">
+ <p class="text-sm font-semibold text-slate-950 dark:text-white">
+ {highlight.title}
+ </p>
+
+ <p
+ class="mt-0.5 text-xs leading-5 text-slate-500 dark:text-slate-400"
+ class:hidden="highlight.description === ''"
+ >
+ {highlight.description}
+ </p>
+ </div>
+ </div>
+ </div>
+ {/each}
+ </div>
+ </div>
+ </div>
+ </section>
+ }
+}
+Reusable page heading component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PageHeading text="text" align="start" />Legacy mount name: data-component="PageHeading".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PageHeading.wrn
component PageHeading {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--heading wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PageShell />Legacy mount name: data-component="PageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PageShell.wrn
component PageShell {
+ props {
+ className = ""
+ }
+ view {
+ <div class="min-h-screen bg-white text-slate-950 antialiased selection:bg-violet-200 dark:bg-slate-950 dark:text-white dark:selection:bg-violet-800 {className}"><slot /></div>
+ }
+}
+Reusable page skeleton component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PageSkeleton label="Page" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="PageSkeleton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Page" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PageSkeleton.wrn
component PageSkeleton {
+ props {
+ label = "Page"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable pagination component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Pagination currentPage="1" totalPages="1" previousHref="previousHref" nextHref="nextHref" pages="[]" />Legacy mount name: data-component="Pagination".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
currentPage | number | Optional | 1 |
totalPages | number | Optional | 1 |
previousHref | string | Optional | "" |
nextHref | string | Optional | "" |
pages | string | Optional | [] |
showNumbers | boolean | Optional | true |
showSummary | boolean | Optional | true |
totalItems | number | Optional | 0 |
pageSize | number | Optional | 10 |
compact | boolean | Optional | false |
centered | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Pagination.wrn
component Pagination {
+ props {
+ class: string = ""
+ currentPage = 1
+ totalPages = 1
+
+ previousHref = ""
+ nextHref = ""
+
+ pages = []
+
+ showNumbers = true
+ showSummary = true
+
+ totalItems = 0
+ pageSize = 10
+
+ compact = false
+ centered = false
+ }
+
+ view {
+ <nav
+ aria-label="Pagination"
+ class="w-full {class}"
+ class:hidden="totalPages <= 1"
+ >
+ <!-- Result summary -->
+ <div
+ class="mb-4 text-sm text-slate-500 dark:text-slate-400"
+ class:hidden="!showSummary || totalItems <= 0"
+ class:text-center="centered"
+ >
+ Showing
+
+ <span class="font-semibold text-slate-950 dark:text-white">
+ {(currentPage - 1) * pageSize + 1}
+ </span>
+
+ to
+
+ <span class="font-semibold text-slate-950 dark:text-white">
+ {currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize}
+ </span>
+
+ of
+
+ <span class="font-semibold text-slate-950 dark:text-white">
+ {totalItems}
+ </span>
+
+ results
+ </div>
+
+ <div
+ class="flex flex-col gap-4 sm:flex-row sm:items-center"
+ class:sm:justify-center="centered"
+ class:sm:justify-between="!centered"
+ >
+ <!-- Previous -->
+ <a
+ href="{previousHref}"
+ aria-label="Go to previous page"
+ class="group h-11 items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white px-4 text-sm font-semibold text-slate-700 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-slate-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500/30 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ class:hidden="previousHref === ''"
+ class:inline-flex="previousHref !== ''"
+ >
+ <span class="icon-[lucide--arrow-left] h-4 w-4 transition-transform group-hover:-translate-x-0.5" aria-hidden="true" ></span>
+
+ <span class:hidden="compact">
+ Previous
+ </span>
+ </a>
+
+ <span
+ aria-disabled="true"
+ class="h-11 cursor-not-allowed items-center justify-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-4 text-sm font-semibold text-slate-400 dark:border-white/10 dark:bg-white/[0.03] dark:text-slate-600"
+ class:hidden="previousHref !== ''"
+ class:inline-flex="previousHref === ''"
+ >
+ <span class="icon-[lucide--arrow-left] h-4 w-4" aria-hidden="true" ></span>
+
+ <span class:hidden="compact">
+ Previous
+ </span>
+ </span>
+
+ <!-- Numbered pages -->
+ <div
+ class="flex flex-wrap items-center justify-center gap-1.5"
+ class:hidden="!showNumbers"
+ >
+ {#each pages as page}
+ <!-- Ellipsis -->
+ <span
+ class="grid h-10 w-10 place-items-center text-sm font-semibold text-slate-400"
+ class:hidden="!page.ellipsis"
+ >
+ …
+ </span>
+
+ <!-- Page link -->
+ <a
+ href="{page.href}"
+ aria-label="Go to page {page.number}"
+ class="h-10 min-w-10 items-center justify-center rounded-xl px-3 text-sm font-semibold transition focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
+ class:hidden="page.ellipsis || page.current"
+ class:inline-flex="!page.ellipsis && !page.current"
+ class:border="!page.current"
+ class:border-slate-200="!page.current"
+ class:bg-white="!page.current"
+ class:text-slate-600="!page.current"
+ class:hover:border-indigo-300="!page.current"
+ class:hover:bg-indigo-50="!page.current"
+ class:hover:text-indigo-700="!page.current"
+ class:dark:border-white/10="!page.current"
+ class:dark:bg-white/5="!page.current"
+ class:dark:text-slate-300="!page.current"
+ class:dark:hover:border-indigo-500/30="!page.current"
+ class:dark:hover:bg-indigo-500/10="!page.current"
+ class:dark:hover:text-indigo-300="!page.current"
+ >
+ {page.number}
+ </a>
+
+ <!-- Current page -->
+ <span
+ aria-current="page"
+ aria-label="Current page, page {page.number}"
+ class="h-10 min-w-10 items-center justify-center rounded-xl bg-indigo-600 px-3 text-sm font-bold text-white shadow-lg shadow-indigo-600/20"
+ class:hidden="page.ellipsis || !page.current"
+ class:inline-flex="!page.ellipsis && page.current"
+ >
+ {page.number}
+ </span>
+ {/each}
+ </div>
+
+ <!-- Mobile page counter -->
+ <div
+ class="flex items-center justify-center rounded-xl border border-slate-200 bg-slate-50 px-4 py-2.5 text-sm font-medium text-slate-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-400"
+ class:hidden="showNumbers"
+ >
+ Page
+
+ <span class="mx-1 font-bold text-slate-950 dark:text-white">
+ {currentPage}
+ </span>
+
+ of
+
+ <span class="ml-1 font-bold text-slate-950 dark:text-white">
+ {totalPages}
+ </span>
+ </div>
+
+ <!-- Next -->
+ <a
+ href="{nextHref}"
+ aria-label="Go to next page"
+ class="group h-11 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950"
+ class:hidden="nextHref === ''"
+ class:inline-flex="nextHref !== ''"
+ >
+ <span class:hidden="compact">
+ Next
+ </span>
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-0.5" aria-hidden="true" ></span>
+ </a>
+
+ <span
+ aria-disabled="true"
+ class="h-11 cursor-not-allowed items-center justify-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-4 text-sm font-semibold text-slate-400 dark:border-white/10 dark:bg-white/[0.03] dark:text-slate-600"
+ class:hidden="nextHref !== ''"
+ class:inline-flex="nextHref === ''"
+ >
+ <span class:hidden="compact">
+ Next
+ </span>
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+ </div>
+ </nav>
+ }
+}
+Reusable panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Panel />Legacy mount name: data-component="Panel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Panel.wrn
component Panel {
+ props {
+ class = ""
+ }
+ view { <div class="wire-panel {class}"><slot /></div> }
+}
+Reusable partner application form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PartnerApplicationForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PartnerApplicationForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PartnerApplicationForm.wrn
component PartnerApplicationForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable partner logo grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PartnerLogoGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PartnerLogoGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PartnerLogoGrid.wrn
component PartnerLogoGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable partner program card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PartnerProgramCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PartnerProgramCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PartnerProgramCard.wrn
component PartnerProgramCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable passkey button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PasskeyButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="PasskeyButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PasskeyButton.wrn
component PasskeyButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable password input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PasswordInput id="id" name="name" label="Password" value="value" placeholder="placeholder" />Legacy mount name: data-component="PasswordInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Password" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/PasswordInput.wrn
component PasswordInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Password"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="password" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable password requirement list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PasswordRequirementList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PasswordRequirementList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PasswordRequirementList.wrn
component PasswordRequirementList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable password strength meter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PasswordStrengthMeter title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="PasswordStrengthMeter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PasswordStrengthMeter.wrn
component PasswordStrengthMeter {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable password visibility toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PasswordVisibilityToggle label="PasswordVisibility" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PasswordVisibilityToggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PasswordVisibility" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PasswordVisibilityToggle.wrn
component PasswordVisibilityToggle {
+ props {
+ label = "PasswordVisibility"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable path input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PathInput label="Path" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PathInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Path" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PathInput.wrn
component PathInput {
+ props {
+ label = "Path"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable payment method card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PaymentMethodCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PaymentMethodCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PaymentMethodCard.wrn
component PaymentMethodCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable pdf preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PdfPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PdfPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PdfPreview.wrn
component PdfPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable percentage input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PercentageInput label="Percentage" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PercentageInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Percentage" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PercentageInput.wrn
component PercentageInput {
+ props {
+ label = "Percentage"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable permission selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PermissionSelector label="Permission" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PermissionSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Permission" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PermissionSelector.wrn
component PermissionSelector {
+ props {
+ label = "Permission"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable phone input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PhoneInput id="id" name="name" label="Phone" value="value" placeholder="placeholder" />Legacy mount name: data-component="PhoneInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Phone" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/PhoneInput.wrn
component PhoneInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Phone"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="tel" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable pie chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PieChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="PieChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PieChart.wrn
component PieChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable pill component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Pill label="Pill" variant="default" />Legacy mount name: data-component="Pill".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Pill" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Pill.wrn
component Pill {
+ props {
+ label = "Pill"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--pill {class}">{label}<slot /></span> }
+}
+Reusable pin input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PinInput label="Pin" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PinInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Pin" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PinInput.wrn
component PinInput {
+ props {
+ label = "Pin"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable plain text editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlainTextEditor label="PlainText" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PlainTextEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PlainText" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlainTextEditor.wrn
component PlainTextEditor {
+ props {
+ label = "PlainText"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable plan c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlanCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="PlanCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlanCTA.wrn
component PlanCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable plan feature list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlanFeatureList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PlanFeatureList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlanFeatureList.wrn
component PlanFeatureList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable plan limit list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlanLimitList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PlanLimitList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlanLimitList.wrn
component PlanLimitList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable plan selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlanSelector label="Plan" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PlanSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Plan" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlanSelector.wrn
component PlanSelector {
+ props {
+ label = "Plan"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable platform pillar card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PlatformPillarCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PlatformPillarCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PlatformPillarCard.wrn
component PlatformPillarCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable policy version table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PolicyVersionTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PolicyVersionTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PolicyVersionTable.wrn
component PolicyVersionTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable popover component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Popover title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="Popover".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Popover.wrn
component Popover {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable port input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PortInput label="Port" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PortInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Port" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PortInput.wrn
component PortInput {
+ props {
+ label = "Port"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable port number input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PortNumberInput label="PortNumber" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PortNumberInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PortNumber" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PortNumberInput.wrn
component PortNumberInput {
+ props {
+ label = "PortNumber"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable positive number input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PositiveNumberInput label="PositiveNumber" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PositiveNumberInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PositiveNumber" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PositiveNumberInput.wrn
component PositiveNumberInput {
+ props {
+ label = "PositiveNumber"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable postal code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PostalCodeInput label="PostalCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PostalCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PostalCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PostalCodeInput.wrn
component PostalCodeInput {
+ props {
+ label = "PostalCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable postman c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PostmanCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="PostmanCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PostmanCTA.wrn
component PostmanCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable preset date range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PresetDateRangePicker label="PresetDateRange" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PresetDateRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PresetDateRange" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PresetDateRangePicker.wrn
component PresetDateRangePicker {
+ props {
+ label = "PresetDateRange"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable press release card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PressReleaseCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PressReleaseCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PressReleaseCard.wrn
component PressReleaseCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable preview badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PreviewBadge label="Preview" variant="default" />Legacy mount name: data-component="PreviewBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Preview" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PreviewBadge.wrn
component PreviewBadge {
+ props {
+ label = "Preview"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--previewbadge {class}">{label}<slot /></span> }
+}
+Reusable previous next navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PreviousNextNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="PreviousNextNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PreviousNextNavigation.wrn
component PreviousNextNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable price input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PriceInput label="Price" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PriceInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Price" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PriceInput.wrn
component PriceInput {
+ props {
+ label = "Price"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable price range slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PriceRangeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PriceRangeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PriceRangeSlider.wrn
component PriceRangeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable price text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PriceText text="text" align="start" />Legacy mount name: data-component="PriceText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PriceText.wrn
component PriceText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--display wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable pricing card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PricingCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingCard.wrn
component PricingCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable pricing comparison table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingComparisonTable caption="Plan comparison" plans="[]" features="[]" />Legacy mount name: data-component="PricingComparisonTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
caption | string | Optional | "Plan comparison" |
plans | string | Optional | [] |
features | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/PricingComparisonTable.wrn
component PricingComparisonTable {
+ props {
+ caption = "Plan comparison"
+ plans = []
+ features = []
+ class = ""
+ }
+ view { <div class="wire-table-wrap {class}" tabindex="0" role="region" aria-label="{caption}"><table class="wire-table wire-comparison-table"><caption class="wire-visually-hidden">{caption}</caption><thead><tr><th scope="col">Feature</th>{#each plans as plan}<th scope="col">{plan.name}</th>{/each}</tr></thead><tbody>{#each features as feature}<tr><th scope="row">{feature.label}</th>{#each feature.values as value}<td>{value}</td>{/each}</tr>{/each}</tbody></table></div> }
+}
+Reusable pricing contact form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingContactForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PricingContactForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingContactForm.wrn
component PricingContactForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable pricing feature group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingFeatureGroup label="PricingFeature" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PricingFeatureGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PricingFeature" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingFeatureGroup.wrn
component PricingFeatureGroup {
+ props {
+ label = "PricingFeature"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable pricing grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PricingGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingGrid.wrn
component PricingGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable pricing hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="PricingHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingHero.wrn
component PricingHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable pricing plan card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingPlanCard name="Starter" description="description" price="₹0" period="/month" featured="false" />Legacy mount name: data-component="PricingPlanCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
name | string | Optional | "Starter" |
description | string | Optional | "" |
price | string | Optional | "₹0" |
period | string | Optional | "/month" |
featured | boolean | Optional | false |
ctaLabel | string | Optional | "Choose plan" |
ctaHref | string | Optional | "#" |
defaultThis component does not declare a custom event.
Installed source: components/PricingPlanCard.wrn
component PricingPlanCard {
+ props {
+ class = ""
+ name = "Starter"
+ description = ""
+ price = "₹0"
+ period = "/month"
+ featured = false
+ ctaLabel = "Choose plan"
+ ctaHref = "#"
+ }
+ view {
+ <article class="relative flex h-full flex-col rounded-3xl border p-6 shadow-sm {featured ? 'border-violet-500 bg-violet-50/50 ring-2 ring-violet-500 dark:bg-violet-950/20' : 'border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-900'} {class}"><Badge data-show="featured" label="Most popular" variant="brand" /><h3 class="mt-4 text-xl font-bold">{name}</h3><p class="mt-2 text-sm text-slate-500">{description}</p><div class="mt-6"><span class="text-4xl font-black">{price}</span><span class="text-slate-500">{period}</span></div><div class="mt-6 flex-1"><slot /></div><a href="{ctaHref}" class="mt-6 inline-flex min-h-12 items-center justify-center rounded-xl font-semibold transition {featured ? 'bg-violet-600 text-white hover:bg-violet-700' : 'border border-slate-300 hover:bg-slate-50 dark:border-slate-700'}">{ctaLabel}</a></article>
+ }
+}
+Reusable pricing table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="PricingTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingTable.wrn
component PricingTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable pricing toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PricingToggle label="Pricing" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PricingToggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Pricing" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PricingToggle.wrn
component PricingToggle {
+ props {
+ label = "Pricing"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable primary button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PrimaryButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="PrimaryButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PrimaryButton.wrn
component PrimaryButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--primary {class}">{label}<slot /></button> }
+}
+Reusable print action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PrintAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="PrintAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PrintAction.wrn
component PrintAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable print policy button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PrintPolicyButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="PrintPolicyButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PrintPolicyButton.wrn
component PrintPolicyButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable priority selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PrioritySelector label="Priority" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PrioritySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Priority" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PrioritySelector.wrn
component PrioritySelector {
+ props {
+ label = "Priority"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable privacy notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PrivacyNotice label="Privacy" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="PrivacyNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Privacy" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PrivacyNotice.wrn
component PrivacyNotice {
+ props {
+ label = "Privacy"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable product architecture diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductArchitectureDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ProductArchitectureDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductArchitectureDiagram.wrn
component ProductArchitectureDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable product card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductCard eyebrow="Product" title="Product name" description="description" href="#" actionLabel="Learn more" />Legacy mount name: data-component="ProductCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "Product" |
title | string | Optional | "Product name" |
description | string | Optional | "" |
href | string | Optional | "#" |
actionLabel | string | Optional | "Learn more" |
status | string | Optional | "" |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ProductCard.wrn
component ProductCard {
+ props {
+ eyebrow = "Product"
+ title = "Product name"
+ description = ""
+ href = "#"
+ actionLabel = "Learn more"
+ status = ""
+ class = ""
+ }
+ view { <article class="wire-product-card {class}"><div class="wire-product-card__meta"><span class="wire-eyebrow">{eyebrow}</span><span data-show="status" class="wire-badge">{status}</span></div><h3>{title}</h3><p>{description}</p><a href="{href}" class="wire-product-card__link">{actionLabel}<span aria-hidden="true"> →</span></a></article> }
+}
+Reusable product category section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductCategorySection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ProductCategorySection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductCategorySection.wrn
component ProductCategorySection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable product c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ProductCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductCTA.wrn
component ProductCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable product feature list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductFeatureList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ProductFeatureList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductFeatureList.wrn
component ProductFeatureList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable product grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ProductGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductGrid.wrn
component ProductGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable product hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ProductHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductHero.wrn
component ProductHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable product icon component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductIcon eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProductIcon".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductIcon.wrn
component ProductIcon {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable product integration list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductIntegrationList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ProductIntegrationList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductIntegrationList.wrn
component ProductIntegrationList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable product list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ProductList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductList.wrn
component ProductList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable product logo component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductLogo eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProductLogo".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductLogo.wrn
component ProductLogo {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable product mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductMegaMenu />Legacy mount name: data-component="ProductMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ProductMegaMenu.wrn
component ProductMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+ <div
+ class="border-t border-slate-200 bg-white shadow-2xl shadow-slate-950/10 dark:border-white/10 dark:bg-slate-950 dark:shadow-black/30 {class}"
+ >
+ <div class="mx-auto max-w-7xl px-6 py-8 lg:px-10">
+ <div class="grid gap-8 lg:grid-cols-[minmax(0,1.65fr)_minmax(18rem,0.7fr)]">
+
+ <!-- Main product links -->
+ <div>
+ <div class="mb-5 flex items-end justify-between gap-6">
+ <div>
+ <p class="text-xs font-semibold uppercase tracking-[0.16em] text-indigo-600 dark:text-indigo-400">
+ WRNexusJS platform
+ </p>
+
+ <h2 class="mt-2 text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ Everything you need to manage identity
+ </h2>
+ </div>
+
+ <a
+ href="/product"
+ class="group hidden items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300 xl:inline-flex"
+ >
+ View all features
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <div class="grid gap-2 md:grid-cols-2">
+
+ <!-- Platform -->
+ <a
+ href="/platform"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-indigo-200 hover:bg-indigo-50 dark:hover:border-indigo-500/20 dark:hover:bg-indigo-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 transition group-hover:bg-indigo-600 group-hover:text-white dark:bg-indigo-500/15 dark:text-indigo-300 dark:group-hover:bg-indigo-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--layers-3] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Platform
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-indigo-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-indigo-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Unified identity infrastructure for every application.
+ </span>
+ </span>
+ </a>
+
+ <!-- Authentication -->
+ <a
+ href="/authentication"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-violet-200 hover:bg-violet-50 dark:hover:border-violet-500/20 dark:hover:bg-violet-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-violet-100 text-violet-700 transition group-hover:bg-violet-600 group-hover:text-white dark:bg-violet-500/15 dark:text-violet-300 dark:group-hover:bg-violet-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--fingerprint] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Authentication
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-violet-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-violet-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Passwords, passkeys, social login, MFA, and SSO.
+ </span>
+ </span>
+ </a>
+
+ <!-- User management -->
+ <a
+ href="/user-management"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-cyan-200 hover:bg-cyan-50 dark:hover:border-cyan-500/20 dark:hover:bg-cyan-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-cyan-100 text-cyan-700 transition group-hover:bg-cyan-600 group-hover:text-white dark:bg-cyan-500/15 dark:text-cyan-300 dark:group-hover:bg-cyan-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--users-round] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ User management
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-cyan-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-cyan-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Profiles, sessions, invitations, and user lifecycle.
+ </span>
+ </span>
+ </a>
+
+ <!-- Organizations -->
+ <a
+ href="/organizations"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-emerald-200 hover:bg-emerald-50 dark:hover:border-emerald-500/20 dark:hover:bg-emerald-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-emerald-100 text-emerald-700 transition group-hover:bg-emerald-600 group-hover:text-white dark:bg-emerald-500/15 dark:text-emerald-300 dark:group-hover:bg-emerald-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--building-2] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Organizations
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-emerald-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-emerald-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Multi-tenant workspaces, teams, domains, and membership.
+ </span>
+ </span>
+ </a>
+
+ <!-- Authorization -->
+ <a
+ href="/authorization"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-amber-200 hover:bg-amber-50 dark:hover:border-amber-500/20 dark:hover:bg-amber-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-amber-100 text-amber-700 transition group-hover:bg-amber-600 group-hover:text-white dark:bg-amber-500/15 dark:text-amber-300 dark:group-hover:bg-amber-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--key-square] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Authorization
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-amber-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-amber-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Roles, permissions, policies, and protected resources.
+ </span>
+ </span>
+ </a>
+
+ <!-- Security -->
+ <a
+ href="/security"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-rose-200 hover:bg-rose-50 dark:hover:border-rose-500/20 dark:hover:bg-rose-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-rose-100 text-rose-700 transition group-hover:bg-rose-600 group-hover:text-white dark:bg-rose-500/15 dark:text-rose-300 dark:group-hover:bg-rose-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--shield-check] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Security
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-rose-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-rose-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Session controls, recovery, audit logs, and threat protection.
+ </span>
+ </span>
+ </a>
+ </div>
+
+ <a
+ href="/product"
+ class="mt-4 flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/15 xl:hidden"
+ >
+ View all product features
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <!-- Featured panel -->
+ <aside
+ class="relative overflow-hidden rounded-3xl border border-indigo-200 bg-linear-to-br from-indigo-50 via-white to-violet-50 p-6 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10"
+ >
+ <div aria-hidden="true" class="absolute -right-16 -top-16 h-40 w-40 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div aria-hidden="true" class="absolute -bottom-20 -left-16 h-40 w-40 rounded-full bg-violet-300/30 blur-3xl dark:bg-violet-500/10" ></div>
+
+ <div class="relative">
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-white/80 px-3 py-1.5 text-xs font-semibold text-indigo-700 backdrop-blur-sm dark:border-indigo-500/20 dark:bg-white/5 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--sparkles] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ Featured
+ </span>
+
+ <div
+ class="mt-5 grid h-12 w-12 place-items-center rounded-2xl bg-indigo-600 text-white shadow-lg shadow-indigo-600/20"
+ >
+ <span class="icon-[lucide--shield-user] h-6 w-6" aria-hidden="true" ></span>
+ </div>
+
+ <h3 class="mt-5 text-xl font-bold tracking-tight text-slate-950 dark:text-white">
+ Identity built for modern SaaS
+ </h3>
+
+ <p class="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
+ Add secure authentication, organizations, permissions, and user
+ management without rebuilding identity infrastructure.
+ </p>
+
+ <ul class="mt-5 space-y-3">
+ <li class="flex items-center gap-3 text-sm text-slate-700 dark:text-slate-300">
+ <span
+ class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--check] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </span>
+
+ Passkeys and multifactor authentication
+ </li>
+
+ <li class="flex items-center gap-3 text-sm text-slate-700 dark:text-slate-300">
+ <span
+ class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--check] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </span>
+
+ Organizations and workspace isolation
+ </li>
+
+ <li class="flex items-center gap-3 text-sm text-slate-700 dark:text-slate-300">
+ <span
+ class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--check] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </span>
+
+ APIs and SDKs for every stack
+ </li>
+ </ul>
+
+ <a
+ href="/solutions/saas"
+ class="group mt-6 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Explore SaaS identity
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+
+ <div class="mt-4 flex items-center justify-center gap-2 text-xs text-slate-500 dark:text-slate-400">
+ <span class="icon-[lucide--code-2] h-4 w-4 text-indigo-600 dark:text-indigo-400" aria-hidden="true" ></span>
+
+ Developer-first and API-ready
+ </div>
+ </div>
+ </aside>
+
+ </div>
+
+ <!-- Bottom quick links -->
+ <div
+ class="mt-7 flex flex-wrap items-center justify-between gap-4 border-t border-slate-200 pt-5 dark:border-white/10"
+ >
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3">
+ <a
+ href="/integrations"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--plug] h-4 w-4" aria-hidden="true" ></span>
+
+ Integrations
+ </a>
+
+ <a
+ href="/enterprise-sso"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--building-2] h-4 w-4" aria-hidden="true" ></span>
+
+ Enterprise SSO
+ </a>
+
+ <a
+ href="/audit-logs"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--scroll-text] h-4 w-4" aria-hidden="true" ></span>
+
+ Audit logs
+ </a>
+ </div>
+
+ <a
+ href="/docs"
+ class="group inline-flex items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ Read the documentation
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ }
+}
+Reusable product mini card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductMiniCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProductMiniCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductMiniCard.wrn
component ProductMiniCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable product navigation card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductNavigationCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProductNavigationCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductNavigationCard.wrn
component ProductNavigationCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable product page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductPageShell />Legacy mount name: data-component="ProductPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductPageShell.wrn
component ProductPageShell {
+ props {
+ class = ""
+ }
+ view { <div class="wire-page-shell wire-page-shell--product {class}"><slot /></div> }
+}
+Reusable product selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductSelector label="Product" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ProductSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Product" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductSelector.wrn
component ProductSelector {
+ props {
+ label = "Product"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable product status badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductStatusBadge label="ProductStatus" variant="default" />Legacy mount name: data-component="ProductStatusBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ProductStatus" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductStatusBadge.wrn
component ProductStatusBadge {
+ props {
+ label = "ProductStatus"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--productstatusbadge {class}">{label}<slot /></span> }
+}
+Reusable product use case list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductUseCaseList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ProductUseCaseList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProductUseCaseList.wrn
component ProductUseCaseList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable products mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProductsMegaMenu label="Products" sections="[]" />Legacy mount name: data-component="ProductsMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Products" |
sections | string | Optional | [] |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ProductsMegaMenu.wrn
component ProductsMegaMenu {
+ props {
+ label = "Products"
+ sections = []
+ class = ""
+ }
+ view { <MegaMenu label="{label}" sections="{sections}" class="{class}" /> }
+}
+Reusable progress bar component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProgressBar value="0" max="100" label="Progress" showValue="true" />Legacy mount name: data-component="ProgressBar".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
value | number | Optional | 0 |
max | number | Optional | 100 |
label | string | Optional | "Progress" |
showValue | boolean | Optional | true |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ProgressBar.wrn
component ProgressBar {
+ props {
+ class = ""
+ value = 0
+ max = 100
+ label = "Progress"
+ showValue = true
+ }
+ view {
+ <div class="{class}"><div class="mb-2 flex justify-between text-sm"><span>{label}</span><span data-show="showValue">{value}%</span></div><div class="h-2 overflow-hidden rounded-full bg-slate-200 dark:bg-slate-800" role="progressbar" aria-valuenow="{value}" aria-valuemin="0" aria-valuemax="{max}"><div class="h-full rounded-full bg-violet-600 transition-all duration-500" style="width: {value}%"></div></div></div>
+ }
+}
+Reusable progress chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProgressChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ProgressChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProgressChart.wrn
component ProgressChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable progress ring component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProgressRing title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ProgressRing".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProgressRing.wrn
component ProgressRing {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable progress slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProgressSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProgressSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProgressSlider.wrn
component ProgressSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<progress value="0" max="100" />Legacy mount name: data-component="progress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
value | number | Optional | 0 |
max | number | Optional | 100 |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/progress.wrn
// Progress bar (native <progress>, themed).
+component Progress {
+ props {
+ value = 0
+ max = 100
+ class = ""
+ }
+ view {
+ <progress class="wire-progress {class}" value="{value}" max="{max}"></progress>
+ }
+}
+Reusable project card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProjectCard title="title" description="description" href="href" />Legacy mount name: data-component="ProjectCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProjectCard.wrn
component ProjectCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--project {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable project selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProjectSelector label="Project" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ProjectSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Project" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProjectSelector.wrn
component ProjectSelector {
+ props {
+ label = "Project"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable project switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProjectSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ProjectSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProjectSwitcher.wrn
component ProjectSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable promo code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PromoCodeInput label="PromoCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PromoCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PromoCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PromoCodeInput.wrn
component PromoCodeInput {
+ props {
+ label = "PromoCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable prompt dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PromptDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="PromptDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PromptDialog.wrn
component PromptDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable provider selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ProviderSelector label="Provider" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ProviderSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Provider" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ProviderSelector.wrn
component ProviderSelector {
+ props {
+ label = "Provider"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable public footer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicFooter />Legacy mount name: data-component="PublicFooter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
submitInstalled source: components/PublicFooter.wrn
component PublicFooter {
+ props {
+ class: string = ""
+ }
+ state email = ""
+ state newsletterSubmitted = false
+
+ view {
+ <footer
+ class="relative overflow-hidden border-t border-slate-200 bg-slate-50 dark:border-white/10 dark:bg-slate-950 {class}"
+ >
+
+ <!-- Decorative background -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-x-0 top-0 h-96 overflow-hidden"
+ >
+ <div class="absolute -left-32 -top-48 h-96 w-96 rounded-full bg-indigo-300/20 blur-3xl dark:bg-indigo-500/10"></div>
+
+ <div class="absolute -right-32 -top-48 h-96 w-96 rounded-full bg-violet-300/20 blur-3xl dark:bg-violet-500/10"></div>
+ </div>
+
+ <div class="relative w-full px-5 py-12 sm:px-8 lg:px-10 lg:py-16 xl:px-12">
+
+ <!-- Newsletter and CTA -->
+ <section
+ aria-labelledby="footer-newsletter-title"
+ class="relative overflow-hidden rounded-3xl border border-indigo-200 bg-linear-to-br from-indigo-50 via-white to-violet-50 p-6 shadow-xl shadow-indigo-950/5 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-violet-500/10 sm:p-8 lg:p-10"
+ >
+ <div aria-hidden="true" class="absolute -right-24 -top-24 h-64 w-64 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div aria-hidden="true" class="absolute -bottom-24 -left-24 h-64 w-64 rounded-full bg-violet-300/30 blur-3xl dark:bg-violet-500/10" ></div>
+
+ <div class="relative grid items-center gap-8 lg:grid-cols-[minmax(0,1fr)_minmax(22rem,0.75fr)]">
+ <div>
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-white/70 px-3 py-1.5 text-xs font-semibold text-indigo-700 backdrop-blur-sm dark:border-indigo-500/20 dark:bg-white/5 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--mail-plus] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ WRNexusJS updates
+ </span>
+
+ <h2
+ id="footer-newsletter-title"
+ class="mt-5 max-w-2xl text-2xl font-bold tracking-tight text-slate-950 dark:text-white sm:text-3xl"
+ >
+ Identity insights delivered to your inbox
+ </h2>
+
+ <p class="mt-3 max-w-2xl text-sm leading-6 text-slate-600 dark:text-slate-400 sm:text-base">
+ Get product updates, security guidance, implementation
+ strategies, and practical identity architecture resources.
+ </p>
+ </div>
+
+ <div>
+ <form
+ method="post"
+ action="/api/newsletter/subscribe"
+ @submit="newsletterSubmitted = true"
+ class="rounded-2xl border border-slate-200 bg-white/80 p-2 shadow-lg shadow-slate-950/5 backdrop-blur-sm dark:border-white/10 dark:bg-white/5"
+ >
+ <div class="flex flex-col gap-2 sm:flex-row">
+ <label
+ class="sr-only"
+ for="footer-newsletter-email"
+ >
+ Work email address
+ </label>
+
+ <div class="relative min-w-0 flex-1">
+ <span class="icon-[lucide--mail] pointer-events-none absolute left-4 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" aria-hidden="true" ></span>
+
+ <input
+ id="footer-newsletter-email"
+ name="email"
+ type="email"
+ autocomplete="email"
+ required
+ bind:value="email"
+ placeholder="Enter your work email"
+ class="h-12 w-full rounded-xl border border-transparent bg-transparent pl-11 pr-4 text-sm text-slate-950 outline-none transition placeholder:text-slate-400 focus:border-indigo-300 focus:bg-white focus:ring-4 focus:ring-indigo-500/10 dark:text-white dark:focus:border-indigo-500/30 dark:focus:bg-slate-900"
+ />
+ </div>
+
+ <button
+ type="submit"
+ class="group inline-flex h-12 shrink-0 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Subscribe
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </form>
+
+ <p class="mt-3 flex items-start gap-2 text-xs leading-5 text-slate-500 dark:text-slate-400">
+ <span class="icon-[lucide--shield-check] mt-0.5 h-3.5 w-3.5 shrink-0" aria-hidden="true" ></span>
+
+ No spam. Unsubscribe at any time. Read our
+ <a
+ href="/privacy"
+ class="font-semibold text-indigo-600 hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ privacy policy
+ </a>.
+ </p>
+
+ <div
+ data-show="newsletterSubmitted"
+ role="status"
+ class="mt-3 flex items-center gap-2 rounded-xl border border-emerald-200 bg-emerald-50 px-3 py-2.5 text-sm font-medium text-emerald-800 dark:border-emerald-500/20 dark:bg-emerald-500/10 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--circle-check] h-4 w-4 shrink-0" aria-hidden="true" ></span>
+
+ Thanks. Please check your inbox to confirm your subscription.
+ </div>
+ </div>
+ </div>
+ </section>
+
+ <!-- Main footer -->
+ <div class="mt-12 grid gap-10 lg:grid-cols-[minmax(16rem,1.25fr)_minmax(0,3fr)] lg:gap-16">
+
+ <!-- Brand -->
+ <div>
+ <a
+ href="/"
+ aria-label="WRNexusJS home"
+ class="group inline-flex items-center gap-3 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
+ >
+ <span
+ class="grid h-11 w-11 place-items-center rounded-2xl bg-indigo-600 text-white shadow-lg shadow-indigo-600/20 transition group-hover:-translate-y-0.5 group-hover:bg-indigo-500"
+ >
+ <span class="icon-[lucide--blocks] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ WRNexusJS
+ </span>
+
+ <span
+ class="block text-[10px] font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-slate-400"
+ >
+ Identity Cloud
+ </span>
+ </span>
+ </a>
+
+ <p class="mt-5 max-w-sm text-sm leading-6 text-slate-600 dark:text-slate-400">
+ Secure authentication, user management, organizations,
+ authorization, and enterprise identity for modern applications.
+ </p>
+
+ <div class="mt-6 flex flex-wrap items-center gap-2">
+ <a
+ href="/status"
+ class="inline-flex items-center gap-2 rounded-xl border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs font-semibold text-emerald-800 transition hover:border-emerald-300 hover:bg-emerald-100 dark:border-emerald-500/20 dark:bg-emerald-500/10 dark:text-emerald-300 dark:hover:border-emerald-500/30"
+ >
+ <span class="relative flex h-2 w-2">
+ <span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60"></span>
+ <span class="relative inline-flex h-2 w-2 rounded-full bg-emerald-500"></span>
+ </span>
+
+ All systems operational
+ </a>
+ </div>
+
+ <!-- Social links -->
+ <div class="mt-6 flex items-center gap-2">
+ <a
+ href="https://github.com/wrnexus"
+ target="_blank"
+ rel="noopener noreferrer"
+ aria-label="WRNexusJS on GitHub"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-500 transition hover:border-indigo-300 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-400 dark:hover:border-indigo-500/30 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--github] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </a>
+
+ <a
+ href="https://www.linkedin.com/company/wrnexus"
+ target="_blank"
+ rel="noopener noreferrer"
+ aria-label="WRNexusJS on LinkedIn"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-500 transition hover:border-indigo-300 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-400 dark:hover:border-indigo-500/30 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--linkedin] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </a>
+
+ <a
+ href="https://x.com/wrnexus"
+ target="_blank"
+ rel="noopener noreferrer"
+ aria-label="WRNexusJS on X"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-500 transition hover:border-indigo-300 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-400 dark:hover:border-indigo-500/30 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--twitter] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </a>
+
+ <a
+ href="https://www.youtube.com/@wrnexus"
+ target="_blank"
+ rel="noopener noreferrer"
+ aria-label="WRNexusJS on YouTube"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-500 transition hover:border-indigo-300 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-400 dark:hover:border-indigo-500/30 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--youtube] h-4.5 w-4.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+
+ <!-- Navigation columns -->
+ <nav
+ aria-label="Footer navigation"
+ class="grid grid-cols-2 gap-x-6 gap-y-10 sm:grid-cols-3 xl:grid-cols-5"
+ >
+ <!-- Product -->
+ <div>
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Product
+ </h3>
+
+ <ul class="mt-4 space-y-3">
+ <li>
+ <a
+ href="/platform"
+ class="footer-link"
+ >
+ Platform
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/authentication"
+ class="footer-link"
+ >
+ Authentication
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/user-management"
+ class="footer-link"
+ >
+ User management
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/organizations"
+ class="footer-link"
+ >
+ Organizations
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/authorization"
+ class="footer-link"
+ >
+ Authorization
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/enterprise-sso"
+ class="footer-link"
+ >
+ Enterprise SSO
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <!-- Solutions -->
+ <div>
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Solutions
+ </h3>
+
+ <ul class="mt-4 space-y-3">
+ <li>
+ <a
+ href="/solutions/startups"
+ class="footer-link"
+ >
+ Startups
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/solutions/saas"
+ class="footer-link"
+ >
+ SaaS
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/solutions/enterprise"
+ class="footer-link"
+ >
+ Enterprise
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/solutions/developers"
+ class="footer-link"
+ >
+ Developers
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/solutions/agencies"
+ class="footer-link"
+ >
+ Agencies
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/solutions/b2b"
+ class="footer-link"
+ >
+ B2B
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <!-- Developers -->
+ <div>
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Developers
+ </h3>
+
+ <ul class="mt-4 space-y-3">
+ <li>
+ <a
+ href="/docs"
+ class="footer-link"
+ >
+ Documentation
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/docs/api"
+ class="footer-link"
+ >
+ API reference
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/sdks"
+ class="footer-link"
+ >
+ SDKs
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/examples"
+ class="footer-link"
+ >
+ Examples
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/docs/webhooks"
+ class="footer-link"
+ >
+ Webhooks
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/changelog"
+ class="footer-link"
+ >
+ Changelog
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <!-- Resources -->
+ <div>
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Resources
+ </h3>
+
+ <ul class="mt-4 space-y-3">
+ <li>
+ <a
+ href="/blog"
+ class="footer-link"
+ >
+ Blog
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/guides"
+ class="footer-link"
+ >
+ Guides
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/customers"
+ class="footer-link"
+ >
+ Customers
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/help"
+ class="footer-link"
+ >
+ Help center
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/security"
+ class="footer-link"
+ >
+ Security
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/trust"
+ class="footer-link"
+ >
+ Trust center
+ </a>
+ </li>
+ </ul>
+ </div>
+
+ <!-- Company -->
+ <div>
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ Company
+ </h3>
+
+ <ul class="mt-4 space-y-3">
+ <li>
+ <a
+ href="/about"
+ class="footer-link"
+ >
+ About
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/careers"
+ class="footer-link"
+ >
+ Careers
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/partners"
+ class="footer-link"
+ >
+ Partners
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/contact"
+ class="footer-link"
+ >
+ Contact
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/pricing"
+ class="footer-link"
+ >
+ Pricing
+ </a>
+ </li>
+
+ <li>
+ <a
+ href="/status"
+ class="footer-link"
+ >
+ Status
+ </a>
+ </li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+
+ <!-- Bottom bar -->
+ <div
+ class="mt-12 flex flex-col gap-5 border-t border-slate-200 pt-6 dark:border-white/10 lg:flex-row lg:items-center lg:justify-between"
+ >
+ <div
+ class="flex flex-col gap-2 text-xs text-slate-500 dark:text-slate-400 sm:flex-row sm:items-center sm:gap-4"
+ >
+ <p>
+ © 2026 WRNexusJS. All rights reserved.
+ </p>
+
+ <span class="hidden h-1 w-1 rounded-full bg-slate-300 dark:bg-slate-700 sm:block"></span>
+
+ <p>
+ Built by WorkRoot Workspace.
+ </p>
+ </div>
+
+ <div class="flex flex-wrap items-center gap-x-5 gap-y-3">
+ <a
+ href="/privacy"
+ class="footer-bottom-link"
+ >
+ Privacy
+ </a>
+
+ <a
+ href="/terms"
+ class="footer-bottom-link"
+ >
+ Terms
+ </a>
+
+ <a
+ href="/cookies"
+ class="footer-bottom-link"
+ >
+ Cookies
+ </a>
+
+ <a
+ href="/legal"
+ class="footer-bottom-link"
+ >
+ Legal
+ </a>
+
+ <button
+ type="button"
+ data-open-cookie-preferences
+ class="footer-bottom-link"
+ >
+ Cookie preferences
+ </button>
+
+ <button
+ type="button"
+ data-wire-theme-toggle
+ class="inline-flex items-center gap-2 rounded-lg text-xs font-semibold text-slate-500 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--moon] h-3.5 w-3.5 dark:hidden" aria-hidden="true" ></span>
+
+ <span class="icon-[lucide--sun] hidden h-3.5 w-3.5 dark:block" aria-hidden="true" ></span>
+
+ Theme
+ </button>
+ </div>
+ </div>
+ </div>
+ </footer>
+ }
+}
+Reusable public header logo component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicHeaderLogo eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PublicHeaderLogo".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PublicHeaderLogo.wrn
component PublicHeaderLogo {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable public header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicHeader />Legacy mount name: data-component="PublicHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/PublicHeader.wrn
component PublicHeader {
+ props {
+ class: string = ""
+ }
+ state activeMenu = ""
+ state mobileMenuOpen = false
+ state headerScrolled = false
+
+ view {
+ <header
+ data-public-header
+ class="relative sticky top-0 z-50 w-full border-b transition-all duration-300 {class}"
+ class:border-transparent="!headerScrolled"
+ class:bg-transparent="!headerScrolled"
+ class:border-slate-200/80="headerScrolled"
+ class:bg-white/90="headerScrolled"
+ class:shadow-sm="headerScrolled"
+ class:backdrop-blur-xl="headerScrolled"
+ class:dark:border-white/10="headerScrolled"
+ class:dark:bg-slate-950/90="headerScrolled"
+ >
+ <div
+ class="relative z-[60] flex h-18 w-full items-center justify-between gap-6 px-5 sm:px-8 lg:px-10 xl:px-12"
+ >
+
+ <!-- Brand -->
+ <a
+ href="/"
+ aria-label="WRNexusJS home"
+ class="group inline-flex shrink-0 items-center gap-3 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950"
+ >
+ <span
+ class="grid h-10 w-10 place-items-center rounded-xl bg-indigo-600 text-white shadow-lg shadow-indigo-600/20 transition duration-200 group-hover:-translate-y-0.5 group-hover:bg-indigo-500 group-hover:shadow-xl"
+ >
+ <span class="icon-[lucide--blocks] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="block text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ WRNexusJS
+ </span>
+
+ <span
+ class="block text-[10px] font-semibold uppercase tracking-[0.2em] text-slate-500 dark:text-slate-400"
+ >
+ Identity Cloud
+ </span>
+ </span>
+ </a>
+
+ <!-- Desktop navigation -->
+ <nav
+ aria-label="Main navigation"
+ class="hidden items-center gap-1 lg:flex"
+ >
+ <!-- Product -->
+ <button
+ type="button"
+ @click="activeMenu = activeMenu === 'product' ? '' : 'product'"
+ aria-haspopup="true"
+ aria-expanded="{activeMenu === 'product'}"
+ class="inline-flex h-10 items-center gap-1.5 rounded-xl px-3.5 text-sm font-semibold transition"
+ class:bg-indigo-50="activeMenu === 'product'"
+ class:text-indigo-700="activeMenu === 'product'"
+ class:text-slate-700="activeMenu !== 'product'"
+ class:hover:bg-slate-100="activeMenu !== 'product'"
+ class:dark:bg-indigo-500/10="activeMenu === 'product'"
+ class:dark:text-indigo-300="activeMenu === 'product'"
+ class:dark:text-slate-300="activeMenu !== 'product'"
+ class:dark:hover:bg-white/5="activeMenu !== 'product'"
+ >
+ Product
+
+ <span class="icon-[lucide--chevron-down] h-4 w-4 transition-transform duration-200" class:rotate-180="activeMenu === 'product'" aria-hidden="true" ></span>
+ </button>
+
+ <!-- Solutions -->
+ <button
+ type="button"
+ @click="activeMenu = activeMenu === 'solutions' ? '' : 'solutions'"
+ aria-haspopup="true"
+ aria-expanded="{activeMenu === 'solutions'}"
+ class="group inline-flex h-10 items-center gap-1.5 rounded-xl px-3.5 text-sm font-semibold transition"
+ class:bg-indigo-50="activeMenu === 'solutions'"
+ class:text-indigo-700="activeMenu === 'solutions'"
+ class:text-slate-700="activeMenu !== 'solutions'"
+ class:hover:bg-slate-100="activeMenu !== 'solutions'"
+ class:hover:text-slate-950="activeMenu !== 'solutions'"
+ class:dark:bg-indigo-500/10="activeMenu === 'solutions'"
+ class:dark:text-indigo-300="activeMenu === 'solutions'"
+ class:dark:text-slate-300="activeMenu !== 'solutions'"
+ class:dark:hover:bg-white/5="activeMenu !== 'solutions'"
+ class:dark:hover:text-white="activeMenu !== 'solutions'"
+ >
+ Solutions
+
+ <span class="icon-[lucide--chevron-down] h-4 w-4 transition-transform duration-200" class:rotate-180="activeMenu === 'solutions'" aria-hidden="true" ></span>
+ </button>
+
+ <!-- Developers -->
+ <button
+ type="button"
+ @click="activeMenu = activeMenu === 'developers' ? '' : 'developers'"
+ aria-haspopup="true"
+ aria-expanded="{activeMenu === 'developers'}"
+ class="group inline-flex h-10 items-center gap-1.5 rounded-xl px-3.5 text-sm font-semibold transition"
+ class:bg-indigo-50="activeMenu === 'developers'"
+ class:text-indigo-700="activeMenu === 'developers'"
+ class:text-slate-700="activeMenu !== 'developers'"
+ class:hover:bg-slate-100="activeMenu !== 'developers'"
+ class:hover:text-slate-950="activeMenu !== 'developers'"
+ class:dark:bg-indigo-500/10="activeMenu === 'developers'"
+ class:dark:text-indigo-300="activeMenu === 'developers'"
+ class:dark:text-slate-300="activeMenu !== 'developers'"
+ class:dark:hover:bg-white/5="activeMenu !== 'developers'"
+ class:dark:hover:text-white="activeMenu !== 'developers'"
+ >
+ Developers
+
+ <span class="icon-[lucide--chevron-down] h-4 w-4 transition-transform duration-200" class:rotate-180="activeMenu === 'developers'" aria-hidden="true" ></span>
+ </button>
+
+ <!-- Resources -->
+ <button
+ type="button"
+ @click="activeMenu = activeMenu === 'resources' ? '' : 'resources'"
+ aria-haspopup="true"
+ aria-expanded="{activeMenu === 'resources'}"
+ class="group inline-flex h-10 items-center gap-1.5 rounded-xl px-3.5 text-sm font-semibold transition"
+ class:bg-indigo-50="activeMenu === 'resources'"
+ class:text-indigo-700="activeMenu === 'resources'"
+ class:text-slate-700="activeMenu !== 'resources'"
+ class:hover:bg-slate-100="activeMenu !== 'resources'"
+ class:hover:text-slate-950="activeMenu !== 'resources'"
+ class:dark:bg-indigo-500/10="activeMenu === 'resources'"
+ class:dark:text-indigo-300="activeMenu === 'resources'"
+ class:dark:text-slate-300="activeMenu !== 'resources'"
+ class:dark:hover:bg-white/5="activeMenu !== 'resources'"
+ class:dark:hover:text-white="activeMenu !== 'resources'"
+ >
+ Resources
+
+ <span class="icon-[lucide--chevron-down] h-4 w-4 transition-transform duration-200" class:rotate-180="activeMenu === 'resources'" aria-hidden="true" ></span>
+ </button>
+
+ <a
+ href="/pricing"
+ class="inline-flex h-10 items-center rounded-xl px-3.5 text-sm font-semibold text-slate-700 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:text-slate-300 dark:hover:bg-white/5 dark:hover:text-white"
+ >
+ Pricing
+ </a>
+ </nav>
+
+ <!-- Desktop actions -->
+ <div class="hidden items-center gap-2 lg:flex">
+ <a
+ href="/status"
+ class="mr-1 inline-flex items-center gap-2 rounded-xl px-3 py-2 text-xs font-semibold text-slate-500 transition hover:bg-slate-100 hover:text-slate-950 dark:text-slate-400 dark:hover:bg-white/5 dark:hover:text-white"
+ >
+ <span class="relative flex h-2 w-2">
+ <span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60"></span>
+ <span class="relative inline-flex h-2 w-2 rounded-full bg-emerald-500"></span>
+ </span>
+
+ All systems operational
+ </a>
+
+ <button
+ type="button"
+ data-wire-theme-toggle
+ aria-label="Toggle color theme"
+ title="Toggle color theme"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-600 shadow-sm transition hover:border-slate-300 hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:border-white/20 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--moon] h-4 w-4 dark:hidden" aria-hidden="true" ></span>
+
+ <span class="icon-[lucide--sun] hidden h-4 w-4 dark:block" aria-hidden="true" ></span>
+
+ <span class="sr-only">
+ Toggle color theme
+ </span>
+ </button>
+
+ <a
+ href="/sign-in"
+ class="inline-flex h-10 items-center justify-center rounded-xl px-4 text-sm font-semibold text-slate-700 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-white"
+ >
+ Sign in
+ </a>
+
+ <a
+ href="/sign-up"
+ class="group inline-flex h-10 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-950"
+ >
+ Start free
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <!-- Mobile actions -->
+ <div class="flex items-center gap-2 lg:hidden">
+ <button
+ type="button"
+ data-wire-theme-toggle
+ aria-label="Toggle color theme"
+ title="Toggle color theme"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-600 shadow-sm transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--moon] h-4 w-4 dark:hidden" aria-hidden="true" ></span>
+
+ <span class="icon-[lucide--sun] hidden h-4 w-4 dark:block" aria-hidden="true" ></span>
+ </button>
+
+ <button
+ type="button"
+ @click="mobileMenuOpen = !mobileMenuOpen"
+ aria-label="{mobileMenuOpen ? 'Close navigation menu' : 'Open navigation menu'}"
+ aria-expanded="{mobileMenuOpen}"
+ aria-controls="public-mobile-navigation"
+ class="grid h-10 w-10 place-items-center rounded-xl border border-slate-200 bg-white text-slate-700 shadow-sm transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span data-show="!mobileMenuOpen" class="icon-[lucide--menu] h-5 w-5" aria-hidden="true" ></span>
+
+ <span data-show="mobileMenuOpen" class="icon-[lucide--x] h-5 w-5" aria-hidden="true" ></span>
+
+ <span class="sr-only">
+ Toggle navigation
+ </span>
+ </button>
+ </div>
+
+ </div>
+
+ <!-- Outside-click backdrop -->
+ <button type="button" data-show="activeMenu !== ''" @click="activeMenu = ''" aria-label="Close navigation menu" class="fixed inset-0 z-40 hidden cursor-default bg-transparent lg:block" class:hidden="activeMenu === ''" class:block="activeMenu !== ''" ></button>
+
+ <!-- Desktop mega menus -->
+ <div
+ class="absolute inset-x-0 top-full z-50 max-lg:hidden"
+ class:hidden="activeMenu === ''"
+ class:block="activeMenu !== ''"
+ >
+ <div
+ class:hidden="activeMenu !== 'product'"
+ class:block="activeMenu === 'product'"
+ >
+ <ProductMegaMenu />
+ </div>
+
+ <div
+ class:hidden="activeMenu !== 'solutions'"
+ class:block="activeMenu === 'solutions'"
+ >
+ <SolutionsMegaMenu />
+ </div>
+
+ <div
+ class:hidden="activeMenu !== 'developers'"
+ class:block="activeMenu === 'developers'"
+ >
+ <DevelopersMegaMenu />
+ </div>
+
+ <div
+ class:hidden="activeMenu !== 'resources'"
+ class:block="activeMenu === 'resources'"
+ >
+ <ResourcesMegaMenu />
+ </div>
+ </div>
+
+ <!-- Mobile navigation -->
+ <div
+ id="public-mobile-navigation"
+ class="lg:hidden"
+ class:hidden="!mobileMenuOpen"
+ class:block="mobileMenuOpen"
+ >
+ <PublicMobileNavigation />
+ </div>
+ </header>
+ }
+}
+Reusable public mobile navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicMobileNavigation />Legacy mount name: data-component="PublicMobileNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/PublicMobileNavigation.wrn
component PublicMobileNavigation {
+ props {
+ class: string = ""
+ }
+ state openSection = ""
+
+ view {
+ <div
+ class="border-t border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-slate-950 lg:hidden {class}"
+ >
+ <div class="mx-auto max-h-[calc(100dvh-4.5rem)] max-w-7xl overflow-y-auto px-5 py-5 sm:px-8">
+
+ <!-- Mobile status -->
+ <a
+ href="/status"
+ class="mb-5 flex items-center justify-between rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-3 transition hover:border-emerald-300 hover:bg-emerald-100 dark:border-emerald-500/20 dark:bg-emerald-500/10 dark:hover:border-emerald-500/30 dark:hover:bg-emerald-500/15"
+ >
+ <span class="flex items-center gap-3">
+ <span class="relative flex h-2.5 w-2.5 shrink-0">
+ <span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60"></span>
+ <span class="relative inline-flex h-2.5 w-2.5 rounded-full bg-emerald-500"></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-emerald-900 dark:text-emerald-100">
+ All systems operational
+ </span>
+
+ <span class="mt-0.5 block text-xs text-emerald-700 dark:text-emerald-300">
+ View service status
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 shrink-0 text-emerald-700 dark:text-emerald-300" aria-hidden="true" ></span>
+ </a>
+
+ <nav
+ aria-label="Mobile navigation"
+ class="space-y-2"
+ >
+
+ <!-- Product -->
+ <div
+ class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
+ >
+ <button
+ type="button"
+ @click="openSection = openSection === 'product' ? '' : 'product'"
+ aria-expanded="{openSection === 'product'}"
+ aria-controls="mobile-product-menu"
+ class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
+ class:bg-indigo-50="openSection === 'product'"
+ class:dark:bg-indigo-500/10="openSection === 'product'"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
+ class:bg-indigo-100="openSection === 'product'"
+ class:text-indigo-700="openSection === 'product'"
+ class:bg-slate-100="openSection !== 'product'"
+ class:text-slate-600="openSection !== 'product'"
+ class:dark:bg-indigo-500/15="openSection === 'product'"
+ class:dark:text-indigo-300="openSection === 'product'"
+ class:dark:bg-white/5="openSection !== 'product'"
+ class:dark:text-slate-300="openSection !== 'product'"
+ >
+ <span class="icon-[lucide--boxes] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold"
+ class:text-indigo-950="openSection === 'product'"
+ class:text-slate-950="openSection !== 'product'"
+ class:dark:text-indigo-100="openSection === 'product'"
+ class:dark:text-white="openSection !== 'product'"
+ >
+ Product
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Explore the WRNexusJS platform
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'product'" aria-hidden="true" ></span>
+ </button>
+
+ <div
+ id="mobile-product-menu"
+ data-show="openSection === 'product'"
+ class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
+ >
+ <div class="grid gap-1">
+ <a
+ href="/platform"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-indigo-50 text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--layers-3] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ Platform
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Complete identity infrastructure
+ </span>
+ </span>
+ </a>
+
+ <a
+ href="/authentication"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-violet-50 text-violet-700 dark:bg-violet-500/10 dark:text-violet-300"
+ >
+ <span class="icon-[lucide--fingerprint] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ Authentication
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Passwords, passkeys, social login, and SSO
+ </span>
+ </span>
+ </a>
+
+ <a
+ href="/user-management"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-cyan-50 text-cyan-700 dark:bg-cyan-500/10 dark:text-cyan-300"
+ >
+ <span class="icon-[lucide--users-round] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ User management
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Profiles, sessions, invitations, and lifecycle
+ </span>
+ </span>
+ </a>
+
+ <a
+ href="/organizations"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-emerald-50 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--building-2] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ Organizations
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Multi-tenant workspaces and teams
+ </span>
+ </span>
+ </a>
+
+ <a
+ href="/security"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-amber-50 text-amber-700 dark:bg-amber-500/10 dark:text-amber-300"
+ >
+ <span class="icon-[lucide--shield-check] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ Security
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Protect identities and sensitive actions
+ </span>
+ </span>
+ </a>
+
+ <a
+ href="/integrations"
+ class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-rose-50 text-rose-700 dark:bg-rose-500/10 dark:text-rose-300"
+ >
+ <span class="icon-[lucide--plug] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span
+ class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
+ >
+ Integrations
+ </span>
+
+ <span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Connect your stack and applications
+ </span>
+ </span>
+ </a>
+ </div>
+
+ <a
+ href="/product"
+ class="mt-2 flex items-center justify-center gap-2 rounded-xl bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:bg-indigo-100 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:bg-indigo-500/15"
+ >
+ View all product features
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+
+ <!-- Solutions -->
+ <div
+ class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
+ >
+ <button
+ type="button"
+ @click="openSection = openSection === 'solutions' ? '' : 'solutions'"
+ aria-expanded="{openSection === 'solutions'}"
+ aria-controls="mobile-solutions-menu"
+ class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
+ class:bg-indigo-50="openSection === 'solutions'"
+ class:dark:bg-indigo-500/10="openSection === 'solutions'"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
+ class:bg-indigo-100="openSection === 'solutions'"
+ class:text-indigo-700="openSection === 'solutions'"
+ class:bg-slate-100="openSection !== 'solutions'"
+ class:text-slate-600="openSection !== 'solutions'"
+ class:dark:bg-indigo-500/15="openSection === 'solutions'"
+ class:dark:text-indigo-300="openSection === 'solutions'"
+ class:dark:bg-white/5="openSection !== 'solutions'"
+ class:dark:text-slate-300="openSection !== 'solutions'"
+ >
+ <span class="icon-[lucide--lightbulb] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ Solutions
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Built for your business
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'solutions'" aria-hidden="true" ></span>
+ </button>
+
+ <div
+ id="mobile-solutions-menu"
+ data-show="openSection === 'solutions'"
+ class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
+ >
+ <div class="grid grid-cols-2 gap-2">
+ <a
+ href="/solutions/startups"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--rocket] h-5 w-5 text-indigo-600 dark:text-indigo-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ Startups
+ </span>
+ </a>
+
+ <a
+ href="/solutions/saas"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--cloud] h-5 w-5 text-cyan-600 dark:text-cyan-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ SaaS
+ </span>
+ </a>
+
+ <a
+ href="/solutions/enterprise"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--building] h-5 w-5 text-violet-600 dark:text-violet-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ Enterprise
+ </span>
+ </a>
+
+ <a
+ href="/solutions/developers"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--code-2] h-5 w-5 text-emerald-600 dark:text-emerald-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ Developers
+ </span>
+ </a>
+
+ <a
+ href="/solutions/agencies"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--briefcase-business] h-5 w-5 text-amber-600 dark:text-amber-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ Agencies
+ </span>
+ </a>
+
+ <a
+ href="/solutions/b2b"
+ class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
+ >
+ <span class="icon-[lucide--handshake] h-5 w-5 text-rose-600 dark:text-rose-400"></span>
+ <span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
+ B2B
+ </span>
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <!-- Developers -->
+ <div
+ class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
+ >
+ <button
+ type="button"
+ @click="openSection = openSection === 'developers' ? '' : 'developers'"
+ aria-expanded="{openSection === 'developers'}"
+ aria-controls="mobile-developers-menu"
+ class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
+ class:bg-indigo-50="openSection === 'developers'"
+ class:dark:bg-indigo-500/10="openSection === 'developers'"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
+ class:bg-indigo-100="openSection === 'developers'"
+ class:text-indigo-700="openSection === 'developers'"
+ class:bg-slate-100="openSection !== 'developers'"
+ class:text-slate-600="openSection !== 'developers'"
+ class:dark:bg-indigo-500/15="openSection === 'developers'"
+ class:dark:text-indigo-300="openSection === 'developers'"
+ class:dark:bg-white/5="openSection !== 'developers'"
+ class:dark:text-slate-300="openSection !== 'developers'"
+ >
+ <span class="icon-[lucide--terminal-square] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ Developers
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Build with WRNexusJS
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'developers'" aria-hidden="true" ></span>
+ </button>
+
+ <div
+ id="mobile-developers-menu"
+ data-show="openSection === 'developers'"
+ class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
+ >
+ <div class="grid gap-1">
+ <a
+ href="/docs"
+ class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--book-open] h-5 w-5 text-indigo-600 dark:text-indigo-400"></span>
+ Documentation
+ </a>
+
+ <a
+ href="/docs/api"
+ class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--braces] h-5 w-5 text-violet-600 dark:text-violet-400"></span>
+ API reference
+ </a>
+
+ <a
+ href="/sdks"
+ class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--package] h-5 w-5 text-cyan-600 dark:text-cyan-400"></span>
+ SDKs
+ </a>
+
+ <a
+ href="/examples"
+ class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--flask-conical] h-5 w-5 text-emerald-600 dark:text-emerald-400"></span>
+ Examples
+ </a>
+
+ <a
+ href="/changelog"
+ class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--history] h-5 w-5 text-amber-600 dark:text-amber-400"></span>
+ Changelog
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <!-- Resources -->
+ <div
+ class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
+ >
+ <button
+ type="button"
+ @click="openSection = openSection === 'resources' ? '' : 'resources'"
+ aria-expanded="{openSection === 'resources'}"
+ aria-controls="mobile-resources-menu"
+ class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
+ class:bg-indigo-50="openSection === 'resources'"
+ class:dark:bg-indigo-500/10="openSection === 'resources'"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
+ class:bg-indigo-100="openSection === 'resources'"
+ class:text-indigo-700="openSection === 'resources'"
+ class:bg-slate-100="openSection !== 'resources'"
+ class:text-slate-600="openSection !== 'resources'"
+ class:dark:bg-indigo-500/15="openSection === 'resources'"
+ class:dark:text-indigo-300="openSection === 'resources'"
+ class:dark:bg-white/5="openSection !== 'resources'"
+ class:dark:text-slate-300="openSection !== 'resources'"
+ >
+ <span class="icon-[lucide--library] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-950 dark:text-white">
+ Resources
+ </span>
+
+ <span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
+ Learn and get support
+ </span>
+ </span>
+ </span>
+
+ <span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'resources'" aria-hidden="true" ></span>
+ </button>
+
+ <div
+ id="mobile-resources-menu"
+ data-show="openSection === 'resources'"
+ class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
+ >
+ <div class="grid grid-cols-2 gap-2">
+ <a
+ href="/blog"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Blog
+ </a>
+
+ <a
+ href="/customers"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Customer stories
+ </a>
+
+ <a
+ href="/guides"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Guides
+ </a>
+
+ <a
+ href="/help"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Help center
+ </a>
+
+ <a
+ href="/security"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Security
+ </a>
+
+ <a
+ href="/trust"
+ class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
+ >
+ Trust center
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <!-- Direct links -->
+ <a
+ href="/pricing"
+ class="flex items-center justify-between rounded-2xl border border-slate-200 bg-white px-4 py-4 text-sm font-semibold text-slate-950 transition hover:border-indigo-300 hover:bg-indigo-50 dark:border-white/10 dark:bg-white/5 dark:text-white dark:hover:border-indigo-500 dark:hover:bg-indigo-500/10"
+ >
+ <span class="flex items-center gap-3">
+ <span
+ class="grid h-10 w-10 place-items-center rounded-xl bg-slate-100 text-slate-600 dark:bg-white/5 dark:text-slate-300"
+ >
+ <span class="icon-[lucide--badge-dollar-sign] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ Pricing
+ </span>
+
+ <span class="icon-[lucide--chevron-right] h-5 w-5 text-slate-400" aria-hidden="true" ></span>
+ </a>
+ </nav>
+
+ <!-- Mobile CTAs -->
+ <div class="mt-5 grid gap-3 border-t border-slate-200 pt-5 dark:border-white/10 sm:grid-cols-2">
+ <a
+ href="/sign-in"
+ class="flex h-12 items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white px-5 text-sm font-semibold text-slate-700 shadow-sm transition hover:border-indigo-300 hover:bg-slate-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500 dark:hover:bg-white/10 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--log-in] h-4 w-4" aria-hidden="true" ></span>
+
+ Sign in
+ </a>
+
+ <a
+ href="/sign-up"
+ class="group flex h-12 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
+ >
+ Start free
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <p class="mt-5 text-center text-xs leading-5 text-slate-400 dark:text-slate-500">
+ Secure identity infrastructure for modern applications.
+ </p>
+
+ </div>
+ </div>
+ }
+}
+Reusable public page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="PublicPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PublicPageShell.wrn
component PublicPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable public search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicSearch query="query" placeholder="Search..." label="Search" action="action" method="get" />Legacy mount name: data-component="PublicSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
query | string | Optional | "" |
placeholder | string | Optional | "Search..." |
label | string | Optional | "Search" |
action | string | Optional | "" |
method | string | Optional | "get" |
name | string | Optional | "q" |
buttonLabel | string | Optional | "" |
clearLabel | string | Optional | "Clear search" |
size | string | Optional | "default" |
centered | boolean | Optional | false |
fullWidth | boolean | Optional | false |
showShortcut | boolean | Optional | false |
shortcutLabel | string | Optional | "⌘ K" |
suggestions | string | Optional | [] |
This component does not declare a slot.
inputfocusblurclickInstalled source: components/PublicSearch.wrn
component PublicSearch {
+ props {
+ class: string = ""
+ query = ""
+
+ placeholder = "Search..."
+ label = "Search"
+
+ action = ""
+ method = "get"
+ name = "q"
+
+ buttonLabel = ""
+ clearLabel = "Clear search"
+
+ size = "default"
+ centered = false
+ fullWidth = false
+
+ showShortcut = false
+ shortcutLabel = "⌘ K"
+
+ suggestions = []
+ }
+
+ state searchValue = query
+ state focused = false
+
+ view {
+ <div
+ class="w-full {class}"
+ class:max-w-2xl="!fullWidth"
+ class:mx-auto="centered"
+ >
+ <form
+ action="{action}"
+ method="{method}"
+ role="search"
+ class="w-full"
+ >
+ <label
+ for="public-search-input"
+ class="sr-only"
+ >
+ {label}
+ </label>
+
+ <div
+ class=" group relative flex w-full items-center rounded-2xl border bg-white shadow-sm transition-all duration-200 dark:bg-white/5 {focused ? 'border-indigo-400 ring-4 ring-indigo-500/10 dark:border-indigo-500/50 dark:ring-indigo-500/10' : 'border-slate-200 hover:border-slate-300 dark:border-white/10 dark:hover:border-white/20' } {size === 'compact' ? 'min-h-11' : size === 'large' ? 'min-h-14' : 'min-h-12' } "
+ >
+ <!-- Search icon -->
+ <span class=" pointer-events-none absolute left-4 text-slate-400 transition group-focus-within:text-indigo-600 dark:text-slate-500 dark:group-focus-within:text-indigo-400 {size === 'large' ? 'h-5 w-5' : 'h-4.5 w-4.5'} icon-[lucide--search] " aria-hidden="true" ></span>
+
+ <!-- Input -->
+ <input
+ id="public-search-input"
+ type="search"
+ name="{name}"
+ value="{searchValue}"
+ placeholder="{placeholder}"
+ autocomplete="off"
+ @input="searchValue = event.target.value"
+ @focus="focused = true"
+ @blur="focused = false"
+ class=" min-w-0 flex-1 bg-transparent text-slate-950 outline-none placeholder:text-slate-400 dark:text-white dark:placeholder:text-slate-500 {size === 'compact' ? 'h-11 pl-11 pr-3 text-sm' : size === 'large' ? 'h-14 pl-12 pr-4 text-base' : 'h-12 pl-11 pr-4 text-sm' } "
+ />
+
+ <!-- Keyboard shortcut -->
+ <span
+ class="mr-3 hidden shrink-0 items-center rounded-md border border-slate-200 bg-slate-50 px-2 py-1 text-[11px] font-semibold text-slate-400 dark:border-white/10 dark:bg-white/5 dark:text-slate-500 sm:inline-flex"
+ class:hidden="!showShortcut || searchValue !== ''"
+ >
+ {shortcutLabel}
+ </span>
+
+ <!-- Clear button -->
+ <button
+ type="button"
+ @click="searchValue = ''"
+ aria-label="{clearLabel}"
+ class="mr-2 grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-400 transition hover:bg-slate-100 hover:text-slate-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:text-slate-500 dark:hover:bg-white/10 dark:hover:text-slate-200"
+ class:hidden="searchValue === ''"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+
+ <!-- Submit button -->
+ <button
+ type="submit"
+ class=" mr-1.5 shrink-0 items-center justify-center gap-2 rounded-xl bg-indigo-600 font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 {size === 'compact' ? 'h-9 px-3 text-xs' : size === 'large' ? 'h-11 px-5 text-sm' : 'h-10 px-4 text-sm' } "
+ class:hidden="buttonLabel === ''"
+ class:inline-flex="buttonLabel !== ''"
+ >
+ {buttonLabel}
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </form>
+
+ <!-- Suggested searches -->
+ <div
+ class="mt-4 flex flex-wrap items-center gap-2"
+ class:hidden="suggestions.length === 0"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ <span class="mr-1 text-xs font-medium text-slate-500 dark:text-slate-400">
+ Popular:
+ </span>
+
+ {#each suggestions.slice(0, 5) as suggestion}
+ <a
+ href="{suggestion.href}"
+ class="inline-flex items-center gap-1.5 rounded-full border border-slate-200 bg-white px-3 py-1.5 text-xs font-semibold text-slate-600 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-indigo-50 hover:text-indigo-700 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/10 dark:hover:text-indigo-300"
+ >
+ <span class="{suggestion.iconClass} h-3.5 w-3.5" aria-hidden="true" class:hidden="suggestion.iconClass === ''" ></span>
+
+ {suggestion.label}
+ </a>
+ {/each}
+ </div>
+ </div>
+ }
+}
+Reusable publish date time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PublishDateTimePicker label="PublishDateTime" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PublishDateTimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PublishDateTime" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PublishDateTimePicker.wrn
component PublishDateTimePicker {
+ props {
+ label = "PublishDateTime"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable push composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PushComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="PushComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PushComposer.wrn
component PushComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable push notification editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<PushNotificationEditor label="PushNotification" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="PushNotificationEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "PushNotification" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/PushNotificationEditor.wrn
component PushNotificationEditor {
+ props {
+ label = "PushNotification"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable qr code component.
Components are auto-discovered. Use the component directly in any .wrn view:
<QrCode eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="QrCode".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/QrCode.wrn
component QrCode {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable quantity input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<QuantityInput label="Quantity" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="QuantityInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Quantity" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/QuantityInput.wrn
component QuantityInput {
+ props {
+ label = "Quantity"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable quantity stepper component.
Components are auto-discovered. Use the component directly in any .wrn view:
<QuantityStepper eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="QuantityStepper".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/QuantityStepper.wrn
component QuantityStepper {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable quiet hours picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<QuietHoursPicker label="Quiet hours" startName="quietStart" endName="quietEnd" start="22:00" end="08:00" />Legacy mount name: data-component="QuietHoursPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Quiet hours" |
startName | string | Optional | "quietStart" |
endName | string | Optional | "quietEnd" |
start | string | Optional | "22:00" |
end | string | Optional | "08:00" |
timezone | string | Optional | "UTC" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/QuietHoursPicker.wrn
component QuietHoursPicker {
+ props {
+ label = "Quiet hours"
+ startName = "quietStart"
+ endName = "quietEnd"
+ start = "22:00"
+ end = "08:00"
+ timezone = "UTC"
+ disabled = false
+ class = ""
+ }
+ view {
+ <fieldset class="wire-fieldset {class}" disabled="{disabled}"><legend class="wire-label">{label}</legend><div class="wire-form-row"><label class="wire-field"><span class="wire-label">From</span><input type="time" name="{startName}" value="{start}" class="wire-input" /></label><label class="wire-field"><span class="wire-label">Until</span><input type="time" name="{endName}" value="{end}" class="wire-input" /></label></div><p class="wire-field-message wire-field-message--help">Timezone: {timezone}</p></fieldset>
+ }
+}
+Reusable quote text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<QuoteText text="text" align="start" />Legacy mount name: data-component="QuoteText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/QuoteText.wrn
component QuoteText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--lead wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable radio group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RadioGroup label="Choose one" name="choice" />Legacy mount name: data-component="RadioGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Choose one" |
name | string | Optional | "choice" |
defaultThis component does not declare a custom event.
Installed source: components/RadioGroup.wrn
component RadioGroup {
+ props {
+ class = ""
+ label = "Choose one"
+ name = "choice"
+ }
+ view {
+ <fieldset class="space-y-3 {class}"><legend class="text-sm font-semibold text-slate-900 dark:text-white">{label}</legend><div class="space-y-2"><slot /></div></fieldset>
+ }
+}
+Reusable radio component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Radio id="id" name="choice" value="value" label="Option" description="description" />Legacy mount name: data-component="Radio".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "choice" |
value | string | Optional | "" |
label | string | Optional | "Option" |
description | string | Optional | "" |
checked | boolean | Optional | false |
disabled | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Radio.wrn
component Radio {
+ props {
+ class = ""
+ id = ""
+ name = "choice"
+ value = ""
+ label = "Option"
+ description = ""
+ checked = false
+ disabled = false
+ }
+ view {
+ <label for="{id}" class="flex min-h-11 cursor-pointer items-start gap-3 rounded-xl border border-slate-200 p-3 transition hover:border-violet-400 dark:border-slate-800 {class}"><input id="{id}" name="{name}" type="radio" value="{value}" checked="{checked}" disabled="{disabled}" class="mt-0.5 size-5 border-slate-300 text-violet-600 focus:ring-violet-500" /><span><span class="block text-sm font-semibold">{label}</span><span data-show="description" class="text-sm text-slate-500">{description}</span></span></label>
+ }
+}
+Reusable range input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RangeInput label="Range" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RangeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Range" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RangeInput.wrn
component RangeInput {
+ props {
+ label = "Range"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable range slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RangeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RangeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RangeSlider.wrn
component RangeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable rate limit input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RateLimitInput label="RateLimit" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RateLimitInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RateLimit" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RateLimitInput.wrn
component RateLimitInput {
+ props {
+ label = "RateLimit"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable rate limit page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RateLimitPage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RateLimitPage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RateLimitPage.wrn
component RateLimitPage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable rate limited state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RateLimitedState label="RateLimited" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="RateLimitedState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RateLimited" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RateLimitedState.wrn
component RateLimitedState {
+ props {
+ label = "RateLimited"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable rate table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RateTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="RateTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RateTable.wrn
component RateTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable rating slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RatingSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RatingSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RatingSlider.wrn
component RatingSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable recipient selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RecipientSelector label="Recipient" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RecipientSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Recipient" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RecipientSelector.wrn
component RecipientSelector {
+ props {
+ label = "Recipient"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable recovery code form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RecoveryCodeForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RecoveryCodeForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RecoveryCodeForm.wrn
component RecoveryCodeForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable recovery code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RecoveryCodeInput label="RecoveryCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RecoveryCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RecoveryCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RecoveryCodeInput.wrn
component RecoveryCodeInput {
+ props {
+ label = "RecoveryCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable recurrence rule builder component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RecurrenceRuleBuilder eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RecurrenceRuleBuilder".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RecurrenceRuleBuilder.wrn
component RecurrenceRuleBuilder {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable recurring schedule picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RecurringSchedulePicker id="recurring-schedule" name="recurrence" label="Repeat" value="none" disabled="false" />Legacy mount name: data-component="RecurringSchedulePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "recurring-schedule" |
name | string | Optional | "recurrence" |
label | string | Optional | "Repeat" |
value | string | Optional | "none" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/RecurringSchedulePicker.wrn
component RecurringSchedulePicker {
+ props {
+ id = "recurring-schedule"
+ name = "recurrence"
+ label = "Repeat"
+ value = "none"
+ disabled = false
+ class = ""
+ }
+ view {
+ <div class="wire-field {class}"><label for="{id}" class="wire-label">{label}</label><select id="{id}" name="{name}" disabled="{disabled}" class="wire-input"><option value="none" selected="{value === 'none'}">Does not repeat</option><option value="daily" selected="{value === 'daily'}">Daily</option><option value="weekly" selected="{value === 'weekly'}">Weekly</option><option value="monthly" selected="{value === 'monthly'}">Monthly</option><option value="yearly" selected="{value === 'yearly'}">Yearly</option></select></div>
+ }
+}
+Reusable redirect uri input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RedirectUriInput label="RedirectUri" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RedirectUriInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RedirectUri" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RedirectUriInput.wrn
component RedirectUriInput {
+ props {
+ label = "RedirectUri"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable reference input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ReferenceInput label="Reference" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ReferenceInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Reference" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ReferenceInput.wrn
component ReferenceInput {
+ props {
+ label = "Reference"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable regex input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegexInput label="Regex" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RegexInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Regex" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegexInput.wrn
component RegexInput {
+ props {
+ label = "Regex"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable region availability table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegionAvailabilityTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="RegionAvailabilityTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegionAvailabilityTable.wrn
component RegionAvailabilityTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable region selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegionSelector label="Region" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RegionSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Region" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegionSelector.wrn
component RegionSelector {
+ props {
+ label = "Region"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable region unavailable alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegionUnavailableAlert label="RegionUnavailable" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="RegionUnavailableAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RegionUnavailable" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegionUnavailableAlert.wrn
component RegionUnavailableAlert {
+ props {
+ label = "RegionUnavailable"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable region unavailable state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegionUnavailableState label="RegionUnavailable" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="RegionUnavailableState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RegionUnavailable" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegionUnavailableState.wrn
component RegionUnavailableState {
+ props {
+ label = "RegionUnavailable"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable regional privacy banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RegionalPrivacyBanner label="RegionalPrivacy" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="RegionalPrivacyBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RegionalPrivacy" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RegionalPrivacyBanner.wrn
component RegionalPrivacyBanner {
+ props {
+ label = "RegionalPrivacy"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable reject optional cookies button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RejectOptionalCookiesButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="RejectOptionalCookiesButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RejectOptionalCookiesButton.wrn
component RejectOptionalCookiesButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable reopen cookie settings button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ReopenCookieSettingsButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ReopenCookieSettingsButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ReopenCookieSettingsButton.wrn
component ReopenCookieSettingsButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable report card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ReportCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ReportCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ReportCard.wrn
component ReportCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable request response viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RequestResponseViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RequestResponseViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RequestResponseViewer.wrn
component RequestResponseViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable request viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RequestViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="RequestViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RequestViewer.wrn
component RequestViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable required indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RequiredIndicator label="Required" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="RequiredIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Required" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RequiredIndicator.wrn
component RequiredIndicator {
+ props {
+ label = "Required"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable reset password form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResetPasswordForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ResetPasswordForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResetPasswordForm.wrn
component ResetPasswordForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable resizable panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResizablePanel eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ResizablePanel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResizablePanel.wrn
component ResizablePanel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable resource card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourceCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ResourceCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResourceCard.wrn
component ResourceCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable resource download card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourceDownloadCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ResourceDownloadCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResourceDownloadCard.wrn
component ResourceDownloadCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable resource page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourcePageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ResourcePageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResourcePageShell.wrn
component ResourcePageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable resource search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourceSearch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ResourceSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResourceSearch.wrn
component ResourceSearch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable resource type badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourceTypeBadge label="ResourceType" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ResourceTypeBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ResourceType" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResourceTypeBadge.wrn
component ResourceTypeBadge {
+ props {
+ label = "ResourceType"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable resources mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResourcesMegaMenu />Legacy mount name: data-component="ResourcesMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/ResourcesMegaMenu.wrn
component ResourcesMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+ <div
+ class="border-t border-slate-200 bg-white shadow-2xl shadow-slate-950/10 dark:border-white/10 dark:bg-slate-950 dark:shadow-black/30 {class}"
+ >
+ <div class="mx-auto max-w-7xl px-6 py-8 lg:px-10">
+ <div class="grid gap-8 lg:grid-cols-[minmax(0,1.55fr)_minmax(18rem,0.8fr)]">
+
+ <!-- Resource links -->
+ <section>
+ <div class="mb-5 flex items-end justify-between gap-6">
+ <div>
+ <p class="text-xs font-semibold uppercase tracking-[0.16em] text-indigo-600 dark:text-indigo-400">
+ Resources
+ </p>
+
+ <h2 class="mt-2 text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ Learn, build, and get support
+ </h2>
+
+ <p class="mt-1 text-sm text-slate-500 dark:text-slate-400">
+ Explore practical guides, customer stories, product updates,
+ and security resources.
+ </p>
+ </div>
+
+ <a
+ href="/resources"
+ class="group hidden items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300 xl:inline-flex"
+ >
+ View all resources
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <div class="grid gap-2 md:grid-cols-2">
+
+ <!-- Blog -->
+ <a
+ href="/blog"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-indigo-200 hover:bg-indigo-50 dark:hover:border-indigo-500/20 dark:hover:bg-indigo-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 transition group-hover:bg-indigo-600 group-hover:text-white dark:bg-indigo-500/15 dark:text-indigo-300 dark:group-hover:bg-indigo-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--newspaper] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Blog
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-indigo-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-indigo-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Product updates, engineering insights, identity trends, and
+ company news.
+ </span>
+ </span>
+ </a>
+
+ <!-- Customer stories -->
+ <a
+ href="/customers"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-violet-200 hover:bg-violet-50 dark:hover:border-violet-500/20 dark:hover:bg-violet-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-violet-100 text-violet-700 transition group-hover:bg-violet-600 group-hover:text-white dark:bg-violet-500/15 dark:text-violet-300 dark:group-hover:bg-violet-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--users-round] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Customer stories
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-violet-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-violet-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ See how teams use WRNexusJS to secure and scale their
+ applications.
+ </span>
+ </span>
+ </a>
+
+ <!-- Guides -->
+ <a
+ href="/guides"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-cyan-200 hover:bg-cyan-50 dark:hover:border-cyan-500/20 dark:hover:bg-cyan-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-cyan-100 text-cyan-700 transition group-hover:bg-cyan-600 group-hover:text-white dark:bg-cyan-500/15 dark:text-cyan-300 dark:group-hover:bg-cyan-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--book-marked] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Guides
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-cyan-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-cyan-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Practical identity, security, SaaS, and architecture
+ walkthroughs.
+ </span>
+ </span>
+ </a>
+
+ <!-- Help center -->
+ <a
+ href="/help"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-emerald-200 hover:bg-emerald-50 dark:hover:border-emerald-500/20 dark:hover:bg-emerald-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-emerald-100 text-emerald-700 transition group-hover:bg-emerald-600 group-hover:text-white dark:bg-emerald-500/15 dark:text-emerald-300 dark:group-hover:bg-emerald-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--circle-help] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Help center
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-emerald-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-emerald-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Find answers for account, workspace, billing, and security
+ questions.
+ </span>
+ </span>
+ </a>
+
+ <!-- Security -->
+ <a
+ href="/security"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-amber-200 hover:bg-amber-50 dark:hover:border-amber-500/20 dark:hover:bg-amber-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-amber-100 text-amber-700 transition group-hover:bg-amber-600 group-hover:text-white dark:bg-amber-500/15 dark:text-amber-300 dark:group-hover:bg-amber-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--shield-check] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Security
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-amber-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-amber-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Learn how WRNexusJS protects accounts, sessions, and
+ organizations.
+ </span>
+ </span>
+ </a>
+
+ <!-- Trust center -->
+ <a
+ href="/trust"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-rose-200 hover:bg-rose-50 dark:hover:border-rose-500/20 dark:hover:bg-rose-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-rose-100 text-rose-700 transition group-hover:bg-rose-600 group-hover:text-white dark:bg-rose-500/15 dark:text-rose-300 dark:group-hover:bg-rose-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--badge-check] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Trust center
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-rose-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-rose-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Review compliance, privacy, infrastructure, and operational
+ controls.
+ </span>
+ </span>
+ </a>
+ </div>
+
+ <a
+ href="/resources"
+ class="mt-4 flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/15 xl:hidden"
+ >
+ View all resources
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ </section>
+
+ <!-- Featured resource -->
+ <aside
+ class="relative overflow-hidden rounded-3xl border border-indigo-200 bg-linear-to-br from-indigo-50 via-white to-cyan-50 p-6 dark:border-indigo-500/20 dark:from-indigo-500/10 dark:via-slate-900 dark:to-cyan-500/10"
+ >
+ <div aria-hidden="true" class="absolute -right-16 -top-16 h-40 w-40 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div aria-hidden="true" class="absolute -bottom-20 -left-16 h-40 w-40 rounded-full bg-cyan-300/30 blur-3xl dark:bg-cyan-500/10" ></div>
+
+ <div class="relative">
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-white/80 px-3 py-1.5 text-xs font-semibold text-indigo-700 backdrop-blur-sm dark:border-indigo-500/20 dark:bg-white/5 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--sparkles] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ Featured guide
+ </span>
+
+ <div
+ class="mt-5 grid h-12 w-12 place-items-center rounded-2xl bg-indigo-600 text-white shadow-lg shadow-indigo-600/20"
+ >
+ <span class="icon-[lucide--book-open-check] h-6 w-6" aria-hidden="true" ></span>
+ </div>
+
+ <h3 class="mt-5 text-xl font-bold tracking-tight text-slate-950 dark:text-white">
+ The modern SaaS identity checklist
+ </h3>
+
+ <p class="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
+ A practical checklist covering authentication, organizations,
+ permissions, MFA, recovery, sessions, and enterprise SSO.
+ </p>
+
+ <div class="mt-5 space-y-3">
+ <div class="flex items-center gap-3">
+ <span
+ class="grid h-7 w-7 shrink-0 place-items-center rounded-full bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--check] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span class="text-sm text-slate-700 dark:text-slate-300">
+ Secure authentication foundations
+ </span>
+ </div>
+
+ <div class="flex items-center gap-3">
+ <span
+ class="grid h-7 w-7 shrink-0 place-items-center rounded-full bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--check] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span class="text-sm text-slate-700 dark:text-slate-300">
+ Multi-tenant organization design
+ </span>
+ </div>
+
+ <div class="flex items-center gap-3">
+ <span
+ class="grid h-7 w-7 shrink-0 place-items-center rounded-full bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--check] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span class="text-sm text-slate-700 dark:text-slate-300">
+ Recovery and account protection
+ </span>
+ </div>
+ </div>
+
+ <a
+ href="/guides/saas-identity-checklist"
+ class="group mt-6 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-indigo-600 px-4 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Read the guide
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+
+ <div class="mt-4 flex items-center justify-center gap-4 text-xs text-slate-500 dark:text-slate-400">
+ <span class="inline-flex items-center gap-1.5">
+ <span class="icon-[lucide--clock-3] h-4 w-4" aria-hidden="true" ></span>
+
+ 12 min read
+ </span>
+
+ <span class="inline-flex items-center gap-1.5">
+ <span class="icon-[lucide--download] h-4 w-4" aria-hidden="true" ></span>
+
+ PDF available
+ </span>
+ </div>
+ </div>
+ </aside>
+ </div>
+
+ <!-- Bottom resource links -->
+ <div
+ class="mt-7 flex flex-wrap items-center justify-between gap-4 border-t border-slate-200 pt-5 dark:border-white/10"
+ >
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3">
+ <a
+ href="/webinars"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--presentation] h-4 w-4" aria-hidden="true" ></span>
+
+ Webinars
+ </a>
+
+ <a
+ href="/events"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--calendar-days] h-4 w-4" aria-hidden="true" ></span>
+
+ Events
+ </a>
+
+ <a
+ href="/reports"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--file-chart-column] h-4 w-4" aria-hidden="true" ></span>
+
+ Reports
+ </a>
+
+ <a
+ href="/newsletter"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--mail-plus] h-4 w-4" aria-hidden="true" ></span>
+
+ Newsletter
+ </a>
+ </div>
+
+ <a
+ href="/contact"
+ class="group inline-flex items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ Contact our team
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ }
+}
+Reusable response viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResponseViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ResponseViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResponseViewer.wrn
component ResponseViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable responsible disclosure c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResponsibleDisclosureCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ResponsibleDisclosureCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResponsibleDisclosureCTA.wrn
component ResponsibleDisclosureCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable responsive table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResponsiveTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ResponsiveTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResponsiveTable.wrn
component ResponsiveTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable results section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ResultsSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ResultsSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ResultsSection.wrn
component ResultsSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable retention table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RetentionTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="RetentionTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RetentionTable.wrn
component RetentionTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable retry count input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RetryCountInput label="RetryCount" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RetryCountInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RetryCount" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RetryCountInput.wrn
component RetryCountInput {
+ props {
+ label = "RetryCount"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable revenue chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RevenueChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="RevenueChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RevenueChart.wrn
component RevenueChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable rgb color input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RgbColorInput label="RgbColor" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RgbColorInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RgbColor" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RgbColorInput.wrn
component RgbColorInput {
+ props {
+ label = "RgbColor"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable rich text editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RichTextEditor label="RichText" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RichTextEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RichText" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RichTextEditor.wrn
component RichTextEditor {
+ props {
+ label = "RichText"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable rich text input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RichTextInput label="RichText" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RichTextInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RichText" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RichTextInput.wrn
component RichTextInput {
+ props {
+ label = "RichText"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable role selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RoleSelector label="Role" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RoleSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Role" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RoleSelector.wrn
component RoleSelector {
+ props {
+ label = "Role"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable rolling date range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<RollingDateRangePicker label="RollingDateRange" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="RollingDateRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "RollingDateRange" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/RollingDateRangePicker.wrn
component RollingDateRangePicker {
+ props {
+ label = "RollingDateRange"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable save cookie preferences button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SaveCookiePreferencesButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SaveCookiePreferencesButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SaveCookiePreferencesButton.wrn
component SaveCookiePreferencesButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable saved filter selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SavedFilterSelector label="SavedFilter" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SavedFilterSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SavedFilter" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SavedFilterSelector.wrn
component SavedFilterSelector {
+ props {
+ label = "SavedFilter"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable schedule message picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ScheduleMessagePicker label="ScheduleMessage" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ScheduleMessagePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ScheduleMessage" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ScheduleMessagePicker.wrn
component ScheduleMessagePicker {
+ props {
+ label = "ScheduleMessage"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable schedule picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SchedulePicker label="Schedule" />Legacy mount name: data-component="SchedulePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Schedule" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/SchedulePicker.wrn
component SchedulePicker {
+ props {
+ class = ""
+ label = "Schedule"
+ }
+ view {
+ <fieldset class="space-y-4 rounded-2xl border border-slate-200 p-5 dark:border-slate-800 {class}"><legend class="px-2 font-semibold">{label}</legend><DateTimeInput id="scheduleAt" name="scheduleAt" label="Date and time" /><TimezoneSelector /></fieldset>
+ }
+}
+Reusable scheduled date time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ScheduledDateTimePicker label="ScheduledDateTime" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ScheduledDateTimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ScheduledDateTime" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ScheduledDateTimePicker.wrn
component ScheduledDateTimePicker {
+ props {
+ label = "ScheduledDateTime"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable screenshot frame component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ScreenshotFrame eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="ScreenshotFrame".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ScreenshotFrame.wrn
component ScreenshotFrame {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable scroll area component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ScrollArea />Legacy mount name: data-component="ScrollArea".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ScrollArea.wrn
component ScrollArea {
+ props {
+ class = ""
+ }
+ view { <div class="wire-scroll-area {class}"><slot /></div> }
+}
+Reusable sdk language selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SdkLanguageSelector label="SdkLanguage" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SdkLanguageSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SdkLanguage" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SdkLanguageSelector.wrn
component SdkLanguageSelector {
+ props {
+ label = "SdkLanguage"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable s d k card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SDKCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SDKCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SDKCard.wrn
component SDKCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable s d k language tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SDKLanguageTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SDKLanguageTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SDKLanguageTabs.wrn
component SDKLanguageTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable sdktabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SDKTabs label="SDK languages" tabs="[]" defaultIndex="0" />Legacy mount name: data-component="SDKTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SDK languages" |
tabs | string | Optional | [] |
defaultIndex | number | Optional | 0 |
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/SDKTabs.wrn
component SDKTabs {
+ props {
+ label = "SDK languages"
+ tabs = []
+ defaultIndex = 0
+ class = ""
+ }
+ state active = defaultIndex
+ view { <section class="wire-sdk-tabs {class}"><div role="tablist" aria-label="{label}" class="wire-tabs">{#each tabs as tab, index}<button type="button" role="tab" aria-selected="{active === index}" class="wire-tab" @click="active = index">{tab.label}</button>{/each}</div>{#each tabs as tab, index}<div role="tabpanel" data-show="active === index" class="wire-sdk-tabs__panel"><pre><code>{tab.code}</code></pre></div>{/each}</section> }
+}
+Reusable search button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SearchButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchButton.wrn
component SearchButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable search category tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchCategoryTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SearchCategoryTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchCategoryTabs.wrn
component SearchCategoryTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable search dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="SearchDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchDialog.wrn
component SearchDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable search empty state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchEmptyState label="SearchEmpty" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="SearchEmptyState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SearchEmpty" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchEmptyState.wrn
component SearchEmptyState {
+ props {
+ label = "SearchEmpty"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable search input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchInput id="id" name="name" label="Search" value="value" placeholder="placeholder" />Legacy mount name: data-component="SearchInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Search" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/SearchInput.wrn
component SearchInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Search"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="search" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable search loading state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchLoadingState label="SearchLoading" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="SearchLoadingState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SearchLoading" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchLoadingState.wrn
component SearchLoadingState {
+ props {
+ label = "SearchLoading"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable search result item component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SearchResultItem eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SearchResultItem".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SearchResultItem.wrn
component SearchResultItem {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable second picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecondPicker label="Second" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SecondPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Second" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecondPicker.wrn
component SecondPicker {
+ props {
+ label = "Second"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable secondary button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecondaryButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="SecondaryButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecondaryButton.wrn
component SecondaryButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--default {class}">{label}<slot /></button> }
+}
+Reusable secret display component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecretDisplay eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SecretDisplay".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecretDisplay.wrn
component SecretDisplay {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable secret input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecretInput label="Secret" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SecretInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Secret" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecretInput.wrn
component SecretInput {
+ props {
+ label = "Secret"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable secret reveal dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecretRevealDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="SecretRevealDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecretRevealDialog.wrn
component SecretRevealDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable section actions component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SectionActions label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SectionActions".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SectionActions.wrn
component SectionActions {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable section header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SectionHeader eyebrow="eyebrow" title="Section title" description="description" align="left" />Legacy mount name: data-component="SectionHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
eyebrow | string | Optional | "" |
title | string | Optional | "Section title" |
description | string | Optional | "" |
align | string | Optional | "left" |
defaultThis component does not declare a custom event.
Installed source: components/SectionHeader.wrn
component SectionHeader {
+ props {
+ class = ""
+ eyebrow = ""
+ title = "Section title"
+ description = ""
+ align = "left"
+ }
+ view {
+ <header class="max-w-3xl {align === 'center' ? 'mx-auto text-center' : ''} {class}"><p data-show="eyebrow" class="mb-3 text-sm font-bold uppercase tracking-[0.18em] text-violet-600 dark:text-violet-400">{eyebrow}</p><h2 class="text-3xl font-bold tracking-tight text-slate-950 sm:text-4xl dark:text-white">{title}</h2><p data-show="description" class="mt-4 text-lg leading-8 text-slate-600 dark:text-slate-300">{description}</p><div class="mt-6"><slot /></div></header>
+ }
+}
+Reusable section heading component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SectionHeading text="text" align="start" />Legacy mount name: data-component="SectionHeading".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SectionHeading.wrn
component SectionHeading {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--heading wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Section id="id" size="default" surface="default" />Legacy mount name: data-component="Section".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "" |
size | string | Optional | "default" |
surface | string | Optional | "default" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Section.wrn
component Section {
+ props {
+ id = ""
+ size = "default"
+ surface = "default"
+ className = ""
+ }
+ view {
+ <section id="{id}" class="{size === 'compact' ? 'py-10 sm:py-14' : size === 'spacious' ? 'py-20 sm:py-28' : 'py-14 sm:py-20'} {surface === 'muted' ? 'bg-slate-50 dark:bg-slate-900/50' : surface === 'brand' ? 'bg-violet-600 text-white' : ''} {className}"><slot /></section>
+ }
+}
+Reusable security alert component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityAlert label="Security" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="SecurityAlert".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Security" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityAlert.wrn
component SecurityAlert {
+ props {
+ label = "Security"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable security contact card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityContactCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SecurityContactCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityContactCard.wrn
component SecurityContactCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable security feature card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityFeatureCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SecurityFeatureCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityFeatureCard.wrn
component SecurityFeatureCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable security hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SecurityHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityHero.wrn
component SecurityHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable security pillar grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityPillarGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="SecurityPillarGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityPillarGrid.wrn
component SecurityPillarGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable security practice list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityPracticeList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="SecurityPracticeList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityPracticeList.wrn
component SecurityPracticeList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable security report form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SecurityReportForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SecurityReportForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SecurityReportForm.wrn
component SecurityReportForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable select component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Select id="id" name="name" label="Select" help="help" error="error" />Legacy mount name: data-component="Select".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Select" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
defaultThis component does not declare a custom event.
Installed source: components/Select.wrn
component Select {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Select"
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ }
+ view {
+ <div class="space-y-2 {class}"><label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label><select id="{id}" name="{name}" required="{required}" disabled="{disabled}" class="min-h-11 w-full rounded-xl border border-slate-300 bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 dark:border-slate-700 dark:bg-slate-950 dark:text-white"><slot /></select><p data-show="help && !error" class="text-sm text-slate-500">{help}</p><p data-show="error" role="alert" class="text-sm font-medium text-red-600">{error}</p></div>
+ }
+}
+Reusable sender id input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SenderIdInput label="SenderId" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SenderIdInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SenderId" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SenderIdInput.wrn
component SenderIdInput {
+ props {
+ label = "SenderId"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable server error page component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ServerErrorPage eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ServerErrorPage".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ServerErrorPage.wrn
component ServerErrorPage {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable service level table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ServiceLevelTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ServiceLevelTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ServiceLevelTable.wrn
component ServiceLevelTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable service status badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ServiceStatusBadge label="ServiceStatus" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="ServiceStatusBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ServiceStatus" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ServiceStatusBadge.wrn
component ServiceStatusBadge {
+ props {
+ label = "ServiceStatus"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable service status list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ServiceStatusList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ServiceStatusList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ServiceStatusList.wrn
component ServiceStatusList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable service status row component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ServiceStatusRow title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ServiceStatusRow".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ServiceStatusRow.wrn
component ServiceStatusRow {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable session card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SessionCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SessionCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SessionCard.wrn
component SessionCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable session expired dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SessionExpiredDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="SessionExpiredDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SessionExpiredDialog.wrn
component SessionExpiredDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable setup checklist component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SetupChecklist eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SetupChecklist".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SetupChecklist.wrn
component SetupChecklist {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable severity selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SeveritySelector label="Severity" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SeveritySelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Severity" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SeveritySelector.wrn
component SeveritySelector {
+ props {
+ label = "Severity"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable shadow picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ShadowPicker label="Shadow" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ShadowPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Shadow" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ShadowPicker.wrn
component ShadowPicker {
+ props {
+ label = "Shadow"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable share action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ShareAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ShareAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ShareAction.wrn
component ShareAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable share button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ShareButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="ShareButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ShareButton.wrn
component ShareButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--default {class}">{label}<slot /></button> }
+}
+Reusable side panel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SidePanel eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SidePanel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SidePanel.wrn
component SidePanel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable sidebar layout component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SidebarLayout />Legacy mount name: data-component="SidebarLayout".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SidebarLayout.wrn
component SidebarLayout {
+ props {
+ class = ""
+ }
+ view { <div class="wire-sidebar-layout {class}"><slot /></div> }
+}
+Reusable sign in form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SignInForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SignInForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SignInForm.wrn
component SignInForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable sign in link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SignInLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SignInLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SignInLink.wrn
component SignInLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable sign up form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SignUpForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SignUpForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SignUpForm.wrn
component SignUpForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable site search component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SiteSearch eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SiteSearch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SiteSearch.wrn
component SiteSearch {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable skeleton component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Skeleton height="4" rounded="lg" />Legacy mount name: data-component="Skeleton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
height | string | Optional | "4" |
rounded | string | Optional | "lg" |
className | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Skeleton.wrn
component Skeleton {
+ props {
+ height = "4"
+ rounded = "lg"
+ className = ""
+ }
+ view {
+ <div aria-hidden="true" class="animate-pulse bg-slate-200 dark:bg-slate-800 h-{height} rounded-{rounded} {className}"></div>
+ }
+}
+Reusable skip link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SkipLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SkipLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SkipLink.wrn
component SkipLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable sla table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SlaTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="SlaTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SlaTable.wrn
component SlaTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Slider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Slider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Slider.wrn
component Slider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable slug input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SlugInput label="Slug" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SlugInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Slug" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SlugInput.wrn
component SlugInput {
+ props {
+ label = "Slug"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable small text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SmallText text="text" align="start" />Legacy mount name: data-component="SmallText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SmallText.wrn
component SmallText {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--small wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable smart route diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SmartRouteDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="SmartRouteDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SmartRouteDiagram.wrn
component SmartRouteDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable sms composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SmsComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SmsComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SmsComposer.wrn
component SmsComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable sms message editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SmsMessageEditor label="SmsMessage" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SmsMessageEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SmsMessage" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SmsMessageEditor.wrn
component SmsMessageEditor {
+ props {
+ label = "SmsMessage"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable sms segment counter component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SmsSegmentCounter label="SmsSegment" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="SmsSegmentCounter".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "SmsSegment" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SmsSegmentCounter.wrn
component SmsSegmentCounter {
+ props {
+ label = "SmsSegment"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable social share component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SocialShare title="Share this page" description="description" url="url" shareText="shareText" centered="false" />Legacy mount name: data-component="SocialShare".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Share this page" |
description | string | Optional | "" |
url | string | Optional | "" |
shareText | string | Optional | "" |
centered | boolean | Optional | false |
compact | boolean | Optional | false |
showTitle | boolean | Optional | true |
showCopy | boolean | Optional | true |
networks | string | Optional | [] |
This component does not declare a slot.
clickInstalled source: components/SocialShare.wrn
component SocialShare {
+ props {
+ class: string = ""
+ title = "Share this page"
+ description = ""
+
+ url = ""
+ shareText = ""
+
+ centered = false
+ compact = false
+ showTitle = true
+ showCopy = true
+
+ networks = []
+ }
+
+ state copied = false
+
+ view {
+ <aside
+ aria-labelledby="social-share-title"
+ class="w-full {class}"
+ >
+ <div
+ class=" relative overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.03] "
+ >
+ <!-- Subtle background -->
+ <div
+ aria-hidden="true"
+ class="pointer-events-none absolute inset-0 overflow-hidden"
+ >
+ <div class="absolute -right-16 -top-20 h-40 w-40 rounded-full bg-indigo-200/25 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div class="absolute inset-x-0 top-0 h-px bg-linear-to-r from-transparent via-indigo-300/60 to-transparent dark:via-indigo-500/20" ></div>
+ </div>
+
+ <div
+ class="relative"
+ class:p-4="compact"
+ class:sm:p-5="compact"
+ class:p-5="!compact"
+ class:sm:p-6="!compact"
+ >
+ <div
+ class="gap-4"
+ class:flex="centered"
+ class:flex-col="centered"
+ class:items-center="centered"
+ class:text-center="centered"
+ class:flex="!centered"
+ class:flex-col="!centered"
+ class:sm:flex-row="!centered"
+ class:sm:items-center="!centered"
+ class:sm:justify-between="!centered"
+ >
+ <!-- Heading -->
+ <div
+ class="min-w-0"
+ class:hidden="!showTitle"
+ >
+ <h2
+ id="social-share-title"
+ class="font-bold tracking-tight text-slate-950 dark:text-white"
+ class:text-sm="compact"
+ class:text-base="!compact"
+ >
+ {title}
+ </h2>
+
+ <p
+ class="mt-1 text-sm leading-6 text-slate-500 dark:text-slate-400"
+ class:hidden="description === '' || compact"
+ >
+ {description}
+ </p>
+ </div>
+
+ <!-- Share buttons -->
+ <div
+ class="flex flex-wrap items-center gap-2"
+ class:justify-center="centered"
+ class:justify-start="!centered"
+ >
+ {#each networks.slice(0, 5) as network}
+ <a
+ href="{network.href}"
+ target="_blank"
+ rel="noopener noreferrer"
+ aria-label="Share on {network.label}"
+ title="Share on {network.label}"
+ class=" group inline-flex items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white text-sm font-semibold text-slate-600 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-indigo-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/10 dark:hover:text-indigo-300 "
+ class:h-9="compact"
+ class:w-9="compact"
+ class:h-10="!compact"
+ class:px-3="!compact"
+ >
+ <span class="{network.iconClass} h-4 w-4" aria-hidden="true" ></span>
+
+ <span class:hidden="compact">
+ {network.label}
+ </span>
+ </a>
+ {/each}
+
+ <!-- Copy link -->
+ <button
+ type="button"
+ @click=" navigator.clipboard.writeText(url); copied = true; "
+ aria-label="{copied ? 'Link copied' : 'Copy page link'}"
+ class=" group inline-flex items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white text-sm font-semibold text-slate-600 shadow-sm transition hover:-translate-y-0.5 hover:border-indigo-300 hover:bg-indigo-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/10 dark:hover:text-indigo-300 "
+ class:hidden="!showCopy"
+ class:h-9="compact"
+ class:w-9="compact"
+ class:h-10="!compact"
+ class:px-3="!compact"
+ >
+ <span class="icon-[lucide--copy] h-4 w-4" class:hidden="copied" aria-hidden="true" ></span>
+
+ <span class="icon-[lucide--check] h-4 w-4" class:hidden="!copied" aria-hidden="true" ></span>
+
+ <span class:hidden="compact">
+ {copied ? 'Copied' : 'Copy link'}
+ </span>
+ </button>
+ </div>
+ </div>
+
+ <!-- Copy feedback -->
+ <div
+ role="status"
+ aria-live="polite"
+ class="mt-3 rounded-xl bg-emerald-50 px-3 py-2 text-sm font-medium text-emerald-700 ring-1 ring-inset ring-emerald-200 dark:bg-emerald-500/10 dark:text-emerald-300 dark:ring-emerald-500/20"
+ class:hidden="!copied"
+ class:text-center="centered"
+ >
+ Page link copied to your clipboard.
+ </div>
+ </div>
+ </div>
+ </aside>
+ }
+}
+Reusable solution hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SolutionHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SolutionHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SolutionHero.wrn
component SolutionHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable solution page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SolutionPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SolutionPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SolutionPageShell.wrn
component SolutionPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable solution section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SolutionSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SolutionSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SolutionSection.wrn
component SolutionSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable solutions mega menu component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SolutionsMegaMenu />Legacy mount name: data-component="SolutionsMegaMenu".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/SolutionsMegaMenu.wrn
component SolutionsMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+ <div
+ class="border-t border-slate-200 bg-white shadow-2xl shadow-slate-950/10 dark:border-white/10 dark:bg-slate-950 dark:shadow-black/30 {class}"
+ >
+ <div class="mx-auto max-w-7xl px-6 py-8 lg:px-10">
+ <div class="grid gap-8 lg:grid-cols-[minmax(0,1.6fr)_minmax(18rem,0.75fr)]">
+
+ <!-- Solution links -->
+ <section>
+ <div class="mb-5 flex items-end justify-between gap-6">
+ <div>
+ <p class="text-xs font-semibold uppercase tracking-[0.16em] text-indigo-600 dark:text-indigo-400">
+ Solutions
+ </p>
+
+ <h2 class="mt-2 text-lg font-bold tracking-tight text-slate-950 dark:text-white">
+ Identity infrastructure for every stage of growth
+ </h2>
+
+ <p class="mt-1 text-sm text-slate-500 dark:text-slate-400">
+ Choose a solution designed around your product, team, and customers.
+ </p>
+ </div>
+
+ <a
+ href="/solutions"
+ class="group hidden items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300 xl:inline-flex"
+ >
+ View all solutions
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <div class="grid gap-2 md:grid-cols-2">
+
+ <!-- Startups -->
+ <a
+ href="/solutions/startups"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-indigo-200 hover:bg-indigo-50 dark:hover:border-indigo-500/20 dark:hover:bg-indigo-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 transition group-hover:bg-indigo-600 group-hover:text-white dark:bg-indigo-500/15 dark:text-indigo-300 dark:group-hover:bg-indigo-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--rocket] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Startups
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-indigo-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-indigo-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Launch secure authentication quickly without slowing product development.
+ </span>
+ </span>
+ </a>
+
+ <!-- SaaS -->
+ <a
+ href="/solutions/saas"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-cyan-200 hover:bg-cyan-50 dark:hover:border-cyan-500/20 dark:hover:bg-cyan-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-cyan-100 text-cyan-700 transition group-hover:bg-cyan-600 group-hover:text-white dark:bg-cyan-500/15 dark:text-cyan-300 dark:group-hover:bg-cyan-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--cloud] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ SaaS platforms
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-cyan-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-cyan-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Add users, organizations, roles, SSO, and secure account recovery.
+ </span>
+ </span>
+ </a>
+
+ <!-- Enterprise -->
+ <a
+ href="/solutions/enterprise"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-violet-200 hover:bg-violet-50 dark:hover:border-violet-500/20 dark:hover:bg-violet-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-violet-100 text-violet-700 transition group-hover:bg-violet-600 group-hover:text-white dark:bg-violet-500/15 dark:text-violet-300 dark:group-hover:bg-violet-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--building-2] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Enterprise
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-violet-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-violet-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Support complex organizations, governance, auditability, and scale.
+ </span>
+ </span>
+ </a>
+
+ <!-- Developers -->
+ <a
+ href="/solutions/developers"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-emerald-200 hover:bg-emerald-50 dark:hover:border-emerald-500/20 dark:hover:bg-emerald-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-emerald-100 text-emerald-700 transition group-hover:bg-emerald-600 group-hover:text-white dark:bg-emerald-500/15 dark:text-emerald-300 dark:group-hover:bg-emerald-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--code-2] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Developers
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-emerald-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-emerald-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ APIs, SDKs, webhooks, templates, and developer-friendly workflows.
+ </span>
+ </span>
+ </a>
+
+ <!-- Agencies -->
+ <a
+ href="/solutions/agencies"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-amber-200 hover:bg-amber-50 dark:hover:border-amber-500/20 dark:hover:bg-amber-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-amber-100 text-amber-700 transition group-hover:bg-amber-600 group-hover:text-white dark:bg-amber-500/15 dark:text-amber-300 dark:group-hover:bg-amber-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--briefcase-business] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ Agencies
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-amber-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-amber-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Manage identities across customer projects and branded experiences.
+ </span>
+ </span>
+ </a>
+
+ <!-- B2B -->
+ <a
+ href="/solutions/b2b"
+ class="group flex items-start gap-4 rounded-2xl border border-transparent p-4 transition hover:border-rose-200 hover:bg-rose-50 dark:hover:border-rose-500/20 dark:hover:bg-rose-500/10"
+ >
+ <span
+ class="grid h-11 w-11 shrink-0 place-items-center rounded-xl bg-rose-100 text-rose-700 transition group-hover:bg-rose-600 group-hover:text-white dark:bg-rose-500/15 dark:text-rose-300 dark:group-hover:bg-rose-500 dark:group-hover:text-white"
+ >
+ <span class="icon-[lucide--handshake] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <span class="min-w-0">
+ <span class="flex items-center gap-2">
+ <span class="text-sm font-semibold text-slate-950 dark:text-white">
+ B2B products
+ </span>
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5 text-slate-300 opacity-0 transition group-hover:translate-x-0.5 group-hover:-translate-y-0.5 group-hover:text-rose-600 group-hover:opacity-100 dark:text-slate-600 dark:group-hover:text-rose-300" aria-hidden="true" ></span>
+ </span>
+
+ <span class="mt-1 block text-xs leading-5 text-slate-500 dark:text-slate-400">
+ Secure customer organizations, team access, and enterprise connections.
+ </span>
+ </span>
+ </a>
+ </div>
+
+ <a
+ href="/solutions"
+ class="mt-4 flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:border-indigo-300 hover:bg-indigo-100 dark:border-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:border-indigo-500/30 dark:hover:bg-indigo-500/15 xl:hidden"
+ >
+ View all solutions
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" ></span>
+ </a>
+ </section>
+
+ <!-- Featured solution -->
+ <aside
+ class="relative overflow-hidden rounded-3xl border border-violet-200 bg-linear-to-br from-violet-50 via-white to-indigo-50 p-6 dark:border-violet-500/20 dark:from-violet-500/10 dark:via-slate-900 dark:to-indigo-500/10"
+ >
+ <div aria-hidden="true" class="absolute -right-16 -top-16 h-40 w-40 rounded-full bg-violet-300/30 blur-3xl dark:bg-violet-500/10" ></div>
+
+ <div aria-hidden="true" class="absolute -bottom-20 -left-16 h-40 w-40 rounded-full bg-indigo-300/30 blur-3xl dark:bg-indigo-500/10" ></div>
+
+ <div class="relative">
+ <span
+ class="inline-flex items-center gap-2 rounded-full border border-violet-200 bg-white/80 px-3 py-1.5 text-xs font-semibold text-violet-700 backdrop-blur-sm dark:border-violet-500/20 dark:bg-white/5 dark:text-violet-300"
+ >
+ <span class="icon-[lucide--wand-sparkles] h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ Recommended for SaaS
+ </span>
+
+ <div
+ class="mt-5 grid h-12 w-12 place-items-center rounded-2xl bg-violet-600 text-white shadow-lg shadow-violet-600/20"
+ >
+ <span class="icon-[lucide--cloud-cog] h-6 w-6" aria-hidden="true" ></span>
+ </div>
+
+ <h3 class="mt-5 text-xl font-bold tracking-tight text-slate-950 dark:text-white">
+ Launch enterprise-ready identity
+ </h3>
+
+ <p class="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
+ Start with simple authentication and add organizations,
+ permissions, enterprise SSO, and governance as your product grows.
+ </p>
+
+ <div class="mt-5 grid gap-3">
+ <div
+ class="flex items-center gap-3 rounded-xl border border-violet-200 bg-white/70 px-3 py-3 dark:border-violet-500/20 dark:bg-white/5"
+ >
+ <span
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-violet-100 text-violet-700 dark:bg-violet-500/15 dark:text-violet-300"
+ >
+ <span class="icon-[lucide--timer-reset] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-900 dark:text-white">
+ Faster launch
+ </span>
+
+ <span class="block text-xs text-slate-500 dark:text-slate-400">
+ Start with secure defaults
+ </span>
+ </span>
+ </div>
+
+ <div
+ class="flex items-center gap-3 rounded-xl border border-violet-200 bg-white/70 px-3 py-3 dark:border-violet-500/20 dark:bg-white/5"
+ >
+ <span
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--expand] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-900 dark:text-white">
+ Built to scale
+ </span>
+
+ <span class="block text-xs text-slate-500 dark:text-slate-400">
+ Add advanced controls later
+ </span>
+ </span>
+ </div>
+
+ <div
+ class="flex items-center gap-3 rounded-xl border border-violet-200 bg-white/70 px-3 py-3 dark:border-violet-500/20 dark:bg-white/5"
+ >
+ <span
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--shield-check] h-4 w-4" aria-hidden="true" ></span>
+ </span>
+
+ <span>
+ <span class="block text-sm font-semibold text-slate-900 dark:text-white">
+ Secure by design
+ </span>
+
+ <span class="block text-xs text-slate-500 dark:text-slate-400">
+ Protect every account flow
+ </span>
+ </span>
+ </div>
+ </div>
+
+ <a
+ href="/solutions/saas"
+ class="group mt-6 flex h-11 w-full items-center justify-center gap-2 rounded-xl bg-violet-600 px-4 text-sm font-bold text-white shadow-lg shadow-violet-600/20 transition hover:-translate-y-0.5 hover:bg-violet-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900"
+ >
+ Explore the SaaS solution
+
+ <span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </aside>
+ </div>
+
+ <!-- Bottom use-case links -->
+ <div
+ class="mt-7 flex flex-wrap items-center justify-between gap-4 border-t border-slate-200 pt-5 dark:border-white/10"
+ >
+ <div class="flex flex-wrap items-center gap-x-6 gap-y-3">
+ <a
+ href="/solutions/customer-identity"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--contact-round] h-4 w-4" aria-hidden="true" ></span>
+
+ Customer identity
+ </a>
+
+ <a
+ href="/solutions/workforce-identity"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--id-card] h-4 w-4" aria-hidden="true" ></span>
+
+ Workforce identity
+ </a>
+
+ <a
+ href="/solutions/marketplaces"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--store] h-4 w-4" aria-hidden="true" ></span>
+
+ Marketplaces
+ </a>
+
+ <a
+ href="/solutions/multi-tenant"
+ class="inline-flex items-center gap-2 text-sm font-semibold text-slate-600 transition hover:text-indigo-700 dark:text-slate-400 dark:hover:text-indigo-300"
+ >
+ <span class="icon-[lucide--network] h-4 w-4" aria-hidden="true" ></span>
+
+ Multi-tenant apps
+ </a>
+ </div>
+
+ <a
+ href="/customers"
+ class="group inline-flex items-center gap-2 text-sm font-semibold text-indigo-600 transition hover:text-indigo-800 dark:text-indigo-400 dark:hover:text-indigo-300"
+ >
+ See customer stories
+
+ <span class="icon-[lucide--arrow-up-right] h-4 w-4 transition-transform group-hover:translate-x-0.5 group-hover:-translate-y-0.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+ </div>
+ </div>
+ }
+}
+Reusable sortable table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SortableTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="SortableTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SortableTable.wrn
component SortableTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable spacer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<spacer />Legacy mount name: data-component="spacer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/spacer.wrn
// Flexible spacer: grows to push siblings apart inside a flex row/column.
+component Spacer {
+ props {
+ class = ""
+ }
+ view {
+ <div class="wire-spacer {class}"></div>
+ }
+}
+Reusable spinner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Spinner label="Loading" size="md" />Legacy mount name: data-component="Spinner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Loading" |
size | string | Optional | "md" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Spinner.wrn
component Spinner {
+ props {
+ class = ""
+ label = "Loading"
+ size = "md"
+ }
+ view {
+ <span role="status" aria-label="{label}" class="inline-block animate-spin rounded-full border-2 border-slate-300 border-r-violet-600 {size === 'sm' ? 'size-4' : size === 'lg' ? 'size-10' : 'size-6'} {class}"></span>
+ }
+}
+Reusable split button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SplitButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SplitButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SplitButton.wrn
component SplitButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable split c t a component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SplitCTA label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="SplitCTA".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SplitCTA.wrn
component SplitCTA {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable split hero component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SplitHero eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SplitHero".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SplitHero.wrn
component SplitHero {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable split layout component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SplitLayout />Legacy mount name: data-component="SplitLayout".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SplitLayout.wrn
component SplitLayout {
+ props {
+ class = ""
+ }
+ view { <div class="wire-split-layout {class}"><slot /></div> }
+}
+Reusable split section header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SplitSectionHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="SplitSectionHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SplitSectionHeader.wrn
component SplitSectionHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable stack component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Stack gap="4" />Legacy mount name: data-component="Stack".
| Prop | Type | Requirement | Default |
|---|---|---|---|
gap | string | Optional | "4" |
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Stack.wrn
component Stack {
+ props {
+ gap = "4"
+ className = ""
+ }
+ view {
+ <div class="flex flex-col gap-{gap} {className}"><slot /></div>
+ }
+}
+Reusable start free button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StartFreeButton label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="StartFreeButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StartFreeButton.wrn
component StartFreeButton {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable stat card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatCard label="Metric" value="0" change="change" trend="neutral" />Legacy mount name: data-component="StatCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
label | string | Optional | "Metric" |
value | string | Optional | "0" |
change | string | Optional | "" |
trend | string | Optional | "neutral" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/StatCard.wrn
component StatCard {
+ props {
+ class = ""
+ label = "Metric"
+ value = "0"
+ change = ""
+ trend = "neutral"
+ }
+ view {
+ <article class="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm dark:border-slate-800 dark:bg-slate-900 {class}"><p class="text-sm font-medium text-slate-500">{label}</p><div class="mt-2 flex items-end justify-between gap-3"><p class="text-3xl font-bold tracking-tight">{value}</p><span data-show="change" class="text-sm font-semibold {trend === 'up' ? 'text-emerald-600' : trend === 'down' ? 'text-red-600' : 'text-slate-500'}">{trend === 'up' ? '↑' : trend === 'down' ? '↓' : ''} {change}</span></div></article>
+ }
+}
+Reusable state selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StateSelector label="State" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="StateSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "State" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StateSelector.wrn
component StateSelector {
+ props {
+ label = "State"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable status badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusBadge status="operational" />Legacy mount name: data-component="StatusBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
status | string | Optional | "operational" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/StatusBadge.wrn
component StatusBadge {
+ props {
+ class = ""
+ status = "operational"
+ }
+ view {
+ <span class="inline-flex items-center gap-2 rounded-full px-3 py-1 text-xs font-semibold {status === 'operational' ? 'bg-emerald-100 text-emerald-700' : status === 'degraded' ? 'bg-amber-100 text-amber-700' : status === 'outage' ? 'bg-red-100 text-red-700' : 'bg-blue-100 text-blue-700'} {class}"><span class="size-2 rounded-full bg-current"></span>{status}</span>
+ }
+}
+Reusable status banner component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusBanner type="info" title="title" description="description" actionLabel="actionLabel" actionHref="actionHref" />Legacy mount name: data-component="StatusBanner".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
type | string | Optional | "info" |
title | string | Optional | "" |
description | string | Optional | "" |
actionLabel | string | Optional | "" |
actionHref | string | Optional | "" |
dismissible | boolean | Optional | true |
compact | boolean | Optional | false |
details | string | Optional | [] |
This component does not declare a slot.
clickInstalled source: components/StatusBanner.wrn
component StatusBanner {
+ props {
+ class: string = ""
+ type = "info"
+
+ title = ""
+ description = ""
+
+ actionLabel = ""
+ actionHref = ""
+
+ dismissible = true
+ compact = false
+
+ details = []
+ }
+
+ state visible = true
+
+ view {
+ <aside
+ role="{type === 'error' ? 'alert' : 'status'}"
+ aria-live="{type === 'error' ? 'assertive' : 'polite'}"
+ class="relative overflow-hidden {class}"
+ class:hidden="!visible"
+ >
+ <div
+ class=" relative overflow-hidden rounded-2xl {compact ? 'px-4 py-3' : 'px-5 py-4 sm:px-6'} {type === 'success' ? 'bg-emerald-50 text-emerald-950 ring-1 ring-inset ring-emerald-200 dark:bg-emerald-500/10 dark:text-emerald-100 dark:ring-emerald-500/20' : type === 'warning' ? 'bg-amber-50 text-amber-950 ring-1 ring-inset ring-amber-200 dark:bg-amber-500/10 dark:text-amber-100 dark:ring-amber-500/20' : type === 'error' ? 'bg-rose-50 text-rose-950 ring-1 ring-inset ring-rose-200 dark:bg-rose-500/10 dark:text-rose-100 dark:ring-rose-500/20' : 'bg-indigo-50 text-indigo-950 ring-1 ring-inset ring-indigo-200 dark:bg-indigo-500/10 dark:text-indigo-100 dark:ring-indigo-500/20' } "
+ >
+ <!-- Decorative glow -->
+ <div aria-hidden="true" class=" pointer-events-none absolute -right-16 -top-20 h-40 w-40 rounded-full blur-3xl {type === 'success' ? 'bg-emerald-300/30 dark:bg-emerald-500/10' : type === 'warning' ? 'bg-amber-300/30 dark:bg-amber-500/10' : type === 'error' ? 'bg-rose-300/30 dark:bg-rose-500/10' : 'bg-indigo-300/30 dark:bg-indigo-500/10' } " ></div>
+
+ <div
+ class="relative flex gap-4"
+ class:items-center="compact"
+ class:items-start="!compact"
+ >
+ <!-- Icon -->
+ <span
+ class=" grid shrink-0 place-items-center rounded-xl {compact ? 'h-9 w-9' : 'h-10 w-10'} {type === 'success' ? 'bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300' : type === 'warning' ? 'bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300' : type === 'error' ? 'bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-300' : 'bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300' } "
+ >
+ <span class=" h-5 w-5 {type === 'success' ? 'icon-[lucide--circle-check]' : type === 'warning' ? 'icon-[lucide--triangle-alert]' : type === 'error' ? 'icon-[lucide--circle-x]' : 'icon-[lucide--info]' } " aria-hidden="true" ></span>
+ </span>
+
+ <!-- Content -->
+ <div class="min-w-0 flex-1">
+ <div
+ class="flex flex-col gap-3 sm:flex-row sm:justify-between"
+ class:sm:items-center="compact"
+ class:sm:items-start="!compact"
+ >
+ <div class="min-w-0">
+ <h2
+ class="font-bold"
+ class:text-sm="compact"
+ class:text-base="!compact"
+ class:hidden="title === ''"
+ >
+ {title}
+ </h2>
+
+ <p
+ class="text-sm leading-6 opacity-80"
+ class:mt-1="title !== ''"
+ class:hidden="description === ''"
+ >
+ {description}
+ </p>
+ </div>
+
+ <!-- Actions -->
+ <div class="flex shrink-0 items-center gap-2">
+ <a
+ href="{actionHref}"
+ class=" h-9 items-center justify-center gap-1.5 rounded-lg px-3 text-xs font-bold transition {type === 'success' ? 'bg-emerald-600 text-white hover:bg-emerald-500' : type === 'warning' ? 'bg-amber-600 text-white hover:bg-amber-500' : type === 'error' ? 'bg-rose-600 text-white hover:bg-rose-500' : 'bg-indigo-600 text-white hover:bg-indigo-500' } "
+ class:hidden="actionLabel === ''"
+ class:inline-flex="actionLabel !== ''"
+ >
+ {actionLabel}
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </a>
+
+ <button
+ type="button"
+ @click="visible = false"
+ aria-label="Dismiss notice"
+ class="grid h-9 w-9 place-items-center rounded-lg opacity-60 transition hover:bg-black/5 hover:opacity-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-current dark:hover:bg-white/10"
+ class:hidden="!dismissible"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+ </div>
+
+ <!-- Dynamic details -->
+ <div
+ class="mt-4 flex flex-wrap gap-x-5 gap-y-2 border-t pt-4 text-xs font-medium"
+ class:hidden="compact || details.length === 0"
+ class:border-emerald-200="type === 'success'"
+ class:border-amber-200="type === 'warning'"
+ class:border-rose-200="type === 'error'"
+ class:border-indigo-200="type === 'info'"
+ class:dark:border-emerald-500/20="type === 'success'"
+ class:dark:border-amber-500/20="type === 'warning'"
+ class:dark:border-rose-500/20="type === 'error'"
+ class:dark:border-indigo-500/20="type === 'info'"
+ >
+ {#each details.slice(0, 4) as detail}
+ <span class="inline-flex items-center gap-2 opacity-80">
+ <span class="{detail.iconClass} h-3.5 w-3.5" aria-hidden="true" ></span>
+
+ {detail.label}
+ </span>
+ {/each}
+ </div>
+ </div>
+ </div>
+ </div>
+ </aside>
+ }
+}
+Reusable status page shell component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusPageShell eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="StatusPageShell".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StatusPageShell.wrn
component StatusPageShell {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable status selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusSelector label="Status" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="StatusSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Status" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StatusSelector.wrn
component StatusSelector {
+ props {
+ label = "Status"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable status subscribe form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusSubscribeForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="StatusSubscribeForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StatusSubscribeForm.wrn
component StatusSubscribeForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable status table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StatusTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="StatusTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StatusTable.wrn
component StatusTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable step navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StepNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="StepNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StepNavigation.wrn
component StepNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable step up authentication dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StepUpAuthenticationDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="StepUpAuthenticationDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StepUpAuthenticationDialog.wrn
component StepUpAuthenticationDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable stepper input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StepperInput label="Stepper" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="StepperInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Stepper" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StepperInput.wrn
component StepperInput {
+ props {
+ label = "Stepper"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable stepper component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Stepper eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Stepper".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Stepper.wrn
component Stepper {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable sticker picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StickerPicker label="Sticker" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="StickerPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Sticker" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StickerPicker.wrn
component StickerPicker {
+ props {
+ label = "Sticker"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable sticky layout component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StickyLayout />Legacy mount name: data-component="StickyLayout".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StickyLayout.wrn
component StickyLayout {
+ props {
+ class = ""
+ }
+ view { <div class="wire-sticky-layout {class}"><slot /></div> }
+}
+Reusable sticky component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Sticky />Legacy mount name: data-component="Sticky".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Sticky.wrn
component Sticky {
+ props {
+ class = ""
+ }
+ view { <div class="wire-sticky {class}"><slot /></div> }
+}
+Reusable street address input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<StreetAddressInput label="StreetAddress" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="StreetAddressInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "StreetAddress" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/StreetAddressInput.wrn
component StreetAddressInput {
+ props {
+ label = "StreetAddress"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable subdomain input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SubdomainInput label="Subdomain" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SubdomainInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Subdomain" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SubdomainInput.wrn
component SubdomainInput {
+ props {
+ label = "Subdomain"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable subject input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SubjectInput label="Subject" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="SubjectInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Subject" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SubjectInput.wrn
component SubjectInput {
+ props {
+ label = "Subject"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable subprocessor table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SubprocessorTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="SubprocessorTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SubprocessorTable.wrn
component SubprocessorTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable subsection heading component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SubsectionHeading text="text" align="start" />Legacy mount name: data-component="SubsectionHeading".
| Prop | Type | Requirement | Default |
|---|---|---|---|
text | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SubsectionHeading.wrn
component SubsectionHeading {
+ props {
+ text = ""
+ align = "start"
+ class = ""
+ }
+ view { <div class="wire-type wire-type--heading wire-text--{align} {class}">{text}<slot /></div> }
+}
+Reusable success card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SuccessCard title="title" description="description" href="href" />Legacy mount name: data-component="SuccessCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SuccessCard.wrn
component SuccessCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--success {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable success state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SuccessState label="Success" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="SuccessState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Success" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SuccessState.wrn
component SuccessState {
+ props {
+ label = "Success"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable support request form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<SupportRequestForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="SupportRequestForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/SupportRequestForm.wrn
component SupportRequestForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable surface component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Surface />Legacy mount name: data-component="Surface".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Surface.wrn
component Surface {
+ props {
+ class = ""
+ }
+ view { <div class="wire-surface {class}"><slot /></div> }
+}
+Reusable switch component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Switch id="id" name="name" label="Switch" description="description" checked="false" />Legacy mount name: data-component="Switch".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Switch" |
description | string | Optional | "" |
checked | boolean | Optional | false |
disabled | boolean | Optional | false |
This component does not declare a slot.
clickInstalled source: components/Switch.wrn
component Switch {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Switch"
+ description = ""
+ checked = false
+ disabled = false
+ }
+ state on = checked
+ view {
+ <button id="{id}" type="button" role="switch" aria-checked="{on}" disabled="{disabled}" @click="on = !on" class="flex w-full items-center justify-between gap-4 rounded-xl p-2 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-violet-500 disabled:opacity-50 {class}"><span><span class="block text-sm font-semibold">{label}</span><span data-show="description" class="text-sm text-slate-500">{description}</span></span><span class="relative inline-flex h-6 w-11 shrink-0 rounded-full transition {on ? 'bg-violet-600' : 'bg-slate-300 dark:bg-slate-700'}"><span class="absolute top-0.5 size-5 rounded-full bg-white shadow transition-transform {on ? 'translate-x-5' : 'translate-x-0.5'}"></span></span><input type="hidden" name="{name}" value="{on ? 'true' : 'false'}" /></button>
+ }
+}
+Reusable table header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TableHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="TableHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TableHeader.wrn
component TableHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable table row component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TableRow title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="TableRow".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TableRow.wrn
component TableRow {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable table skeleton component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TableSkeleton label="Table" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="TableSkeleton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Table" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TableSkeleton.wrn
component TableSkeleton {
+ props {
+ label = "Table"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Table caption="Data table" responsive="true" />Legacy mount name: data-component="Table".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
caption | string | Optional | "Data table" |
responsive | boolean | Optional | true |
defaultThis component does not declare a custom event.
Installed source: components/Table.wrn
component Table {
+ props {
+ class = ""
+ caption = "Data table"
+ responsive = true
+ }
+ view {
+ <div class="w-full overflow-x-auto rounded-2xl border border-slate-200 dark:border-slate-800 {class}"><table class="w-full min-w-[640px] border-collapse text-left text-sm"><caption class="sr-only">{caption}</caption><slot /></table></div>
+ }
+}
+Reusable tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Tabs active="first" />Legacy mount name: data-component="Tabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
active | string | Optional | "first" |
firstsecondclickInstalled source: components/Tabs.wrn
component Tabs {
+ props {
+ class = ""
+ active = "first"
+ }
+ state current = active
+ view {
+ <div class="{class}"><div role="tablist" class="flex gap-1 overflow-x-auto rounded-xl bg-slate-100 p-1 dark:bg-slate-800"><button role="tab" aria-selected="{current === 'first'}" @click="current = 'first'" class="min-h-10 flex-1 rounded-lg px-4 text-sm font-semibold transition {current === 'first' ? 'bg-white shadow dark:bg-slate-900' : 'text-slate-500'}">First</button><button role="tab" aria-selected="{current === 'second'}" @click="current = 'second'" class="min-h-10 flex-1 rounded-lg px-4 text-sm font-semibold transition {current === 'second' ? 'bg-white shadow dark:bg-slate-900' : 'text-slate-500'}">Second</button></div><div data-show="current === 'first'" role="tabpanel" class="pt-5"><slot name="first" /></div><div data-show="current === 'second'" role="tabpanel" class="pt-5"><slot name="second" /></div></div>
+ }
+}
+Reusable tag input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TagInput label="Tag" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TagInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Tag" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TagInput.wrn
component TagInput {
+ props {
+ label = "Tag"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable tag component.
Components are auto-discovered. Use the component directly in any .wrn view:
<tag label="label" variant="default" />Legacy mount name: data-component="tag".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/tag.wrn
// Small tag / chip. variant: default | primary | success | danger | warning.
+component Tag {
+ props {
+ label = ""
+ variant = "default"
+ class = ""
+ }
+ view {
+ <span class="wire-tag wire-tag--{variant} {class}"><slot>{label}</slot></span>
+ }
+}
+Reusable tax notice component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TaxNotice label="Tax" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="TaxNotice".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Tax" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TaxNotice.wrn
component TaxNotice {
+ props {
+ label = "Tax"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable tax rate input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TaxRateInput label="TaxRate" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TaxRateInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "TaxRate" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TaxRateInput.wrn
component TaxRateInput {
+ props {
+ label = "TaxRate"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable team member card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TeamMemberCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TeamMemberCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TeamMemberCard.wrn
component TeamMemberCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable team size selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TeamSizeSelector label="TeamSize" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TeamSizeSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "TeamSize" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TeamSizeSelector.wrn
component TeamSizeSelector {
+ props {
+ label = "TeamSize"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable template card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TemplateCard title="title" description="description" href="href" />Legacy mount name: data-component="TemplateCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TemplateCard.wrn
component TemplateCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--template {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable template selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TemplateSelector label="Template" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TemplateSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Template" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TemplateSelector.wrn
component TemplateSelector {
+ props {
+ label = "Template"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable template variable input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TemplateVariableInput label="TemplateVariable" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TemplateVariableInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "TemplateVariable" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TemplateVariableInput.wrn
component TemplateVariableInput {
+ props {
+ label = "TemplateVariable"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable tenant isolation diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TenantIsolationDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="TenantIsolationDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TenantIsolationDiagram.wrn
component TenantIsolationDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable terminal block component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TerminalBlock eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TerminalBlock".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TerminalBlock.wrn
component TerminalBlock {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable tertiary button component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TertiaryButton label="Action" type="button" disabled="false" />Legacy mount name: data-component="TertiaryButton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
type | string | Optional | "button" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TertiaryButton.wrn
component TertiaryButton {
+ props {
+ label = "Action"
+ type = "button"
+ disabled = false
+ class = ""
+ }
+ view { <button type="{type}" disabled="{disabled}" class="wire-btn wire-btn--ghost {class}">{label}<slot /></button> }
+}
+Reusable test message dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TestMessageDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="TestMessageDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TestMessageDialog.wrn
component TestMessageDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable testimonial card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TestimonialCard quote="Great product." name="Customer" role="role" company="company" avatar="avatar" />Legacy mount name: data-component="TestimonialCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
quote | string | Optional | "Great product." |
name | string | Optional | "Customer" |
role | string | Optional | "" |
company | string | Optional | "" |
avatar | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TestimonialCard.wrn
component TestimonialCard {
+ props {
+ class = ""
+ quote = "Great product."
+ name = "Customer"
+ role = ""
+ company = ""
+ avatar = ""
+ }
+ view {
+ <figure class="rounded-3xl border border-slate-200 bg-white p-7 shadow-sm dark:border-slate-800 dark:bg-slate-900 {class}"><blockquote class="text-lg leading-8 text-slate-700 dark:text-slate-200">“{quote}”</blockquote><figcaption class="mt-6 flex items-center gap-3"><Avatar src="{avatar}" initials="{name.slice(0,2)}" /><div><div class="font-semibold">{name}</div><div class="text-sm text-slate-500">{role}<span data-show="company"> · {company}</span></div></div></figcaption></figure>
+ }
+}
+Reusable testimonial carousel component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TestimonialCarousel eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TestimonialCarousel".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TestimonialCarousel.wrn
component TestimonialCarousel {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable text input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TextInput id="id" name="name" label="Text" value="value" placeholder="placeholder" />Legacy mount name: data-component="TextInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Text" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TextInput.wrn
component TextInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Text"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="text" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable text link component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TextLink label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="TextLink".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TextLink.wrn
component TextLink {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable text skeleton component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TextSkeleton label="Text" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="TextSkeleton".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Text" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TextSkeleton.wrn
component TextSkeleton {
+ props {
+ label = "Text"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable textarea component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Textarea id="id" name="name" label="Message" value="value" placeholder="placeholder" />Legacy mount name: data-component="Textarea".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Message" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
rows | number | Optional | 5 |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/Textarea.wrn
component Textarea {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Message"
+ value = ""
+ placeholder = ""
+ rows = 5
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ }
+ view {
+ <div class="space-y-2 {class}"><label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label><textarea id="{id}" name="{name}" rows="{rows}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" aria-invalid="{!!error}" class="w-full resize-y rounded-xl border bg-white px-3.5 py-3 text-slate-950 shadow-sm outline-none transition focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 dark:bg-slate-950 dark:text-white {error ? 'border-red-500' : 'border-slate-300 dark:border-slate-700'}">{value}</textarea><p data-show="help && !error" class="text-sm text-slate-500">{help}</p><p data-show="error" role="alert" class="text-sm font-medium text-red-600">{error}</p></div>
+ }
+}
+Reusable theme color picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ThemeColorPicker label="ThemeColor" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ThemeColorPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "ThemeColor" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ThemeColorPicker.wrn
component ThemeColorPicker {
+ props {
+ label = "ThemeColor"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable theme switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ThemeSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ThemeSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ThemeSwitcher.wrn
component ThemeSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable theme-toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<theme-toggle label="Toggle theme" />Legacy mount name: data-component="theme-toggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Toggle theme" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/theme-toggle.wrn
// Theme switch button. The framework's theme runtime binds the click
+// (data-wire-theme-toggle), so no component JS is needed.
+component ThemeToggle {
+ props {
+ label = "Toggle theme"
+ class = ""
+ }
+ view {
+ <button type="button" class="wire-btn wire-btn--ghost {class}" data-wire-theme-toggle><slot>{label}</slot></button>
+ }
+}
+Reusable time input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimeInput id="id" name="name" label="Time" value="value" placeholder="placeholder" />Legacy mount name: data-component="TimeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Time" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TimeInput.wrn
component TimeInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Time"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="time" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimePicker id="time-picker" name="time" label="Time" value="value" min="min" />Legacy mount name: data-component="TimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
id | string | Optional | "time-picker" |
name | string | Optional | "time" |
label | string | Optional | "Time" |
value | string | Optional | "" |
min | string | Optional | "" |
max | string | Optional | "" |
step | number | Optional | 60 |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
class | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TimePicker.wrn
component TimePicker {
+ props {
+ id = "time-picker"
+ name = "time"
+ label = "Time"
+ value = ""
+ min = ""
+ max = ""
+ step = 60
+ required = false
+ disabled = false
+ class = ""
+ }
+ view { <div class="wire-field {class}"><label for="{id}" class="wire-label">{label}</label><input id="{id}" name="{name}" type="time" value="{value}" min="{min}" max="{max}" step="{step}" required="{required}" disabled="{disabled}" class="wire-input" /></div> }
+}
+Reusable time range picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimeRangePicker label="TimeRange" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TimeRangePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "TimeRange" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TimeRangePicker.wrn
component TimeRangePicker {
+ props {
+ label = "TimeRange"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable timeline chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimelineChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="TimelineChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TimelineChart.wrn
component TimelineChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable timeline item component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimelineItem title="Event" date="date" description="description" status="default" />Legacy mount name: data-component="TimelineItem".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Event" |
date | string | Optional | "" |
description | string | Optional | "" |
status | string | Optional | "default" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TimelineItem.wrn
component TimelineItem {
+ props {
+ class = ""
+ title = "Event"
+ date = ""
+ description = ""
+ status = "default"
+ }
+ view {
+ <li class="relative {class}"><span class="absolute -left-[1.85rem] top-1 size-3 rounded-full ring-4 ring-white dark:ring-slate-950 {status === 'success' ? 'bg-emerald-500' : status === 'warning' ? 'bg-amber-500' : 'bg-violet-500'}"></span><div class="flex flex-wrap items-baseline justify-between gap-2"><h3 class="font-semibold">{title}</h3><time class="text-xs text-slate-500">{date}</time></div><p data-show="description" class="mt-1 text-sm text-slate-500">{description}</p></li>
+ }
+}
+Reusable timeline component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Timeline title="Timeline" />Legacy mount name: data-component="Timeline".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Timeline" |
defaultThis component does not declare a custom event.
Installed source: components/Timeline.wrn
component Timeline {
+ props {
+ class = ""
+ title = "Timeline"
+ }
+ view {
+ <section class="{class}"><h2 class="text-lg font-bold">{title}</h2><ol class="mt-5 border-l border-slate-200 pl-6 dark:border-slate-800"><slot /></ol></section>
+ }
+}
+Reusable timeout input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimeoutInput label="Timeout" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TimeoutInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Timeout" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TimeoutInput.wrn
component TimeoutInput {
+ props {
+ label = "Timeout"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable timezone aware time picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimezoneAwareTimePicker label="TimezoneAwareTime" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TimezoneAwareTimePicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "TimezoneAwareTime" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TimezoneAwareTimePicker.wrn
component TimezoneAwareTimePicker {
+ props {
+ label = "TimezoneAwareTime"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable timezone selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TimezoneSelector id="timezone" name="timezone" label="Timezone" />Legacy mount name: data-component="TimezoneSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "timezone" |
name | string | Optional | "timezone" |
label | string | Optional | "Timezone" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/TimezoneSelector.wrn
component TimezoneSelector {
+ props {
+ class = ""
+ id = "timezone"
+ name = "timezone"
+ label = "Timezone"
+ }
+ view {
+ <Select class="{class}" id="{id}" name="{name}" label="{label}"><option value="UTC">UTC</option><option value="Asia/Kolkata">Asia/Kolkata</option><option value="America/New_York">America/New_York</option><option value="Europe/London">Europe/London</option></Select>
+ }
+}
+Reusable toast action component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ToastAction label="Action" href="href" type="button" variant="primary" disabled="false" />Legacy mount name: data-component="ToastAction".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Action" |
href | string | Optional | "" |
type | string | Optional | "button" |
variant | string | Optional | "primary" |
disabled | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ToastAction.wrn
component ToastAction {
+ props {
+ label = "Action"
+ href = ""
+ type = "button"
+ variant = "primary"
+ disabled = false
+ class = ""
+ }
+ view { <span class="wire-catalog-action {class}"><a data-show="href" href="{href}" class="wire-btn wire-btn--{variant}">{label}<slot /></a><button data-show="!href" type="{type}" disabled="{disabled}" class="wire-btn wire-btn--{variant}">{label}<slot /></button></span> }
+}
+Reusable toast host component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ToastHost />Legacy mount name: data-component="ToastHost".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
This component does not declare a slot.
clickInstalled source: components/ToastHost.wrn
component ToastHost {
+ props {
+ class: string = ""
+ }
+ state successOpen = false
+ state errorOpen = false
+ state warningOpen = false
+ state infoOpen = false
+
+ state successTitle = "Changes saved"
+ state successMessage = "Your changes were saved successfully."
+
+ state errorTitle = "Something went wrong"
+ state errorMessage = "We could not complete your request. Please try again."
+
+ state warningTitle = "Action required"
+ state warningMessage = "Review the highlighted information before continuing."
+
+ state infoTitle = "New update available"
+ state infoMessage = "A newer version of this feature is now available."
+
+ view {
+ <div
+ data-toast-host
+ aria-live="polite"
+ aria-relevant="additions text"
+ class="pointer-events-none fixed inset-x-0 top-0 z-[120] flex flex-col items-end gap-3 p-4 sm:left-auto sm:right-0 sm:w-full sm:max-w-md sm:p-6 {class}"
+ >
+ <!-- Success toast -->
+ <article
+ role="status"
+ class="pointer-events-auto relative w-full overflow-hidden rounded-2xl border border-emerald-200 bg-white shadow-2xl shadow-slate-950/15 dark:border-emerald-500/20 dark:bg-slate-900 dark:shadow-black/40"
+ class:hidden="!successOpen"
+ class:block="successOpen"
+ >
+ <div class="absolute inset-y-0 left-0 w-1 bg-emerald-500"></div>
+
+ <div class="flex items-start gap-3 p-4 pl-5">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-emerald-100 text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
+ >
+ <span class="icon-[lucide--circle-check] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0 flex-1 pt-0.5">
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ {successTitle}
+ </h3>
+
+ <p class="mt-1 text-sm leading-5 text-slate-600 dark:text-slate-400">
+ {successMessage}
+ </p>
+ </div>
+
+ <button
+ type="button"
+ @click="successOpen = false"
+ aria-label="Dismiss notification"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-400 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+
+ <div class="h-1 w-full bg-emerald-100 dark:bg-emerald-500/10">
+ <div class="h-full w-full origin-left bg-emerald-500"></div>
+ </div>
+ </article>
+
+ <!-- Error toast -->
+ <article
+ role="alert"
+ class="pointer-events-auto relative w-full overflow-hidden rounded-2xl border border-rose-200 bg-white shadow-2xl shadow-slate-950/15 dark:border-rose-500/20 dark:bg-slate-900 dark:shadow-black/40"
+ class:hidden="!errorOpen"
+ class:block="errorOpen"
+ >
+ <div class="absolute inset-y-0 left-0 w-1 bg-rose-500"></div>
+
+ <div class="flex items-start gap-3 p-4 pl-5">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-rose-100 text-rose-700 dark:bg-rose-500/15 dark:text-rose-300"
+ >
+ <span class="icon-[lucide--circle-x] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0 flex-1 pt-0.5">
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ {errorTitle}
+ </h3>
+
+ <p class="mt-1 text-sm leading-5 text-slate-600 dark:text-slate-400">
+ {errorMessage}
+ </p>
+
+ <button
+ type="button"
+ class="mt-3 inline-flex items-center gap-1.5 text-xs font-bold text-rose-700 transition hover:text-rose-900 dark:text-rose-300 dark:hover:text-rose-200"
+ >
+ Try again
+
+ <span class="icon-[lucide--rotate-cw] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </button>
+ </div>
+
+ <button
+ type="button"
+ @click="errorOpen = false"
+ aria-label="Dismiss notification"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-400 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-rose-500 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+
+ <div class="h-1 w-full bg-rose-100 dark:bg-rose-500/10">
+ <div class="h-full w-full origin-left bg-rose-500"></div>
+ </div>
+ </article>
+
+ <!-- Warning toast -->
+ <article
+ role="status"
+ class="pointer-events-auto relative w-full overflow-hidden rounded-2xl border border-amber-200 bg-white shadow-2xl shadow-slate-950/15 dark:border-amber-500/20 dark:bg-slate-900 dark:shadow-black/40"
+ class:hidden="!warningOpen"
+ class:block="warningOpen"
+ >
+ <div class="absolute inset-y-0 left-0 w-1 bg-amber-500"></div>
+
+ <div class="flex items-start gap-3 p-4 pl-5">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-amber-100 text-amber-700 dark:bg-amber-500/15 dark:text-amber-300"
+ >
+ <span class="icon-[lucide--triangle-alert] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0 flex-1 pt-0.5">
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ {warningTitle}
+ </h3>
+
+ <p class="mt-1 text-sm leading-5 text-slate-600 dark:text-slate-400">
+ {warningMessage}
+ </p>
+ </div>
+
+ <button
+ type="button"
+ @click="warningOpen = false"
+ aria-label="Dismiss notification"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-400 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-amber-500 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+
+ <div class="h-1 w-full bg-amber-100 dark:bg-amber-500/10">
+ <div class="h-full w-full origin-left bg-amber-500"></div>
+ </div>
+ </article>
+
+ <!-- Information toast -->
+ <article
+ role="status"
+ class="pointer-events-auto relative w-full overflow-hidden rounded-2xl border border-indigo-200 bg-white shadow-2xl shadow-slate-950/15 dark:border-indigo-500/20 dark:bg-slate-900 dark:shadow-black/40"
+ class:hidden="!infoOpen"
+ class:block="infoOpen"
+ >
+ <div class="absolute inset-y-0 left-0 w-1 bg-indigo-500"></div>
+
+ <div class="flex items-start gap-3 p-4 pl-5">
+ <span
+ class="grid h-10 w-10 shrink-0 place-items-center rounded-xl bg-indigo-100 text-indigo-700 dark:bg-indigo-500/15 dark:text-indigo-300"
+ >
+ <span class="icon-[lucide--info] h-5 w-5" aria-hidden="true" ></span>
+ </span>
+
+ <div class="min-w-0 flex-1 pt-0.5">
+ <h3 class="text-sm font-bold text-slate-950 dark:text-white">
+ {infoTitle}
+ </h3>
+
+ <p class="mt-1 text-sm leading-5 text-slate-600 dark:text-slate-400">
+ {infoMessage}
+ </p>
+
+ <a
+ href="/changelog"
+ class="mt-3 inline-flex items-center gap-1.5 text-xs font-bold text-indigo-700 transition hover:text-indigo-900 dark:text-indigo-300 dark:hover:text-indigo-200"
+ >
+ View update
+
+ <span class="icon-[lucide--arrow-up-right] h-3.5 w-3.5" aria-hidden="true" ></span>
+ </a>
+ </div>
+
+ <button
+ type="button"
+ @click="infoOpen = false"
+ aria-label="Dismiss notification"
+ class="grid h-8 w-8 shrink-0 place-items-center rounded-lg text-slate-400 transition hover:bg-slate-100 hover:text-slate-950 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:hover:bg-white/10 dark:hover:text-white"
+ >
+ <span class="icon-[lucide--x] h-4 w-4" aria-hidden="true" ></span>
+ </button>
+ </div>
+
+ <div class="h-1 w-full bg-indigo-100 dark:bg-indigo-500/10">
+ <div class="h-full w-full origin-left bg-indigo-500"></div>
+ </div>
+ </article>
+ </div>
+ }
+}
+Reusable toast icon component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ToastIcon eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ToastIcon".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ToastIcon.wrn
component ToastIcon {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable toast progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ToastProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="ToastProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ToastProgress.wrn
component ToastProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable toast component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Toast title="Saved" description="description" variant="success" duration="5000" />Legacy mount name: data-component="Toast".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
title | string | Optional | "Saved" |
description | string | Optional | "" |
variant | string | Optional | "success" |
duration | number | Optional | 5000 |
This component does not declare a slot.
clickInstalled source: components/Toast.wrn
component Toast {
+ props {
+ class = ""
+ title = "Saved"
+ description = ""
+ variant = "success"
+ duration = 5000
+ }
+ state visible = true
+ view {
+ <div data-show="visible" role="status" aria-live="polite" class="pointer-events-auto flex w-full max-w-sm items-start gap-3 rounded-2xl border bg-white p-4 shadow-2xl dark:border-slate-800 dark:bg-slate-900 {class}"><span class="mt-0.5 flex size-8 items-center justify-center rounded-full {variant === 'success' ? 'bg-emerald-100 text-emerald-700' : variant === 'danger' ? 'bg-red-100 text-red-700' : 'bg-blue-100 text-blue-700'}">{variant === 'success' ? '✓' : variant === 'danger' ? '!' : 'i'}</span><div class="min-w-0 flex-1"><p class="font-semibold">{title}</p><p data-show="description" class="mt-1 text-sm text-slate-500">{description}</p></div><button type="button" aria-label="Close" @click="visible = false" class="rounded-lg p-1 text-slate-400 hover:bg-slate-100">×</button></div>
+ }
+}
+Reusable toggle group component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ToggleGroup label="Toggle" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="ToggleGroup".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Toggle" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ToggleGroup.wrn
component ToggleGroup {
+ props {
+ label = "Toggle"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable toggle component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Toggle label="label" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="Toggle".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Toggle.wrn
component Toggle {
+ props {
+ label = ""
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable token input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TokenInput label="Token" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="TokenInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Token" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TokenInput.wrn
component TokenInput {
+ props {
+ label = "Token"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable tooltip component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Tooltip text="Helpful information" position="top" />Legacy mount name: data-component="Tooltip".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
text | string | Optional | "Helpful information" |
position | string | Optional | "top" |
defaultThis component does not declare a custom event.
Installed source: components/Tooltip.wrn
component Tooltip {
+ props {
+ class = ""
+ text = "Helpful information"
+ position = "top"
+ }
+ view {
+ <span class="group relative inline-flex {class}"><slot /><span role="tooltip" class="pointer-events-none absolute z-40 w-max max-w-xs rounded-lg bg-slate-950 px-2.5 py-1.5 text-xs font-medium text-white opacity-0 shadow-lg transition duration-200 group-hover:opacity-100 group-focus-within:opacity-100 {position === 'bottom' ? 'left-1/2 top-full mt-2 -translate-x-1/2' : 'bottom-full left-1/2 mb-2 -translate-x-1/2'}">{text}</span></span>
+ }
+}
+Reusable totp verification form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TotpVerificationForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TotpVerificationForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TotpVerificationForm.wrn
component TotpVerificationForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable translated text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TranslatedText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TranslatedText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TranslatedText.wrn
component TranslatedText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable tree table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TreeTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="TreeTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TreeTable.wrn
component TreeTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable trend indicator component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TrendIndicator label="Trend" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="TrendIndicator".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Trend" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TrendIndicator.wrn
component TrendIndicator {
+ props {
+ label = "Trend"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable truncated text component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TruncatedText eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="TruncatedText".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TruncatedText.wrn
component TruncatedText {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable trust badge list component.
Components are auto-discovered. Use the component directly in any .wrn view:
<TrustBadgeList title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="TrustBadgeList".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/TrustBadgeList.wrn
component TrustBadgeList {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable typography component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Typography as="p" variant="body" align="start" />Legacy mount name: data-component="Typography".
| Prop | Type | Requirement | Default |
|---|---|---|---|
as | string | Optional | "p" |
variant | string | Optional | "body" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Typography.wrn
component Typography {
+ props {
+ as = "p"
+ variant = "body"
+ align = "start"
+ class = ""
+ }
+ view {
+ <div class="wire-type wire-type--{variant} wire-text--{align} {class}"><slot /></div>
+ }
+}
+Reusable unavailable region state component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UnavailableRegionState label="UnavailableRegion" title="title" description="description" value="value" variant="default" />Legacy mount name: data-component="UnavailableRegionState".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "UnavailableRegion" |
title | string | Optional | "" |
description | string | Optional | "" |
value | string | Optional | "" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UnavailableRegionState.wrn
component UnavailableRegionState {
+ props {
+ label = "UnavailableRegion"
+ title = ""
+ description = ""
+ value = ""
+ variant = "default"
+ class = ""
+ }
+ view { <aside role="status" class="wire-alert wire-alert--{variant} wire-catalog-feedback {class}"><strong data-show="title || label">{title || label}</strong><span data-show="value" class="wire-badge wire-badge--{variant}">{value}</span><p data-show="description">{description}</p><slot /></aside> }
+}
+Reusable unified timeline preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UnifiedTimelinePreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="UnifiedTimelinePreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UnifiedTimelinePreview.wrn
component UnifiedTimelinePreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable unsaved changes dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UnsavedChangesDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="UnsavedChangesDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UnsavedChangesDialog.wrn
component UnsavedChangesDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable upload item component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UploadItem eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="UploadItem".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UploadItem.wrn
component UploadItem {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable upload preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UploadPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="UploadPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UploadPreview.wrn
component UploadPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable upload progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UploadProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="UploadProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UploadProgress.wrn
component UploadProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable uptime chart component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UptimeChart title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="UptimeChart".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UptimeChart.wrn
component UptimeChart {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable uptime metric component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UptimeMetric title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="UptimeMetric".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UptimeMetric.wrn
component UptimeMetric {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable url input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UrlInput id="id" name="name" label="Url" value="value" placeholder="placeholder" />Legacy mount name: data-component="UrlInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
id | string | Optional | "" |
name | string | Optional | "" |
label | string | Optional | "Url" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
help | string | Optional | "" |
error | string | Optional | "" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
autocomplete | string | Optional | "" |
This component does not declare a slot.
This component does not declare a custom event.
Installed source: components/UrlInput.wrn
component UrlInput {
+ props {
+ class = ""
+ id = ""
+ name = ""
+ label = "Url"
+ value = ""
+ placeholder = ""
+ help = ""
+ error = ""
+ required = false
+ disabled = false
+ readonly = false
+ autocomplete = ""
+ }
+ view {
+ <div class="space-y-2 {class}">
+ <label for="{id}" class="block text-sm font-semibold text-slate-800 dark:text-slate-200">{label}<span data-show="required" class="ml-1 text-red-500">*</span></label>
+ <input id="{id}" name="{name}" type="url" value="{value}" placeholder="{placeholder}" required="{required}" disabled="{disabled}" readonly="{readonly}" autocomplete="{autocomplete}" aria-invalid="{!!error}" aria-describedby="{id}-help {id}-error" class="min-h-11 w-full rounded-xl border bg-white px-3.5 py-2.5 text-slate-950 shadow-sm outline-none transition duration-200 placeholder:text-slate-400 focus:border-violet-500 focus:ring-4 focus:ring-violet-500/10 disabled:cursor-not-allowed disabled:bg-slate-100 disabled:opacity-70 dark:bg-slate-950 dark:text-white {error ? 'border-red-500 focus:border-red-500 focus:ring-red-500/10' : 'border-slate-300 dark:border-slate-700'}" />
+ <p id="{id}-help" data-show="help && !error" class="text-sm text-slate-500 dark:text-slate-400">{help}</p>
+ <p id="{id}-error" data-show="error" role="alert" class="text-sm font-medium text-red-600 dark:text-red-400">{error}</p>
+ </div>
+ }
+}
+Reusable usage pricing table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UsagePricingTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="UsagePricingTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UsagePricingTable.wrn
component UsagePricingTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable use case selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UseCaseSelector label="UseCase" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="UseCaseSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "UseCase" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UseCaseSelector.wrn
component UseCaseSelector {
+ props {
+ label = "UseCase"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable user card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UserCard title="title" description="description" href="href" />Legacy mount name: data-component="UserCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UserCard.wrn
component UserCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--user {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable username input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<UsernameInput label="Username" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="UsernameInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Username" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/UsernameInput.wrn
component UsernameInput {
+ props {
+ label = "Username"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable value card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ValueCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ValueCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ValueCard.wrn
component ValueCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable values grid component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ValuesGrid title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="ValuesGrid".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ValuesGrid.wrn
component ValuesGrid {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable verification code input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VerificationCodeInput label="VerificationCode" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="VerificationCodeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "VerificationCode" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VerificationCodeInput.wrn
component VerificationCodeInput {
+ props {
+ label = "VerificationCode"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable verified badge component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VerifiedBadge label="Verified" variant="default" />Legacy mount name: data-component="VerifiedBadge".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Verified" |
variant | string | Optional | "default" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VerifiedBadge.wrn
component VerifiedBadge {
+ props {
+ label = "Verified"
+ variant = "default"
+ class = ""
+ }
+ view { <span class="wire-badge wire-badge--{variant} wire-catalog-badge wire-catalog-badge--verifiedbadge {class}">{label}<slot /></span> }
+}
+Reusable version selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VersionSelector label="Version" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="VersionSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Version" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VersionSelector.wrn
component VersionSelector {
+ props {
+ label = "Version"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable vertical tabs component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VerticalTabs eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="VerticalTabs".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VerticalTabs.wrn
component VerticalTabs {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable video card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VideoCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="VideoCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VideoCard.wrn
component VideoCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable video preview dialog component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VideoPreviewDialog title="title" description="description" open="false" closeLabel="Close" />Legacy mount name: data-component="VideoPreviewDialog".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
open | boolean | Optional | false |
closeLabel | string | Optional | "Close" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VideoPreviewDialog.wrn
component VideoPreviewDialog {
+ props {
+ title = ""
+ description = ""
+ open = false
+ closeLabel = "Close"
+ class = ""
+ }
+ view { <div data-show="open" class="wire-overlay wire-catalog-overlay {class}"><section role="dialog" aria-modal="true" aria-label="{title}" class="wire-dialog"><header><h2 data-show="title" class="wire-dialog__title">{title}</h2><p data-show="description" class="wire-dialog__description">{description}</p></header><slot /><button type="button" class="wire-btn wire-btn--ghost">{closeLabel}</button></section></div> }
+}
+Reusable video upload component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VideoUpload eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="VideoUpload".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VideoUpload.wrn
component VideoUpload {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable virtualized table component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VirtualizedTable title="title" description="description" empty="false" emptyText="No items available." />Legacy mount name: data-component="VirtualizedTable".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
empty | boolean | Optional | false |
emptyText | string | Optional | "No items available." |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VirtualizedTable.wrn
component VirtualizedTable {
+ props {
+ title = ""
+ description = ""
+ empty = false
+ emptyText = "No items available."
+ class = ""
+ }
+ view { <section class="wire-catalog-collection {class}"><header data-show="title || description"><h2 data-show="title">{title}</h2><p data-show="description">{description}</p></header><div data-show="!empty" role="list" class="wire-catalog-collection__items"><slot /></div><p data-show="empty" role="status" class="wire-muted">{emptyText}</p></section> }
+}
+Reusable vision section component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VisionSection eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="VisionSection".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VisionSection.wrn
component VisionSection {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable visually hidden component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VisuallyHidden />Legacy mount name: data-component="VisuallyHidden".
| Prop | Type | Requirement | Default |
|---|---|---|---|
className | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VisuallyHidden.wrn
component VisuallyHidden {
+ props {
+ className = ""
+ }
+ view {
+ <div class="sr-only {className}"><slot /></div>
+ }
+}
+Reusable voice script composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VoiceScriptComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="VoiceScriptComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VoiceScriptComposer.wrn
component VoiceScriptComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable voice script editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VoiceScriptEditor label="VoiceScript" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="VoiceScriptEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "VoiceScript" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VoiceScriptEditor.wrn
component VoiceScriptEditor {
+ props {
+ label = "VoiceScript"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable volume input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VolumeInput label="Volume" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="VolumeInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Volume" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VolumeInput.wrn
component VolumeInput {
+ props {
+ label = "Volume"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable volume slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<VolumeSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="VolumeSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/VolumeSlider.wrn
component VolumeSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable warning card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WarningCard title="title" description="description" href="href" />Legacy mount name: data-component="WarningCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WarningCard.wrn
component WarningCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--warning {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable webhook event card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebhookEventCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WebhookEventCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebhookEventCard.wrn
component WebhookEventCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable webhook flow diagram component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebhookFlowDiagram title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="WebhookFlowDiagram".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebhookFlowDiagram.wrn
component WebhookFlowDiagram {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable webhook payload viewer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebhookPayloadViewer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WebhookPayloadViewer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebhookPayloadViewer.wrn
component WebhookPayloadViewer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable webhook url input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebhookUrlInput label="WebhookUrl" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="WebhookUrlInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "WebhookUrl" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebhookUrlInput.wrn
component WebhookUrlInput {
+ props {
+ label = "WebhookUrl"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable webinar card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebinarCard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WebinarCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebinarCard.wrn
component WebinarCard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable webinar registration form component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WebinarRegistrationForm eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WebinarRegistrationForm".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WebinarRegistrationForm.wrn
component WebinarRegistrationForm {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable well component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Well />Legacy mount name: data-component="Well".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Well.wrn
component Well {
+ props {
+ class = ""
+ }
+ view { <div class="wire-well {class}"><slot /></div> }
+}
+Reusable whats app composer component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WhatsAppComposer eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WhatsAppComposer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WhatsAppComposer.wrn
component WhatsAppComposer {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable whats app number input component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WhatsAppNumberInput label="WhatsAppNumber" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="WhatsAppNumberInput".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "WhatsAppNumber" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WhatsAppNumberInput.wrn
component WhatsAppNumberInput {
+ props {
+ label = "WhatsAppNumber"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable whats app template editor component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WhatsAppTemplateEditor label="WhatsAppTemplate" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="WhatsAppTemplateEditor".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "WhatsAppTemplate" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WhatsAppTemplateEditor.wrn
component WhatsAppTemplateEditor {
+ props {
+ label = "WhatsAppTemplate"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable wide container component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WideContainer />Legacy mount name: data-component="WideContainer".
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WideContainer.wrn
component WideContainer {
+ props {
+ class = ""
+ }
+ view { <div class="wire-container wire-container--wide {class}"><slot /></div> }
+}
+Reusable wizard header component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WizardHeader eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="WizardHeader".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WizardHeader.wrn
component WizardHeader {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable wizard navigation component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WizardNavigation eyebrow="eyebrow" title="title" description="description" align="start" />Legacy mount name: data-component="WizardNavigation".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
align | string | Optional | "start" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WizardNavigation.wrn
component WizardNavigation {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ align = "start"
+ class = ""
+ }
+ view { <section class="wire-catalog-section wire-text--{align} {class}"><header data-show="eyebrow || title || description"><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h2 data-show="title">{title}</h2><p data-show="description" class="wire-muted">{description}</p></header><slot /></section> }
+}
+Reusable wizard component.
Components are auto-discovered. Use the component directly in any .wrn view:
<Wizard eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="Wizard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/Wizard.wrn
component Wizard {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable workflow canvas preview component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WorkflowCanvasPreview eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WorkflowCanvasPreview".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WorkflowCanvasPreview.wrn
component WorkflowCanvasPreview {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable workflow progress component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WorkflowProgress title="title" value="value" description="description" summary="summary" loading="false" />Legacy mount name: data-component="WorkflowProgress".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
value | string | Optional | "" |
description | string | Optional | "" |
summary | string | Optional | "" |
loading | boolean | Optional | false |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WorkflowProgress.wrn
component WorkflowProgress {
+ props {
+ title = ""
+ value = ""
+ description = ""
+ summary = ""
+ loading = false
+ class = ""
+ }
+ view { <figure aria-label="{summary || title}" class="wire-card wire-catalog-visualization {class}"><figcaption><strong data-show="title">{title}</strong><span data-show="value" class="wire-metric__value">{value}</span><span data-show="description" class="wire-muted">{description}</span></figcaption><div data-show="loading" class="wire-skeleton wire-catalog-visualization__skeleton"></div><div data-show="!loading" class="wire-catalog-visualization__content"><slot /></div><p data-show="summary" class="wire-visually-hidden">{summary}</p></figure> }
+}
+Reusable workspace card component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WorkspaceCard title="title" description="description" href="href" />Legacy mount name: data-component="WorkspaceCard".
| Prop | Type | Requirement | Default |
|---|---|---|---|
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WorkspaceCard.wrn
component WorkspaceCard {
+ props {
+ title = ""
+ description = ""
+ href = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card wire-catalog-card--workspace {class}"><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-catalog-card__link"><span class="wire-visually-hidden">Open {title}</span></a></article> }
+}
+Reusable workspace selector component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WorkspaceSelector label="Workspace" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="WorkspaceSelector".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Workspace" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WorkspaceSelector.wrn
component WorkspaceSelector {
+ props {
+ label = "Workspace"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable workspace switcher component.
Components are auto-discovered. Use the component directly in any .wrn view:
<WorkspaceSwitcher eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="WorkspaceSwitcher".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/WorkspaceSwitcher.wrn
component WorkspaceSwitcher {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Reusable year picker component.
Components are auto-discovered. Use the component directly in any .wrn view:
<YearPicker label="Year" name="name" value="value" placeholder="placeholder" type="text" />Legacy mount name: data-component="YearPicker".
| Prop | Type | Requirement | Default |
|---|---|---|---|
label | string | Optional | "Year" |
name | string | Optional | "" |
value | string | Optional | "" |
placeholder | string | Optional | "" |
type | string | Optional | "text" |
required | boolean | Optional | false |
disabled | boolean | Optional | false |
readonly | boolean | Optional | false |
help | string | Optional | "" |
error | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/YearPicker.wrn
component YearPicker {
+ props {
+ label = "Year"
+ name = ""
+ value = ""
+ placeholder = ""
+ type = "text"
+ required = false
+ disabled = false
+ readonly = false
+ help = ""
+ error = ""
+ class = ""
+ }
+ view { <label class="wire-field wire-catalog-field {class}"><span class="wire-label">{label}<span data-show="required" class="wire-required"> *</span></span><input name="{name}" value="{value}" placeholder="{placeholder}" type="{type}" required="{required}" disabled="{disabled}" readonly="{readonly}" aria-invalid="{error ? 'true' : 'false'}" class="wire-input" /><span data-show="help && !error" class="wire-field-message wire-field-message--help">{help}</span><span data-show="error" role="alert" class="wire-field-message wire-field-message--error">{error}</span><slot /></label> }
+}
+Reusable zoom slider component.
Components are auto-discovered. Use the component directly in any .wrn view:
<ZoomSlider eyebrow="eyebrow" title="title" description="description" href="href" actionLabel="Learn more" />Legacy mount name: data-component="ZoomSlider".
| Prop | Type | Requirement | Default |
|---|---|---|---|
eyebrow | string | Optional | "" |
title | string | Optional | "" |
description | string | Optional | "" |
href | string | Optional | "" |
actionLabel | string | Optional | "Learn more" |
image | string | Optional | "" |
alt | string | Optional | "" |
class | string | Optional | "" |
defaultThis component does not declare a custom event.
Installed source: components/ZoomSlider.wrn
component ZoomSlider {
+ props {
+ eyebrow = ""
+ title = ""
+ description = ""
+ href = ""
+ actionLabel = "Learn more"
+ image = ""
+ alt = ""
+ class = ""
+ }
+ view { <article class="wire-card wire-catalog-card {class}"><img data-show="image" src="{image}" alt="{alt}" class="wire-catalog-card__image" /><span data-show="eyebrow" class="wire-eyebrow">{eyebrow}</span><h3 data-show="title">{title}</h3><p data-show="description">{description}</p><slot /><a data-show="href" href="{href}" class="wire-btn wire-btn--ghost">{actionLabel}</a></article> }
+}
+Examples are tied to installed 0.2.64 package documentation. The focused snippets in guides are source-verified; standalone runnable projects and CI compilation are tracked as remaining work.
This path creates a server-rendered page, validated API route, middleware, and realtime next step. It requires approved registry access and Bun 1.3.x; this site was verified with Bun 1.3.14.
bunx @wrnexus/cli@0.2.64 create my-app
cd my-app
bun install
diff --git a/app/pages/guides/api-routes.wrn b/app/pages/guides/api-routes.wrn
index 128a9797..c3cdd757 100644
--- a/app/pages/guides/api-routes.wrn
+++ b/app/pages/guides/api-routes.wrn
@@ -7,8 +7,8 @@ page APIroutes {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64API routes
Export GET, POST, PUT, PATCH, or DELETE from app/api files. Validate request bodies, enforce authentication and authorization, cap request sizes, and return Web Responses.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/authentication.wrn b/app/pages/guides/authentication.wrn
index ed609aa0..846f94ff 100644
--- a/app/pages/guides/authentication.wrn
+++ b/app/pages/guides/authentication.wrn
@@ -7,8 +7,8 @@ page Authentication {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Authentication
Configure session authentication, log users in through supported auth helpers, and read identity from context. Cookie flags, rotation, expiry, and secret storage remain deployment responsibilities.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/authorization.wrn b/app/pages/guides/authorization.wrn
index 8b7a8aae..4e932ea0 100644
--- a/app/pages/guides/authorization.wrn
+++ b/app/pages/guides/authorization.wrn
@@ -7,8 +7,8 @@ page Authorization {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Authorization
Authentication identifies; authorization decides. Enforce permissions in server routes and policies, including object ownership. UI hiding is never an authorization boundary.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/configuration-and-profiles.wrn b/app/pages/guides/configuration-and-profiles.wrn
index 929b9cb4..2fc6dc99 100644
--- a/app/pages/guides/configuration-and-profiles.wrn
+++ b/app/pages/guides/configuration-and-profiles.wrn
@@ -7,8 +7,8 @@ page Configurationandprofiles {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Configuration and profiles
wrnexus.config.ts owns styles, SEO, security, data, mobile, fonts, and profiles. Keep secrets in validated environment variables and review merged production configuration.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/database.wrn b/app/pages/guides/database.wrn
index fe5e4fcf..98686476 100644
--- a/app/pages/guides/database.wrn
+++ b/app/pages/guides/database.wrn
@@ -7,8 +7,8 @@ page Database {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Database
Configure SQLite or the installed supported driver, keep queries in named SQL blocks, generate typed functions, and apply migrations before traffic. Back up data and test rollback independently.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/deployment.wrn b/app/pages/guides/deployment.wrn
index 6c6eab96..eeec4257 100644
--- a/app/pages/guides/deployment.wrn
+++ b/app/pages/guides/deployment.wrn
@@ -7,8 +7,8 @@ page Deployment {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Deployment
Run bun run build, apply migrations, and start dist/server.js with Bun. Configure TLS, proxy trust, environment validation, health checks, graceful restarts, logs, backups, and restrictive security headers.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/forms-and-validation.wrn b/app/pages/guides/forms-and-validation.wrn
index f81301ac..172373f9 100644
--- a/app/pages/guides/forms-and-validation.wrn
+++ b/app/pages/guides/forms-and-validation.wrn
@@ -7,8 +7,8 @@ page Formsandvalidation {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Forms and validation
Define a v.object schema, use data-schema on the form, show field errors with data-error, and always call parseBody on the server. refine is server-only.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/i18n-and-themes.wrn b/app/pages/guides/i18n-and-themes.wrn
index f6a21443..93e8902f 100644
--- a/app/pages/guides/i18n-and-themes.wrn
+++ b/app/pages/guides/i18n-and-themes.wrn
@@ -7,8 +7,8 @@ page Internationalizationandthemes {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Internationalization and themes
Store locale JSON under app/locales and use translation directives. Themes resolve CSS tokens; ensure contrast, system preference behavior, persistence, and non-color cues.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/middleware.wrn b/app/pages/guides/middleware.wrn
index c8e8a059..42810cd1 100644
--- a/app/pages/guides/middleware.wrn
+++ b/app/pages/guides/middleware.wrn
@@ -7,8 +7,8 @@ page Middleware {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Middleware
Middleware receives context and next. Return next() to continue or return a Response to stop. Put request limits and trust-boundary controls before business logic.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/mobile.wrn b/app/pages/guides/mobile.wrn
index 9e868652..d2065327 100644
--- a/app/pages/guides/mobile.wrn
+++ b/app/pages/guides/mobile.wrn
@@ -7,8 +7,8 @@ page Mobile {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Mobile
Mobile capabilities are experimental in this preview. Test Capacitor permissions and lifecycle on each platform; do not assume every .wrn or browser API converts to native.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/observability.wrn b/app/pages/guides/observability.wrn
index 310227b1..4fd84f58 100644
--- a/app/pages/guides/observability.wrn
+++ b/app/pages/guides/observability.wrn
@@ -7,8 +7,8 @@ page Observability {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Observability
Use tracking middleware and sinks with redaction, sampling, stable request identifiers, alert ownership, and retention limits. Never capture registry tokens or session secrets.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/pages-and-components.wrn b/app/pages/guides/pages-and-components.wrn
index 1a128ed2..1d14fec8 100644
--- a/app/pages/guides/pages-and-components.wrn
+++ b/app/pages/guides/pages-and-components.wrn
@@ -7,8 +7,8 @@ page Pagesandcomponents {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Pages and components
Pages are routable, components are reusable, and layouts provide shared slots. Mount a component with data-component and keep browser state scoped and minimal.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/project-structure.wrn b/app/pages/guides/project-structure.wrn
index 7aa5f9ae..ecb9a851 100644
--- a/app/pages/guides/project-structure.wrn
+++ b/app/pages/guides/project-structure.wrn
@@ -7,8 +7,8 @@ page Projectstructure {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Project structure
Pages, components, layouts, APIs, middleware, schemas, database files, locales, realtime rooms, and styles live under app. Never edit app/routes.gen.ts, .wrnexus, or dist by hand.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/pubsub.wrn b/app/pages/guides/pubsub.wrn
index a09d1edf..c1f03f9f 100644
--- a/app/pages/guides/pubsub.wrn
+++ b/app/pages/guides/pubsub.wrn
@@ -7,8 +7,8 @@ page Pubsub {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Pub/sub
The in-process driver cannot cross processes. Use Redis where instances must share events, define channel ownership, and design for reconnects and duplicate delivery.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/queues.wrn b/app/pages/guides/queues.wrn
index 0e0ad504..c9a24ac9 100644
--- a/app/pages/guides/queues.wrn
+++ b/app/pages/guides/queues.wrn
@@ -7,8 +7,8 @@ page Queues {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Queues
Queue behavior is preview-level. Treat in-process work as non-durable, make handlers idempotent, cap retries, record failures, and choose a production persistence strategy.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/realtime.wrn b/app/pages/guides/realtime.wrn
index c59de7a7..d4b14ab7 100644
--- a/app/pages/guides/realtime.wrn
+++ b/app/pages/guides/realtime.wrn
@@ -7,8 +7,8 @@ page Realtime {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Realtime
defineRoom handles connection and messages. Validate message shapes, authorize subscriptions, restrict origins, bound payloads, and use pub/sub to scale across processes.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/routing.wrn b/app/pages/guides/routing.wrn
index 598ae6a0..ae515c0a 100644
--- a/app/pages/guides/routing.wrn
+++ b/app/pages/guides/routing.wrn
@@ -7,8 +7,8 @@ page Routing {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Routing
A page filename defines its URL; index maps to the directory root and bracket segments are dynamic parameters. API files under app/api expose HTTP method functions and receive a Context.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/security.wrn b/app/pages/guides/security.wrn
index a32c42d5..bc9d1cec 100644
--- a/app/pages/guides/security.wrn
+++ b/app/pages/guides/security.wrn
@@ -7,8 +7,8 @@ page Applicationsecurity {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Application security
Use CSP, CSRF, Trusted Types, session hardening, validation, origin checks, upload restrictions, encryption, request limits, and explicit CORS. See the security policy for reporting.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/server-data.wrn b/app/pages/guides/server-data.wrn
index cb6fbe7d..be1e5859 100644
--- a/app/pages/guides/server-data.wrn
+++ b/app/pages/guides/server-data.wrn
@@ -7,8 +7,8 @@ page Serverdata {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Server data
Use an ssr API binding, return the desired response field, and render it with a server #each block. Values are escaped. Avoid fetching private data through a route that lacks authorization.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/testing.wrn b/app/pages/guides/testing.wrn
index e90dab21..922a36c7 100644
--- a/app/pages/guides/testing.wrn
+++ b/app/pages/guides/testing.wrn
@@ -7,8 +7,8 @@ page Testing {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Testing
Use Bun tests and @wrnexus/test helpers. Cover server HTML, API status and validation, authorization failures, reactive behavior, and a production startup smoke test.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/troubleshooting.wrn b/app/pages/guides/troubleshooting.wrn
index 7690475a..7f3e7ecc 100644
--- a/app/pages/guides/troubleshooting.wrn
+++ b/app/pages/guides/troubleshooting.wrn
@@ -7,8 +7,8 @@ page Troubleshooting {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Troubleshooting
Confirm Bun and package versions, regenerate docs/routes through supported commands, read the first compiler diagnostic, check file naming, validate config, and reproduce under a production build.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/upgrading.wrn b/app/pages/guides/upgrading.wrn
index e94bdcb3..a62d5a74 100644
--- a/app/pages/guides/upgrading.wrn
+++ b/app/pages/guides/upgrading.wrn
@@ -7,8 +7,8 @@ page Upgrading {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Upgrading
Back up and commit first, then use wrnexus update --latest as documented by the installed CLI. Review migrations and keep every @wrnexus package aligned. Current release: 0.2.64.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/uploads.wrn b/app/pages/guides/uploads.wrn
index db52b4c3..8ee68897 100644
--- a/app/pages/guides/uploads.wrn
+++ b/app/pages/guides/uploads.wrn
@@ -7,8 +7,8 @@ page Uploads {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Uploads
Configure named stores, accepted MIME/extensions, and maxBytes. Random keys avoid path traversal. Private files require an authenticated serving route; v1 buffers each file in memory.
Release scope
This guide describes installed 0.2.64 capabilities. Follow linked package declarations for exact signatures; undocumented behavior is not guaranteed.
diff --git a/app/pages/guides/workspaces-and-gateway.wrn b/app/pages/guides/workspaces-and-gateway.wrn
index 8e6e37e0..10222440 100644
--- a/app/pages/guides/workspaces-and-gateway.wrn
+++ b/app/pages/guides/workspaces-and-gateway.wrn
@@ -7,8 +7,8 @@ page Workspacesandgateway {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Preview guide · 0.2.64Workspaces and gateway
A workspace runs isolated applications behind one domain-routing gateway. Add an application from the workspace root; the CLI scaffolds apps/reports and registers it in wrnexus.workspace.ts:
wrnexus workspace add reports --domain=reports.localhost
bun install
bun run dev
Forward authentication
Point protected applications at a dedicated verifier endpoint. The verifier must return 2xx for an authenticated session, 401/403 to deny access, or an HTTP redirect to begin browser login.
// wrnexus.workspace.ts
diff --git a/app/pages/index.wrn b/app/pages/index.wrn
index be1c24c9..b11a6a1c 100644
--- a/app/pages/index.wrn
+++ b/app/pages/index.wrn
@@ -7,8 +7,8 @@ page Home {
view {
- W WRNexusJS
- Menu
+ W WRNexusJS
+ Menu
WRNexusJS v0.2.64
Build from the server.
Ship only what matters.
WRNexusJS is an SSR-first, Bun-native full-stack framework. Build typed pages, APIs, validated forms, realtime rooms, secure sessions, workspaces, and optional mobile experiences with the .wrn component language.
Private developer preview. Request access to the package registry.
app/pages/dashboard.wrnpage Dashboard {
ssr { api tasks GET /api/tasks { return tasks } }
view {
diff --git a/app/pages/language.wrn b/app/pages/language.wrn
index fb45a46d..f32e703e 100644
--- a/app/pages/language.wrn
+++ b/app/pages/language.wrn
@@ -7,8 +7,8 @@ page Thewrnlanguage {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
Language reference · 0.2.64The .wrn language
File anatomy
page Account {
layout = "public"
seo { title = "Account" description = "Manage your account." }
diff --git a/app/pages/license.wrn b/app/pages/license.wrn
index 4a32085f..e2d1f3f8 100644
--- a/app/pages/license.wrn
+++ b/app/pages/license.wrn
@@ -7,8 +7,8 @@ page License {
view {
- W WRNexusJS
- Browse documentation
+ W WRNexusJS
+ Browse documentation
License
Owner decision requiredThis documentation repository contains no public license file, and the packages are unavailable from the public npm registry. No open-source license or redistribution right should be inferred.
Approved preview users must follow the private/commercial terms supplied by WorkRoot. Contact WorkRoot before copying, redistributing, or using WRNexusJS in production.
diff --git a/app/pages/packages.wrn b/app/pages/packages.wrn
index 936ca419..c6ee1e1b 100644
--- a/app/pages/packages.wrn
+++ b/app/pages/packages.wrn
@@ -11,10 +11,10 @@ page Packages {
W WRNexusJS
-
+
- Browse documentation
+ Browse documentation
26 focused packagesPackage reference
Everything in the framework, organized by responsibility and documented from the published 0.2.64 APIs.
Showing {category} packages
AI@wrnexus/ai
Server-side Anthropic client with generation and streaming.
Open documentation →
diff --git a/app/pages/packages/ai.wrn b/app/pages/packages/ai.wrn
index c71e17db..43a2833b 100644
--- a/app/pages/packages/ai.wrn
+++ b/app/pages/packages/ai.wrn
@@ -9,13 +9,12 @@ page wrnexusai {
W WRNexusJS
-
+
- Browse documentation
-
-
- AI · Preview@wrnexus/ai
Server-side Anthropic client with generation and streaming.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/ai@0.2.64
Request preview access. Never put registry tokens in source control.
A tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps — generate and stream text with Claude from any server-side code.
+ Browse documentation
+
+ AI · Package reference@wrnexus/ai
Server-side Anthropic client with generation and streaming.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/ai@0.2.64
Request preview access. Never put registry tokens in source control.
A tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps — generate and stream text with Claude from any server-side code.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/ai is a thin, dependency-free wrapper over the Anthropic Messages API, built on fetch (Bun-native, no SDK). Use it in API routes, jobs, or middleware to call Claude. It defaults to the most capable model, claude-opus-4-8, reads your key from ANTHROPIC_API_KEY, and supports both one-shot generation and streaming.
@@ -110,7 +109,7 @@ export const POST = async (ctx) => {
Zero dependencies — no @anthropic-ai/sdk; talks to the Messages API directly.
Defaults to claude-opus-4-8. Pass { model } for a different model (e.g.
"claude-sonnet-5" for speed/cost, "claude-haiku-4-5" for the fastest).
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* @wrnexus/ai — a tiny, zero-dependency Claude (Anthropic) client for WRNexusJS apps.
*
* Use it in API routes, jobs, or anywhere server-side to generate text with Claude.
@@ -177,7 +176,7 @@ interface AI {
declare function createAI(config?: AIConfig): AI;
export { type AI, type AIConfig, AIError, type Effort, type GenerateOptions, type Message, type Role, createAI };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Return generated JSON from an API route
// app/api/summarize.ts — summarize posted text
+
Examples
Copy-ready examples from the installed package documentation.
Return generated JSON from an API route
// app/api/summarize.ts — summarize posted text
import { createAI } from "@wrnexus/ai";
const ai = createAI();
diff --git a/app/pages/packages/authz.wrn b/app/pages/packages/authz.wrn
index e1b965bf..b7937fa6 100644
--- a/app/pages/packages/authz.wrn
+++ b/app/pages/packages/authz.wrn
@@ -9,13 +9,12 @@ page wrnexusauthz {
W WRNexusJS
-
+
- Browse documentation
-
-
- Security · Preview@wrnexus/authz
Role, permission, policy, and authorization guards.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/authz@0.2.64
Request preview access. Never put registry tokens in source control.
Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an authorize() guard.
+ Browse documentation
+
+ Security · Package reference@wrnexus/authz
Role, permission, policy, and authorization guards.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/authz@0.2.64
Request preview access. Never put registry tokens in source control.
Composable authorization for WRNexusJS — role-based (RBAC), policy-based (PBAC), and attribute-based (ABAC) access control that reduces to a boolean check plus an authorize() guard.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/authz is a small, server-side authorization toolkit. It gives you three interchangeable models — RBAC (roles → permissions), PBAC (policy predicates), and ABAC (attribute matchers) — that all collapse to a boolean | Promise<boolean> decision. Wrap any decision in a Middleware guard (authorize, requireRole, requirePermission) to protect WRNexusJS routes. Reach for it whenever a route or action needs to be gated on who the user is, what roles they hold, or attributes of the user and the resource. It plugs into @wrnexus/core by reading ctx.user as the authorization subject.
@@ -123,7 +122,7 @@ app.put(
Bun-only — like the rest of WRNexusJS, this package targets the Bun runtime; Node is not supported.
Works with [@wrnexus/core](../core) — the guards return Middleware and read the subject from ctx.user on the request Context. Both types are imported from @wrnexus/core.
Policy combinators (any, all) and authorize are async-aware, so policies may return a Promise<boolean> (e.g. for a database ownership check).
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { Context, Middleware } from '@wrnexus/core';
+
Complete TypeScript API
Generated from the exact installed package declarations.
import { Context, Middleware } from '@wrnexus/core';
/**
* @wrnexus/authz — authorization: role-based (RBAC), policy-based (PBAC), and
@@ -169,7 +168,7 @@ declare function requireRole(...roles: string[]): Middleware;
declare function requirePermission(rbac: Rbac, permission: string): Middleware;
export { type Policy, type Rbac, type Subject, all, any, attr, authorize, defineRbac, hasRole, requirePermission, requireRole };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
RBAC
import { defineRbac, hasRole } from "@wrnexus/authz";
+
Examples
Copy-ready examples from the installed package documentation.
RBAC
import { defineRbac, hasRole } from "@wrnexus/authz";
const rbac = defineRbac({
admin: ["*"],
diff --git a/app/pages/packages/cli.wrn b/app/pages/packages/cli.wrn
index 24e74d8b..19fe6905 100644
--- a/app/pages/packages/cli.wrn
+++ b/app/pages/packages/cli.wrn
@@ -9,13 +9,12 @@ page wrnexuscli {
W WRNexusJS
-
+
- Browse documentation
-
-
- Tooling · Preview@wrnexus/cli
Create, develop, build, generate, test, and maintain WRNexusJS apps.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/cli@0.2.64
Request preview access. Never put registry tokens in source control.
The wrnexus command-line tool that scaffolds, runs, builds, tests, and manages WRNexusJS apps.
+ Browse documentation
+
+ Tooling · Package reference@wrnexus/cli
Create, develop, build, generate, test, and maintain WRNexusJS apps.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/cli@0.2.64
Request preview access. Never put registry tokens in source control.
The wrnexus command-line tool that scaffolds, runs, builds, tests, and manages WRNexusJS apps.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/cli provides the wrnexus executable — the single entry point for developing a WRNexusJS app. It runs the HMR dev server, produces a self-contained production build, scaffolds apps/pages/components, drives database migrations, regenerates typed routes and queries, runs tests, and manages configuration profiles. It also scaffolds multi-app monorepos and serves them behind a domain-routing gateway. This is a CLI/build-time package (it shells out to the Bun binary for the dev child and tests) and it also exports the workspace config types via a subpath.
@@ -138,8 +137,8 @@ export default config;
Bun-only. The CLI runs on Bun, spawns the Bun binary for the dev child and bun test, and the production build uses Bun.build. Node is not supported.
Orchestrates the rest of the framework: @wrnexus/dev-server (dev/prod server + gateway), @wrnexus/router (route + typed-routes codegen), @wrnexus/compiler (.wrn → .ts), @wrnexus/db (migrations, typed queries), @wrnexus/styles (config, profiles, .env, themes, styles), @wrnexus/ui (ejectable Wire UI components), @wrnexus/validation, @wrnexus/csr, and @wrnexus/i18n.
Reads wrnexus.config.ts for db / databases, theme, styles, seo, security, i18n, and profiles, and wrnexus.workspace.ts for the gateway.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
#!/usr/bin/env bun
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Create and run a single application
bunx @wrnexus/cli create customer-portal
+Complete TypeScript API
Generated from the exact installed package declarations.
#!/usr/bin/env bun
+
Examples
Copy-ready examples from the installed package documentation.
Create and run a single application
bunx @wrnexus/cli create customer-portal
cd customer-portal
bun install
bun run dev
Add routes and shared UI to an existing app
wrnexus generate page reports/monthly
diff --git a/app/pages/packages/compiler.wrn b/app/pages/packages/compiler.wrn
index 4d2db103..a87e46be 100644
--- a/app/pages/packages/compiler.wrn
+++ b/app/pages/packages/compiler.wrn
@@ -9,13 +9,12 @@ page wrnexuscompiler {
W WRNexusJS
-
+
- Browse documentation
-
-
- Core · Preview@wrnexus/compiler
Parser and code generators for the .wrn language.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/compiler@0.2.64
Request preview access. Never put registry tokens in source control.
Compiler for the .wrn language — tokenizes, parses, and lowers .wrn page and component files to TypeScript.
+ Browse documentation
+
+ Core · Package reference@wrnexus/compiler
Parser and code generators for the .wrn language.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/compiler@0.2.64
Request preview access. Never put registry tokens in source control.
Compiler for the .wrn language — tokenizes, parses, and lowers .wrn page and component files to TypeScript.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/compiler turns .wrn source into TypeScript that targets the framework's runtime primitives. A .wrn file declares either a page (a route) or a component (a reusable, prop-driven fragment) with blocks for state, view (plain HTML), seo, style, functions, api, ssr/client data bindings, and realtime websocket handlers. The pipeline is source → Lexer → parse() → PageAst → generate() → TypeScript. It is a build/server-side library — the WRNexusJS dev loader calls it to compile .wrn files on the fly, surfacing ParseError as a readable error page.
@@ -115,7 +114,7 @@ lx.next(); // { type: "lbrace", value: "{", pos: 1
- Pure TypeScript with no runtime dependencies; runs under Bun as part of the WRNexusJS toolchain (Node is not supported).
- Generated modules target WRNexusJS runtime primitives (
data-scope, data-text, data-on-*, data-for, data-component, __wrnexus*/__wire* helpers) — consume the output within a WRNexusJS app, e.g. via @wrnexus/core's dev loader.
-
Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* Recursive-descent parser for `.wrn`, producing a small AST.
*
* Grammar (subset of the vision, but real):
@@ -374,7 +373,7 @@ declare function compileWireFile(source: string, filePath?: string): string;
declare function compile(source: string): CompileResult;
export { type ApiBlock, type Attr, type CompileResult, type DataApiBlock, type DataMode, LexError, Lexer, type ModeFunctionsBlock, NativeCompileError, type PageAst, ParseError, type PropDecl, type RealtimeBlock, type SeoBlock, type StateDecl, type ViewNode, compile, compileNativeWireFile, compileWireFile, eraseFunctionTypes, generate, generateNative, inferredRuntimeType, parse, runtimeTypeOf };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Compile a page
import { compileWireFile } from "@wrnexus/compiler";
+
Examples
Copy-ready examples from the installed package documentation.
Compile a page
import { compileWireFile } from "@wrnexus/compiler";
const ts = compileWireFile(`
page Home {
diff --git a/app/pages/packages/core.wrn b/app/pages/packages/core.wrn
index 2a45e7fe..b8da13b3 100644
--- a/app/pages/packages/core.wrn
+++ b/app/pages/packages/core.wrn
@@ -9,13 +9,12 @@ page wrnexuscore {
W WRNexusJS
-
+
- Browse documentation
-
-
- Core · Preview@wrnexus/core
Contexts, middleware, security, sessions, caching, JSX, and realtime.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/core@0.2.64
Request preview access. Never put registry tokens in source control.
The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.
+ Browse documentation
+
+ Core · Package reference@wrnexus/core
Contexts, middleware, security, sessions, caching, JSX, and realtime.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/core@0.2.64
Request preview access. Never put registry tokens in source control.
The framework core: the request Context, middleware contract, and the security, session, caching, streaming, realtime, and JSX primitives every other WRNexusJS package builds on.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/core is the shared foundation of WRNexusJS. It defines the Context object that flows through every middleware, page, and API route, plus the Middleware/Next contract they implement. On top of that it ships the building blocks a real app needs: cookie-backed sessions, password auth, CSRF protection, rate limiting, request logging, HTTP + in-memory caching, file uploads, streaming/SSE responses, WebSocket "rooms", security headers/CORS, and a server-side JSX runtime that renders to HTML strings. Everything here is server-side and Bun-native (it uses Bun.password, Bun.write, the web-standard Request/Response, and crypto). You depend on it directly and transitively through the rest of the framework.
@@ -210,7 +209,7 @@ return new Response(html.toString(), { headers: { "content-type&q
compatible with [@wrnexus/pubsub](../pubsub); the security, auth, and JSX primitives here are consumed by the WRNexusJS server/router packages.
Subpath exports: @wrnexus/core/jsx-runtime and @wrnexus/core/jsx-dev-runtime
for TypeScript's automatic JSX transform.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
export { Fragment, Html, Component as JSXComponent, Props as JSXProps, Renderable, jsx, jsxs, mustache } from './jsx-runtime.js';
+
Complete TypeScript API
Generated from the exact installed package declarations.
export { Fragment, Html, Component as JSXComponent, Props as JSXProps, Renderable, jsx, jsxs, mustache } from './jsx-runtime.js';
interface CookieOptions {
path?: string;
@@ -927,7 +926,7 @@ declare function resolveRequestUrl(req: Request, trustProxy?: boolean): URL;
declare function withSecurityHeaders(req: Request, res: Response, mode: Mode, security?: SecurityConfig, nonce?: string): Response;
export { type AsyncSessionBackend, type Bucket, CSRF_COOKIE, CSRF_HEADER, type CacheControlOptions, type ContentSecurityPolicyConfig, type Context, type CookieOptions, type CookieStore, type CorsConfig, type CorsOrigin, type CspDirectiveValue, type HstsConfig, type LocalStorageSnapshot, type Middleware, type Mode, type Next, type PageComponent, type PageMeta, type PermissionsPolicyConfig, type RateLimitOptions, type RateLimitStore, type RawSocket, type RealtimeBridge, type RealtimeBus, type RealtimeConnectMeta, type RealtimeEnvelope, type RealtimeHandler, type RealtimeRegistry, type RealtimeSocket, type RequestLoggerOptions, type RequestRecord, type RequireAuthOptions, type Room, type RoomAuthInfo, type RoomClient, type RoomDefinition, type RoomHandlers, SESSION_USER_KEY, type SaveUploadOptions, type SavedUpload, type SecurityConfig, type SeoConfig, type ServerSentEvent, type SessionBackend, type SessionEntry, type SessionStore, type StreamResponseInit, type TFunction, TTLCache, type Target, type TrustedTypesConfig, UploadError, bridgeRealtime, cacheControl, collectUploads, createContext, createCorsPreflightResponse, createRealtimeRegistry, csrfProtection, csrfToken, defaultKey, defineRoom, escapeHtml, etag, getUser, hashPassword, isRoomDefinition, isSafeIslandName, isSafeRequestPath, isWebSocketOriginAllowed, loadSession, logIn, logOut, notModified, peerKey, proxyKey, rateLimit, renderDevError, renderError, renderNotFound, renderProdError, renderStatusPage, requestLogger, requireAuth, resolveRequestUrl, sanitizeFilename, saveUpload, sessionAuth, setSessionBackend, sse, streamResponse, verifyCsrf, verifyPassword, withCacheControl, withContextHeaders, withSecurityHeaders };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
A minimal middleware chain
import {
+
Examples
Copy-ready examples from the installed package documentation.
A minimal middleware chain
import {
createContext,
withContextHeaders,
sessionAuth,
diff --git a/app/pages/packages/csr.wrn b/app/pages/packages/csr.wrn
index 0036be46..9d7696b9 100644
--- a/app/pages/packages/csr.wrn
+++ b/app/pages/packages/csr.wrn
@@ -9,13 +9,12 @@ page wrnexuscsr {
W WRNexusJS
-
+
- Browse documentation
-
-
- Frontend · Preview@wrnexus/csr
Reactive, navigation, and realtime browser runtimes.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/csr@0.2.64
Request preview access. Never put registry tokens in source control.
The browser-side client runtime for WRNexusJS — generic, self-contained JS that hydrates server-rendered pages with reactivity, client-side navigation, and realtime rooms.
+ Browse documentation
+
+ Frontend · Package reference@wrnexus/csr
Reactive, navigation, and realtime browser runtimes.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/csr@0.2.64
Request preview access. Never put registry tokens in source control.
The browser-side client runtime for WRNexusJS — generic, self-contained JS that hydrates server-rendered pages with reactivity, client-side navigation, and realtime rooms.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/csr holds the three client runtimes that WRNexusJS serves to the browser. Components are authored as .wrn files and rendered on the server; this package provides the single, generic runtime that hydrates that HTML in the browser — there are no per-component browser bundles. Each runtime is exported as a plain-JS string (no build step, no imports) intended to be served verbatim from a well-known URL:
@@ -131,7 +130,7 @@ room.send({ type: "chat", user: "ada", text: "hi&q
Browser runtimes are self-contained (no imports, no build step) and idempotent, so re-hydration after navigation or HMR is safe.
Designed for a strict CSP: the reactive expression evaluator avoids eval/new Function (no unsafe-eval), and DOM swaps use importNode/attribute writes rather than innerHTML (Trusted-Types friendly).
Peer packages: rendered .wrn components and the serving layer come from @wrnexus/core (the sole dependency); pages are rendered by the WRNexusJS dev/prod server.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* Browser reactive runtime (Point 2: reactive directives).
*
* Served verbatim at `/__wrnexus/reactive.js` for any page that contains a
@@ -207,7 +206,7 @@ declare function getNavRuntime(): string;
declare function getRealtimeRuntime(): string;
export { NAV_RUNTIME, REACTIVE_RUNTIME, REALTIME_RUNTIME, getNavRuntime, getReactiveRuntime, getRealtimeRuntime };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Server side — serve the runtime strings from your router (example with Bun.serve)
import { getReactiveRuntime, getNavRuntime, getRealtimeRuntime } from "@wrnexus/csr";
+
Examples
Copy-ready examples from the installed package documentation.
Server side — serve the runtime strings from your router (example with Bun.serve)
import { getReactiveRuntime, getNavRuntime, getRealtimeRuntime } from "@wrnexus/csr";
const routes: Record<string, string> = {
"/__wrnexus/reactive.js": getReactiveRuntime(),
diff --git a/app/pages/packages/db.wrn b/app/pages/packages/db.wrn
index bd81ec8d..c90ab2b5 100644
--- a/app/pages/packages/db.wrn
+++ b/app/pages/packages/db.wrn
@@ -9,13 +9,12 @@ page wrnexusdb {
W WRNexusJS
-
+
- Browse documentation
-
-
- Data · Preview@wrnexus/db
Database adapters, typed queries, models, migrations, and sessions.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/db@0.2.64
Request preview access. Never put registry tokens in source control.
The database layer for WRNexusJS: TS models as the single source of truth for DDL, validation, and result typing, plus a driver-based Db client, migrations, and a sqlc-style query generator.
+ Browse documentation
+
+ Data · Package reference@wrnexus/db
Database adapters, typed queries, models, migrations, and sessions.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/db@0.2.64
Request preview access. Never put registry tokens in source control.
The database layer for WRNexusJS: TS models as the single source of truth for DDL, validation, and result typing, plus a driver-based Db client, migrations, and a sqlc-style query generator.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/db is the server-side data layer. You describe tables as TypeScript models (the v column builder + table()); those models drive migrations, coerce raw DB rows into typed objects, and feed the query generator. A thin Driver interface is implemented by adapters for SQLite (bun:sqlite), Postgres/MySQL (Bun.SQL), and MongoDB. The Db client adds ergonomics — model-mapped all/one, transactions, createTable, pagination, and batched relation loading. A process-wide registry (getDb/setDb) exposes configured connections to pages and API routes. Reach for it whenever a WRNexusJS app needs persistence.
@@ -150,7 +149,7 @@ const active = await repo.find({ active: true });
SessionBackend; getDb/setDb are wired by the WRNexusJS runtime from wrnexus.config.ts.
The mongodb npm package is an optional, lazily-imported peer — install it
only if you use @wrnexus/db/mongo. The core package stays dependency-free.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { M as Model } from './schema-tVurYsbL.js';
+
Complete TypeScript API
Generated from the exact installed package declarations.
import { M as Model } from './schema-tVurYsbL.js';
export { B as BaseType, C as Column, a as ColumnDef, b as Columns, t as table, v } from './schema-tVurYsbL.js';
import { a as Db, b as Dialect, R as Row } from './driver-DA53QHkO.js';
export { D as Driver, E as ExecResult, T as TxHandle, c as createDb, d as createTableSql } from './driver-DA53QHkO.js';
@@ -303,7 +302,7 @@ interface RelationOptions<C> {
declare function loadRelated<P extends Row, C extends Row = Row>(db: Db, parents: P[], opts: RelationOptions<C>): Promise<(P & Record<string, C | C[] | null>)[]>;
export { Db, Dialect, type Migration, Model, type ModelRef, type PageOptions, type Paginated, type QueryDef, type QueryKind, type RelationOptions, Row, appliedMigrations, closeDatabases, databaseNames, generateQueriesFile, getDb, hasDb, loadMigrations, loadRelated, migrate, paginate, parseMigration, parseQueries, registerDb, rollback, scaffoldMigration, setDb, status };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Define models, connect, create tables, and query with typed results
import { v, table, createDb } from "@wrnexus/db";
+
Examples
Copy-ready examples from the installed package documentation.
Define models, connect, create tables, and query with typed results
import { v, table, createDb } from "@wrnexus/db";
import { sqlite } from "@wrnexus/db/sqlite";
const users = table<{ id: number; email: string; name: string | null }>("users", {
diff --git a/app/pages/packages/dev-server.wrn b/app/pages/packages/dev-server.wrn
index a78d2400..498ec918 100644
--- a/app/pages/packages/dev-server.wrn
+++ b/app/pages/packages/dev-server.wrn
@@ -9,13 +9,12 @@ page wrnexusdevserver {
W WRNexusJS
-
+
- Browse documentation
-
-
- Runtime · Preview@wrnexus/dev-server
Development and production servers, HMR, assets, and gateways.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/dev-server@0.2.64
Request preview access. Never put registry tokens in source control.
The WRNexusJS HTTP + WebSocket server runtime — request dispatch, SSR document assembly, live-reload (HMR), and the portable production handler.
+ Browse documentation
+
+ Runtime · Package reference@wrnexus/dev-server
Development and production servers, HMR, assets, and gateways.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/dev-server@0.2.64
Request preview access. Never put registry tokens in source control.
The WRNexusJS HTTP + WebSocket server runtime — request dispatch, SSR document assembly, live-reload (HMR), and the portable production handler.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
This package is the server runtime that powers a WRNexusJS app in both development and production. A single request runtime (createHandlers) owns HTTP/WebSocket dispatch and SSR document assembly; it knows nothing about _how_ modules and assets are produced, so the dev and prod entry points wire in different backends: dev uses dynamic module loading plus on-the-fly bundling and injects a live-reload client; prod uses a static, pre-built manifest with cache-immutable assets. The package also ships a multi-app gateway (route several apps by Host header behind one port) and a portable node:http adapter for WinterCG hosts. It is entirely server-side and Bun-native (Bun.serve, Bun.file, Bun.gzipSync).
@@ -227,7 +226,7 @@ await startGateway({
Responses are gzipped when the client accepts it and the body is a buffered, compressible payload ≥ 1 KB; streaming/SSE responses opt out via Cache-Control: no-transform.
</content>
-</invoke>
Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { Mode, Middleware, SeoConfig, SecurityConfig, RealtimeBus, RealtimeConnectMeta } from '@wrnexus/core';
+</invoke>
Complete TypeScript API
Generated from the exact installed package declarations.
import { Mode, Middleware, SeoConfig, SecurityConfig, RealtimeBus, RealtimeConnectMeta } from '@wrnexus/core';
import { Router } from '@wrnexus/router';
import { ResolvedTheme, MobileConfig, PwaConfig, StylesConfig, ThemeConfig } from '@wrnexus/styles';
import { ResolvedI18n, I18nConfig } from '@wrnexus/i18n';
@@ -655,7 +654,7 @@ interface RunningServer {
declare function startServer(opts: ServeOptions): Promise<RunningServer>;
export { type AssetServer, type FetchHandler, type GatewayApp, type GatewayAuth, type GatewayOptions, type GatewaySecurity, RESTART_EXIT_CODE, type RunningGateway, type RunningServer, type RuntimeDeps, type ServeOptions, type WsData, createHandlers, createProductionHandlers, createProductionServer, nodeListener, serveNode, startGateway, startServer, toRequest, writeResponse };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Programmatic dev server
import { startServer } from "@wrnexus/dev-server";
+
Examples
Copy-ready examples from the installed package documentation.
Programmatic dev server
import { startServer } from "@wrnexus/dev-server";
const server = await startServer({
appDir: "./app",
diff --git a/app/pages/packages/encryption.wrn b/app/pages/packages/encryption.wrn
index 33c610b1..9ed37cca 100644
--- a/app/pages/packages/encryption.wrn
+++ b/app/pages/packages/encryption.wrn
@@ -9,13 +9,12 @@ page wrnexusencryption {
W WRNexusJS
-
+
- Browse documentation
-
-
- Security · Preview@wrnexus/encryption
Hashing, HMAC, authenticated encryption, and key derivation.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/encryption@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free crypto helpers for WRNexusJS: authenticated symmetric encryption (AES-256-GCM), hashing, and HMAC signing.
+ Browse documentation
+
+ Security · Package reference@wrnexus/encryption
Hashing, HMAC, authenticated encryption, and key derivation.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/encryption@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free crypto helpers for WRNexusJS: authenticated symmetric encryption (AES-256-GCM), hashing, and HMAC signing.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
This package provides small, focused cryptographic primitives for server-side use: encrypting secrets/tokens/database fields at rest with AES-256-GCM, deriving keys from passwords via PBKDF2, computing SHA-256 digests, and signing/verifying payloads with HMAC-SHA256. It is built entirely on the standard Web Crypto API (crypto.subtle) plus btoa/atob and TextEncoder/TextDecoder — no third-party dependencies. Reach for it whenever you need to protect sensitive values or verify webhook signatures. All functions are async (Web Crypto is promise-based).
@@ -61,7 +60,7 @@ if (!ok) throw new Error("Invalid webhook signature");
No dependencies. The package has an empty dependency set; nothing is bundled beyond standard runtime APIs.
Algorithms: AES-256-GCM (encryption), PBKDF2 with 100k SHA-256 iterations (key derivation), SHA-256 (digest), HMAC-SHA256 (signing).
Keep generated/derived keys and HMAC secrets out of source control; treat them as first-class secrets.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* @wrnexus/encryption — authenticated symmetric encryption (AES-256-GCM) via
* WebCrypto, dependency-free. Use it to encrypt secrets, tokens, or database
* fields at rest.
@@ -91,7 +90,7 @@ declare function decrypt(payload: string, key: string): Promise<string>;
declare function deriveKey(password: string, salt: string): Promise<string>;
export { decrypt, deriveKey, encrypt, generateKey, hmacSign, hmacVerify, sha256 };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Symmetric encryption of a secret at rest
import { generateKey, encrypt, decrypt } from "@wrnexus/encryption";
+
Examples
Copy-ready examples from the installed package documentation.
Symmetric encryption of a secret at rest
import { generateKey, encrypt, decrypt } from "@wrnexus/encryption";
const key = await generateKey(); // store this safely (env/secret manager)
diff --git a/app/pages/packages/helpers.wrn b/app/pages/packages/helpers.wrn
index 001b50ed..52a9c644 100644
--- a/app/pages/packages/helpers.wrn
+++ b/app/pages/packages/helpers.wrn
@@ -9,13 +9,12 @@ page wrnexushelpers {
W WRNexusJS
-
+
- Browse documentation
-
-
- Tooling · Preview@wrnexus/helpers
Safe Context URL helpers and forward-auth login redirects.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/helpers@0.2.64
Request preview access. Never put registry tokens in source control.
Safe convenience helpers for common WRNexusJS application flows. The package uses standard Context, URL, and Response values and has no runtime dependency beyond @wrnexus/core.
+ Browse documentation
+
+ Tooling · Package reference@wrnexus/helpers
Safe Context URL helpers and forward-auth login redirects.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/helpers@0.2.64
Request preview access. Never put registry tokens in source control.
Safe convenience helpers for common WRNexusJS application flows. The package uses standard Context, URL, and Response values and has no runtime dependency beyond @wrnexus/core.
bun add @wrnexus/helpers
The package is private, so the machine must be authenticated to the wrnexus npm organization.
Usage
@@ -60,7 +59,7 @@ export const GET = async (ctx: Context) => {
redirectToLogin(ctx, loginUrl, options): Response — create a login redirect with an
encoded returnTo parameter.
-For direct requests without gateway headers, URL helpers use ctx.url.
Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { Context } from '@wrnexus/core';
+For direct requests without gateway headers, URL helpers use ctx.url.
Complete TypeScript API
Generated from the exact installed package declarations.
import { Context } from '@wrnexus/core';
declare function appOrigin(appName: string): string;
declare function appUrl(appName: string, path?: string): string;
@@ -110,7 +109,7 @@ declare function getOriginalRequestOrigin(ctx: RequestContext, options?: Origina
declare function redirectToLogin(ctx: RequestContext, loginUrl: string | URL, options?: LoginRedirectOptions): Response;
export { type AllowedHosts, type LoginRedirectOptions, type OriginalRequestOptions, type RequestContext, appOrigin, appUrl, currentAppName, currentAppOrigin, getOriginalRequestMethod, getOriginalRequestOrigin, getOriginalRequestPath, getOriginalRequestUrl, redirectToLogin, workspaceAppOrigins };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Redirect an unauthenticated forward-auth request
import type { Context } from "@wrnexus/core";
+
Examples
Copy-ready examples from the installed package documentation.
Redirect an unauthenticated forward-auth request
import type { Context } from "@wrnexus/core";
import { redirectToLogin } from "@wrnexus/helpers";
export const GET = async (ctx: Context) => {
diff --git a/app/pages/packages/i18n.wrn b/app/pages/packages/i18n.wrn
index cd029ccf..9b9710d3 100644
--- a/app/pages/packages/i18n.wrn
+++ b/app/pages/packages/i18n.wrn
@@ -9,13 +9,12 @@ page wrnexusi18n {
W WRNexusJS
-
+
- Browse documentation
-
-
- Frontend · Preview@wrnexus/i18n
Translation loading, locale resolution, and Intl formatting.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/i18n@0.2.64
Request preview access. Never put registry tokens in source control.
Per-request translations plus locale-aware number, date, and currency formatting for WRNexusJS apps.
+ Browse documentation
+
+ Frontend · Package reference@wrnexus/i18n
Translation loading, locale resolution, and Intl formatting.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/i18n@0.2.64
Request preview access. Never put registry tokens in source control.
Per-request translations plus locale-aware number, date, and currency formatting for WRNexusJS apps.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/i18n loads locale files from app/locales/<lang>.json, resolves the active language for each request (cookie → Accept-Language → default), and builds a t(key, params) translator used both in server code and in .wrn views. It also ships Intl-based formatting helpers and a tiny client runtime that wires up a language switcher. Translation lookup, language resolution, and HTML marker rewriting run server-side; only the small I18N_RUNTIME snippet runs in the browser.
@@ -114,7 +113,7 @@ plural(2, { one: "# item", other: "# items" }, lan
comes from core, and the resolved translator is exposed as ctx.t / ctx.lang in request handling.
Nested message objects are supported: keys are looked up whole first, then split
on . to walk the object tree.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { TFunction } from '@wrnexus/core';
+
Complete TypeScript API
Generated from the exact installed package declarations.
import { TFunction } from '@wrnexus/core';
/**
* Locale-aware formatting helpers (Intl-based) + pluralization. Pair with the
@@ -182,7 +181,7 @@ declare function renderI18nData(i18n: ResolvedI18n, lang: string): string;
declare const I18N_RUNTIME: string;
export { I18N_JS_HREF, I18N_RUNTIME, type I18nConfig, LANG_COOKIE, type Messages, type ResolvedI18n, formatCurrency, formatDate, formatNumber, formatRelativeTime, loadLocales, makeT, plural, renderI18nData, resolveI18n, resolveLang, translateHtml };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Server: load, resolve, translate
import {
+
Examples
Copy-ready examples from the installed package documentation.
Server: load, resolve, translate
import {
loadLocales,
resolveI18n,
resolveLang,
diff --git a/app/pages/packages/jwt.wrn b/app/pages/packages/jwt.wrn
index a5e05252..dcb9ca38 100644
--- a/app/pages/packages/jwt.wrn
+++ b/app/pages/packages/jwt.wrn
@@ -9,13 +9,12 @@ page wrnexusjwt {
W WRNexusJS
-
+
- Browse documentation
-
-
- Security · Preview@wrnexus/jwt
HS256 JWT signing, verification, and bearer authentication.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/jwt@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.
+ Browse documentation
+
+ Security · Package reference@wrnexus/jwt
HS256 JWT signing, verification, and bearer authentication.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/jwt@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free JSON Web Tokens (HS256) via Web Crypto, plus a bearer-token auth middleware for WRNexusJS.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/jwt signs and verifies stateless JSON Web Tokens using the HS256 (HMAC-SHA-256) algorithm. It has no runtime dependencies — signing and verification are implemented directly on the standard Web Crypto API (crypto.subtle), which Bun provides natively. It runs server-side and pairs with the session-based auth in @wrnexus/core, giving you a stateless option for API and mobile clients. Reach for it when you need bearer-token auth rather than cookie sessions.
@@ -88,7 +87,7 @@ app.use(jwtAuth({ secret: process.env.JWT_SECRET!, required: false }))
are not supported.
Integrates with [@wrnexus/core](../core) for Context, Middleware, and
ctx.user; it complements the framework's cookie/session auth with a stateless bearer-token flow for API and mobile clients.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { Context, Middleware } from '@wrnexus/core';
+
Complete TypeScript API
Generated from the exact installed package declarations.
import { Context, Middleware } from '@wrnexus/core';
/**
* @wrnexus/jwt — dependency-free JSON Web Tokens (HS256) via WebCrypto, plus a
@@ -139,7 +138,7 @@ interface JwtAuthOptions {
declare function jwtAuth(options: JwtAuthOptions): Middleware;
export { type JwtAuthOptions, type JwtClaims, JwtError, type SignOptions, jwtAuth, signJwt, verifyJwt };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Typical usage
import { signJwt, verifyJwt, jwtAuth, JwtError } from "@wrnexus/jwt";
+
Examples
Copy-ready examples from the installed package documentation.
Typical usage
import { signJwt, verifyJwt, jwtAuth, JwtError } from "@wrnexus/jwt";
const secret = process.env.JWT_SECRET!;
diff --git a/app/pages/packages/mobile.wrn b/app/pages/packages/mobile.wrn
index 07b205e3..c4f66aa2 100644
--- a/app/pages/packages/mobile.wrn
+++ b/app/pages/packages/mobile.wrn
@@ -9,13 +9,12 @@ page wrnexusmobile {
W WRNexusJS
-
+
- Browse documentation
-
-
- Native · Preview@wrnexus/mobile
SSR-safe compatibility access to Capacitor plugins.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/mobile@0.2.64
Request preview access. Never put registry tokens in source control.
SSR-safe access to Capacitor plugins from WRNexusJS browser code.
+ Browse documentation
+
+ Native · Package reference@wrnexus/mobile
SSR-safe compatibility access to Capacitor plugins.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/mobile@0.2.64
Request preview access. Never put registry tokens in source control.
SSR-safe access to Capacitor plugins from WRNexusJS browser code.
Overview
@wrnexus/mobile keeps optional native imports out of server rendering while giving browser-owned modules one consistent registry for Capacitor plugins. During SSR, mobile.isNative() is false and mobile.platform() is "web".
Install a plugin through the WRNexusJS CLI so the web and native projects stay aligned:
@@ -67,7 +66,7 @@ const status = network ? await network.getStatus() : { connected: true, con
Capacitor plugin imports must remain in browser-owned modules.
@wrnexus/mobile re-exports native from @wrnexus/native for applications that
prefer the higher-level cross-platform capability API.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
export { native } from '@wrnexus/native';
+
Complete TypeScript API
Generated from the exact installed package declarations.
export { native } from '@wrnexus/native';
/** @wrnexus/mobile — SSR-safe access to Capacitor's native bridge. */
@@ -105,7 +104,7 @@ declare const mobile: {
};
export { type CapacitorBridge, type MobilePlatform, MobileUnavailableError, invoke, isNative, mobile, platform, plugin, registerPlugin, requirePlugin, whenNative };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Register and invoke a Capacitor plugin
import { Camera, CameraResultType } from "@capacitor/camera";
+
Examples
Copy-ready examples from the installed package documentation.
Register and invoke a Capacitor plugin
import { Camera, CameraResultType } from "@capacitor/camera";
import { mobile } from "@wrnexus/mobile";
mobile.registerPlugin("Camera", Camera);
diff --git a/app/pages/packages/native.wrn b/app/pages/packages/native.wrn
index a9d8816b..6938baca 100644
--- a/app/pages/packages/native.wrn
+++ b/app/pages/packages/native.wrn
@@ -9,13 +9,12 @@ page wrnexusnative {
W WRNexusJS
-
+
- Browse documentation
-
-
- Native · Preview@wrnexus/native
Cross-platform browser and Capacitor capability registry.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/native@0.2.64
Request preview access. Never put registry tokens in source control.
Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.
+ Browse documentation
+
+ Native · Package reference@wrnexus/native
Cross-platform browser and Capacitor capability registry.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/native@0.2.64
Request preview access. Never put registry tokens in source control.
Cross-platform capabilities for browsers, Capacitor WebViews, and compiled native apps.
Overview
@wrnexus/native exposes capabilities by name so application code can ask what the current platform supports before presenting an action. Browser capabilities use Web APIs; mobile capabilities use installed Capacitor plugins. platform() returns "server" during SSR, "browser" on the web, and the Capacitor platform in a native WebView.
bun add @wrnexus/native
@@ -66,7 +65,7 @@ const position = await native.run(
Built-ins include camera, clipboard.write, share, geolocation, network, haptics, storage, filesystem, notifications, and device information.
Requirements / Notes
-Use supports() before showing optional controls. Mobile capabilities require their matching Capacitor plugins to be installed and registered by the application.
Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
import { N as NativePlatform, a as NativeCapability, b as NativeRunOptions, c as NativeTarget } from './types-CDShWg0i.js';
+Use supports() before showing optional controls. Mobile capabilities require their matching Capacitor plugins to be installed and registered by the application.
Complete TypeScript API
Generated from the exact installed package declarations.
import { N as NativePlatform, a as NativeCapability, b as NativeRunOptions, c as NativeTarget } from './types-CDShWg0i.js';
export { d as NativeAdapter, e as NativeBrowserRuntime } from './types-CDShWg0i.js';
export { browserCapabilities } from './browser.js';
export { mobileCapabilities } from './mobile.js';
@@ -92,7 +91,7 @@ declare const native: {
};
export { NativeCapability, NativePlatform, NativeRunOptions, NativeTarget, NativeUnavailableError, clearRegistry, isMobile, native, platform, register, registered, run, supports };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Share a page when the platform supports it
import { native } from "@wrnexus/native";
+
Examples
Copy-ready examples from the installed package documentation.
Share a page when the platform supports it
import { native } from "@wrnexus/native";
export async function shareCurrentPage() {
if (!native.supports("share")) return false;
diff --git a/app/pages/packages/oauth.wrn b/app/pages/packages/oauth.wrn
index 819d8cf0..8834ebd7 100644
--- a/app/pages/packages/oauth.wrn
+++ b/app/pages/packages/oauth.wrn
@@ -9,13 +9,12 @@ page wrnexusoauth {
W WRNexusJS
-
+
- Browse documentation
-
-
- Security · Preview@wrnexus/oauth
OAuth 2.0, PKCE, provider presets, and profile mapping.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/oauth@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.
+ Browse documentation
+
+ Security · Package reference@wrnexus/oauth
OAuth 2.0, PKCE, provider presets, and profile mapping.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/oauth@0.2.64
Request preview access. Never put registry tokens in source control.
Dependency-free OAuth 2.0 sign-in for any provider, with PKCE and presets for Google, GitHub, and Discord.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/oauth implements the OAuth 2.0 Authorization Code flow (with PKCE) for server-side sign-in. It ships ready-made provider presets and a defineProvider helper for custom providers, then gives you two flow functions — startAuth (build the redirect) and completeAuth (exchange the code and fetch the user's profile). It has no runtime dependencies: it uses the platform fetch and WebCrypto only. Pairs naturally with @wrnexus/core's logIn to establish a session once you have a normalized profile.
@@ -147,7 +146,7 @@ const gitlab = defineProvider({
verifier between startAuth and completeAuth (session or signed cookie).
Pairs with [@wrnexus/core](../core) — feed the normalized OAuthProfile into
logIn to establish a session.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* @wrnexus/oauth — OAuth 2.0 sign-in with any provider. Ships presets for Google,
* GitHub, and Discord, and `defineProvider` for a custom one. Dependency-free
* (uses `fetch` + WebCrypto for PKCE). Pairs with @wrnexus/core's `logIn`.
@@ -237,7 +236,7 @@ declare function exchangeCode(provider: OAuthProvider, options: CompleteAuthOpti
declare function fetchProfile(provider: OAuthProvider, tokens: OAuthTokens, fetchImpl?: FetchLike): Promise<OAuthProfile>;
export { type CompleteAuthOptions, type OAuthProfile, type OAuthProvider, type OAuthTokens, type ProviderCredentials, type StartAuthOptions, type StartAuthResult, completeAuth, defineProvider, discord, exchangeCode, fetchProfile, github, google, randomToken, startAuth };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Typical usage
import { google, startAuth, completeAuth } from "@wrnexus/oauth";
+
Examples
Copy-ready examples from the installed package documentation.
Typical usage
import { google, startAuth, completeAuth } from "@wrnexus/oauth";
import { logIn } from "@wrnexus/core";
const provider = google({
diff --git a/app/pages/packages/pubsub.wrn b/app/pages/packages/pubsub.wrn
index c083caea..05019f77 100644
--- a/app/pages/packages/pubsub.wrn
+++ b/app/pages/packages/pubsub.wrn
@@ -9,13 +9,12 @@ page wrnexuspubsub {
W WRNexusJS
-
+
- Browse documentation
-
-
- Realtime · Preview@wrnexus/pubsub
In-process and Redis-backed publish/subscribe.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/pubsub@0.2.64
Request preview access. Never put registry tokens in source control.
Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.
+ Browse documentation
+
+ Realtime · Package reference@wrnexus/pubsub
In-process and Redis-backed publish/subscribe.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/pubsub@0.2.64
Request preview access. Never put registry tokens in source control.
Topic-based publish/subscribe with a pluggable driver — in-process by default, Redis for cross-process messaging.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/pubsub is a small server-side pub/sub bus. You publish messages to a topic and subscribe with topic patterns; handlers fire for matching topics. The default driver keeps everything in-process, and you can swap in the Redis driver (@wrnexus/pubsub/redis) to fan messages out across processes or hosts. It also backs @wrnexus/core's realtime bridge for horizontal scaling.
@@ -95,7 +94,7 @@ driver.close();
The Redis driver reads REDIS_URL from the environment when no url is passed.
Backs [@wrnexus/core](../core)'s realtime bridge for horizontal scaling.
No external npm dependencies — the Redis client is a self-contained RESP codec.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* @wrnexus/pubsub — topic-based publish/subscribe with a pluggable driver.
* The default is in-process; swap in a Redis/NATS driver for cross-instance
* messaging (it also backs @wrnexus/core's realtime bridge).
@@ -121,7 +120,7 @@ declare function memoryDriver(): PubSubDriver;
declare function createPubSub(driver?: PubSubDriver): PubSub;
export { type Handler, type PubSub, type PubSubDriver, createPubSub, memoryDriver };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
In-process (default)
import { createPubSub } from "@wrnexus/pubsub";
+
Examples
Copy-ready examples from the installed package documentation.
In-process (default)
import { createPubSub } from "@wrnexus/pubsub";
const bus = createPubSub();
diff --git a/app/pages/packages/queue.wrn b/app/pages/packages/queue.wrn
index 53c3ce62..e8fd2fc2 100644
--- a/app/pages/packages/queue.wrn
+++ b/app/pages/packages/queue.wrn
@@ -9,13 +9,12 @@ page wrnexusqueue {
W WRNexusJS
-
+
- Browse documentation
-
-
- Data · Preview@wrnexus/queue
Background jobs with delay, concurrency, retry, and repetition.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/queue@0.2.64
Request preview access. Never put registry tokens in source control.
A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.
+ Browse documentation
+
+ Data · Package reference@wrnexus/queue
Background jobs with delay, concurrency, retry, and repetition.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/queue@0.2.64
Request preview access. Never put registry tokens in source control.
A background job queue with delays, retries + exponential backoff, recurring jobs, and concurrent workers.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/queue is a server-side in-process job queue. You register named workers, enqueue jobs (optionally delayed or recurring), and let the queue poll and run them on a timer — with per-job retry limits and doubling backoff between attempts. The default store lives in memory; the design allows a pluggable driver to back it with Redis/SQL for durability across restarts. Reach for it when you need to defer work (emails, webhooks, cleanup) off the request path without a heavyweight external broker. Tests can drive it deterministically via drain().
@@ -106,7 +105,7 @@ const ran = await queue.drain(); // => 1
The default store is in-process, so queued jobs do not survive a restart; a
pluggable driver is intended for backing it with Redis/SQL for durability.
Works alongside @wrnexus/core for offloading work from the request path.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* @wrnexus/queue — a background job queue with delays, retries + backoff, and
* concurrent workers. The default store is in-process; a pluggable driver lets
* you back it with Redis/SQL for durability across restarts.
@@ -161,7 +160,7 @@ interface Queue {
declare function createQueue(options?: QueueOptions): Queue;
export { type AddOptions, type Job, type JobHandler, type Queue, type QueueOptions, createQueue };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Register workers, enqueue jobs, then start the poller
import { createQueue } from "@wrnexus/queue";
+
Examples
Copy-ready examples from the installed package documentation.
Register workers, enqueue jobs, then start the poller
import { createQueue } from "@wrnexus/queue";
const queue = createQueue({ maxAttempts: 3, backoffMs: 1000 });
diff --git a/app/pages/packages/reactive.wrn b/app/pages/packages/reactive.wrn
index 322b473e..e6da851c 100644
--- a/app/pages/packages/reactive.wrn
+++ b/app/pages/packages/reactive.wrn
@@ -9,13 +9,12 @@ page wrnexusreactive {
W WRNexusJS
-
+
- Browse documentation
-
-
- Frontend · Preview@wrnexus/reactive
Small type-safe reactive signal primitives.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/reactive@0.2.64
Request preview access. Never put registry tokens in source control.
Tiny, type-safe reactive primitives (signals) with zero dependencies.
+ Browse documentation
+
+ Frontend · Package reference@wrnexus/reactive
Small type-safe reactive signal primitives.
Install the package
After WorkRoot approves private registry access, install the release-aligned package:
bun add @wrnexus/reactive@0.2.64
Request preview access. Never put registry tokens in source control.
Tiny, type-safe reactive primitives (signals) with zero dependencies.
Part of the WRNexusJS framework — an SSR-first, Bun-native full-stack web framework.
Overview
@wrnexus/reactive is the seed of WRNexusJS's reactivity layer: a minimal signal primitive that holds a value, notifies subscribers when it changes, and hands back an unsubscribe function. It is deliberately small and framework-agnostic — it powers nothing on its own, but is shaped so client islands (and later the .wrn compiler's state blocks) can build reactive bindings on top of it. Reach for it when you need observable state without pulling in a full reactivity library.
@@ -76,7 +75,7 @@ user.set({ name: "Ada" });
Zero dependencies. The only runtime API used is the standard Object.is.
Foundational primitive for WRNexusJS client islands and the forthcoming .wrn
compiler state blocks.
-Complete TypeScript API
This declaration comes from the exact installed package and lists its exported functions, classes, interfaces, and types.
/**
+
Complete TypeScript API
Generated from the exact installed package declarations.
/**
* A minimal, type-safe reactive signal with zero dependencies.
*
* This is the seed of the framework's reactivity. Today it powers nothing on
@@ -104,7 +103,7 @@ interface Signal<T> {
declare function signal<T>(initial: T): Signal<T>;
export { type Signal, type Subscriber, type Unsubscribe, signal };
-
Examples
Examples are taken from this package's installed documentation and must be evaluated with its requirements and stability notes.
Typical usage
import { signal } from "@wrnexus/reactive";
+
Examples
Copy-ready examples from the installed package documentation.
Typical usage
import { signal } from "@wrnexus/reactive";
const count = signal(0);
diff --git a/app/pages/packages/router.wrn b/app/pages/packages/router.wrn
index 70437914..830b87ba 100644
--- a/app/pages/packages/router.wrn
+++ b/app/pages/packages/router.wrn
@@ -9,13 +9,12 @@ page wrnexusrouter {
W WRNexusJS
-
+
- Browse documentation
-
-
- Core · Preview@wrnexus/router
Filesystem discovery, route matching, and typed route generation.
Private registry access required
This package is not available from the public npm registry. After WorkRoot approves access and supplies private registry instructions, install the release-aligned package:
bun add @wrnexus/router@0.2.64
Request preview access. Never put registry tokens in source control.
File-based router that maps an app/ directory onto route tables and matches request paths against them.
+ Browse documentation
+
+ Core · Package reference@wrnexus/router
Filesystem discovery, route matching, and typed route generation.
Install the package
After WorkRoot approves private registry access, install the release-aligned package: