diff --git a/.publish/ai/package.json b/.publish/ai/package.json
index 4030288c..42d30efa 100644
--- a/.publish/ai/package.json
+++ b/.publish/ai/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
"license": "MIT",
diff --git a/.publish/authz/package.json b/.publish/authz/package.json
index 25f0ed47..5b90005b 100644
--- a/.publish/authz/package.json
+++ b/.publish/authz/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/authz — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/cli/package.json b/.publish/cli/package.json
index e08be189..a504c868 100644
--- a/.publish/cli/package.json
+++ b/.publish/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/cli — part of the WrNexus framework.",
"license": "MIT",
@@ -28,16 +28,16 @@
"wrnexus": "./dist/index.js"
},
"dependencies": {
- "@wrnexus/core": "^0.2.61",
- "@wrnexus/router": "^0.2.61",
- "@wrnexus/csr": "^0.2.61",
- "@wrnexus/compiler": "^0.2.61",
- "@wrnexus/styles": "^0.2.61",
- "@wrnexus/dev-server": "^0.2.61",
- "@wrnexus/ui": "^0.2.61",
- "@wrnexus/validation": "^0.2.61",
- "@wrnexus/i18n": "^0.2.61",
- "@wrnexus/db": "^0.2.61"
+ "@wrnexus/core": "^0.2.62",
+ "@wrnexus/router": "^0.2.62",
+ "@wrnexus/csr": "^0.2.62",
+ "@wrnexus/compiler": "^0.2.62",
+ "@wrnexus/styles": "^0.2.62",
+ "@wrnexus/dev-server": "^0.2.62",
+ "@wrnexus/ui": "^0.2.62",
+ "@wrnexus/validation": "^0.2.62",
+ "@wrnexus/i18n": "^0.2.62",
+ "@wrnexus/db": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/compiler/package.json b/.publish/compiler/package.json
index 3552f68a..81614ae2 100644
--- a/.publish/compiler/package.json
+++ b/.publish/compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/compiler — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/core/package.json b/.publish/core/package.json
index 7d1c485a..f1dec1da 100644
--- a/.publish/core/package.json
+++ b/.publish/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/core — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/csr/package.json b/.publish/csr/package.json
index 49c04523..2bc980ba 100644
--- a/.publish/csr/package.json
+++ b/.publish/csr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/csr — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/db/package.json b/.publish/db/package.json
index c44ccea8..b1b44e16 100644
--- a/.publish/db/package.json
+++ b/.publish/db/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/db — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/dev-server/package.json b/.publish/dev-server/package.json
index ffdd5c8e..9c5d9360 100644
--- a/.publish/dev-server/package.json
+++ b/.publish/dev-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/dev-server — part of the WrNexus framework.",
"license": "MIT",
@@ -25,18 +25,18 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61",
- "@wrnexus/router": "^0.2.61",
- "@wrnexus/ssr": "^0.2.61",
- "@wrnexus/csr": "^0.2.61",
- "@wrnexus/compiler": "^0.2.61",
- "@wrnexus/styles": "^0.2.61",
- "@wrnexus/ui": "^0.2.61",
- "@wrnexus/validation": "^0.2.61",
- "@wrnexus/i18n": "^0.2.61",
- "@wrnexus/db": "^0.2.61",
- "@wrnexus/pubsub": "^0.2.61",
- "@wrnexus/uploader": "^0.2.61"
+ "@wrnexus/core": "^0.2.62",
+ "@wrnexus/router": "^0.2.62",
+ "@wrnexus/ssr": "^0.2.62",
+ "@wrnexus/csr": "^0.2.62",
+ "@wrnexus/compiler": "^0.2.62",
+ "@wrnexus/styles": "^0.2.62",
+ "@wrnexus/ui": "^0.2.62",
+ "@wrnexus/validation": "^0.2.62",
+ "@wrnexus/i18n": "^0.2.62",
+ "@wrnexus/db": "^0.2.62",
+ "@wrnexus/pubsub": "^0.2.62",
+ "@wrnexus/uploader": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/encryption/package.json b/.publish/encryption/package.json
index 76a70733..11ef2509 100644
--- a/.publish/encryption/package.json
+++ b/.publish/encryption/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/encryption — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/helpers/package.json b/.publish/helpers/package.json
index f0e4bdd5..94e62ed0 100644
--- a/.publish/helpers/package.json
+++ b/.publish/helpers/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/i18n/package.json b/.publish/i18n/package.json
index ca79185f..c77f3f51 100644
--- a/.publish/i18n/package.json
+++ b/.publish/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/i18n — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/jwt/package.json b/.publish/jwt/package.json
index c63886a9..10ee3351 100644
--- a/.publish/jwt/package.json
+++ b/.publish/jwt/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/jwt — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/mobile/package.json b/.publish/mobile/package.json
index 3f359d64..562d6834 100644
--- a/.publish/mobile/package.json
+++ b/.publish/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/mobile — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/native": "^0.2.61"
+ "@wrnexus/native": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/native/package.json b/.publish/native/package.json
index c17faabb..4f0f71f5 100644
--- a/.publish/native/package.json
+++ b/.publish/native/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/native — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/oauth/package.json b/.publish/oauth/package.json
index 8f32f596..44a8b4f8 100644
--- a/.publish/oauth/package.json
+++ b/.publish/oauth/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/oauth — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/pubsub/package.json b/.publish/pubsub/package.json
index 816ef154..ffcc0968 100644
--- a/.publish/pubsub/package.json
+++ b/.publish/pubsub/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/pubsub — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/queue/package.json b/.publish/queue/package.json
index c0dd132b..f1fab8d2 100644
--- a/.publish/queue/package.json
+++ b/.publish/queue/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/queue — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/reactive/package.json b/.publish/reactive/package.json
index 9db7b658..a7045bf6 100644
--- a/.publish/reactive/package.json
+++ b/.publish/reactive/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/reactive — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/router/package.json b/.publish/router/package.json
index 5b85c7ff..1154a9c1 100644
--- a/.publish/router/package.json
+++ b/.publish/router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/router — part of the WrNexus framework.",
"license": "MIT",
@@ -21,8 +21,8 @@
}
},
"dependencies": {
- "@wrnexus/compiler": "^0.2.61",
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/compiler": "^0.2.62",
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/ssr/package.json b/.publish/ssr/package.json
index 1fa60ddf..c6ee1a34 100644
--- a/.publish/ssr/package.json
+++ b/.publish/ssr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/ssr — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/styles/package.json b/.publish/styles/package.json
index 4c43811b..8cc940dd 100644
--- a/.publish/styles/package.json
+++ b/.publish/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/styles — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/uploader": "^0.2.61"
+ "@wrnexus/uploader": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/test/package.json b/.publish/test/package.json
index ee9d6925..986ffc9a 100644
--- a/.publish/test/package.json
+++ b/.publish/test/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/test — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/tracking/package.json b/.publish/tracking/package.json
index 7b570f86..5f79e124 100644
--- a/.publish/tracking/package.json
+++ b/.publish/tracking/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/tracking — part of the WrNexus framework.",
"license": "MIT",
diff --git a/.publish/ui/COMPONENTS.md b/.publish/ui/COMPONENTS.md
index 26e199c0..11dda934 100644
--- a/.publish/ui/COMPONENTS.md
+++ b/.publish/ui/COMPONENTS.md
@@ -1,6 +1,6 @@
# WRNexus UI component reference
-This reference is generated from the 891 packaged `.wrn` component sources. Props marked required have no default; all others show their runtime default.
+This reference is generated from the 901 packaged `.wrn` component sources. Props marked required have no default; all others show their runtime default.
## Actions
@@ -1964,9 +1964,9 @@ Reusable navigation item component.
Reusable newsletter form component.
- Mount: `data-component="NewsletterForm"`
-- Props: `eyebrow: string = ""`, `title: string = ""`, `description: string = ""`, `href: string = ""`, `actionLabel: string = "Learn more"`, `image: string = ""`, `alt: string = ""`, `class: string = ""`
-- Slots: `default`
-- Events: None
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Stay up to date"`, `description: string = ""`, `placeholder: string = "Enter your email"`, `buttonLabel: string = "Subscribe"`, `action: string = "/newsletter/subscribe"`, `method: string = "post"`, `emailName: string = "email"`, `privacyLabel: string = ""`, `privacyHref: string = "/privacy"`, `successMessage: string = "You are subscribed."`, `errorMessage: string = "Something went wrong. Please try again."`, `iconClass: string = "icon-[lucide--mail]"`, `centered: boolean = false`, `compact: boolean = false`, `showIcon: boolean = true`, `showPrivacy: boolean = true`, `fullWidth: boolean = false`
+- Slots: None
+- Events: `submit`, `input`
### NotFoundPage
@@ -2911,7 +2911,7 @@ Reusable back to top component.
Reusable breadcrumbs component.
- Mount: `data-component="Breadcrumbs"`
-- Props: `class: string = ""`, `homeLabel: string = "Home"`, `homeHref: string = "/"`, `current: string = "Current page"`
+- Props: `class: string = ""`, `items: string = []`, `centered: boolean = false`, `compact: boolean = false`, `showHome: boolean = true`, `homeLabel: string = "Home"`, `homeHref: string = "/"`
- Slots: None
- Events: None
@@ -2951,6 +2951,15 @@ Reusable combobox component.
- Slots: None
- Events: None
+### ContactSalesBanner
+
+Reusable contact sales banner component.
+
+- Mount: `data-component="ContactSalesBanner"`
+- Props: `class: string = ""`, `eyebrow: string = "Enterprise identity"`, `title: string = "Ready to secure your next application?"`, `description: string = ""`, `primaryLabel: string = "Contact sales"`, `primaryHref: string = "/contact"`, `secondaryLabel: string = "Start free"`, `secondaryHref: string = "/sign-up"`, `iconClass: string = "icon-[lucide--messages-square]"`, `centered: boolean = false`, `compact: boolean = false`, `points: string = []`, `trustPoints: string = []`
+- Slots: None
+- Events: None
+
### Container
Reusable container component.
@@ -2960,6 +2969,24 @@ Reusable container component.
- Slots: `default`
- Events: None
+### CookieConsent
+
+Reusable cookie consent component.
+
+- Mount: `data-component="CookieConsent"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`, `change`
+
+### DevelopersMegaMenu
+
+Reusable developers mega menu component.
+
+- Mount: `data-component="DevelopersMegaMenu"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: None
+
### disclosure
Reusable disclosure component.
@@ -3109,8 +3136,8 @@ Reusable link component.
Reusable logo cloud component.
- Mount: `data-component="LogoCloud"`
-- Props: `class: string = ""`, `title: string = "Trusted by modern teams"`
-- Slots: `default`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Trusted by teams building modern products"`, `description: string = ""`, `logos: string = []`, `centered: boolean = true`, `compact: boolean = false`, `variant: string = "strip"`, `grayscale: boolean = true`, `showNames: boolean = false`, `maxItems: number = 8`
+- Slots: None
- Events: None
### Modal
@@ -3149,6 +3176,15 @@ Reusable notification dot component.
- Slots: `default`
- Events: None
+### PageHeader
+
+Reusable page header component.
+
+- Mount: `data-component="PageHeader"`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = ""`, `description: string = ""`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `icon: string = "sparkles"`, `centered: boolean = false`, `compact: boolean = false`, `showBreadcrumbs: boolean = false`, `breadcrumbParent: string = ""`, `breadcrumbParentHref: string = ""`, `breadcrumbCurrent: string = ""`, `highlights: string = []`
+- Slots: None
+- Events: None
+
### PageHeading
Reusable page heading component.
@@ -3172,7 +3208,7 @@ Reusable page shell component.
Reusable pagination component.
- Mount: `data-component="Pagination"`
-- Props: `class: string = ""`, `page: number = 1`, `totalPages: number = 1`, `previousHref: string = "#"`, `nextHref: string = "#"`
+- Props: `class: string = ""`, `currentPage: number = 1`, `totalPages: number = 1`, `previousHref: string = ""`, `nextHref: string = ""`, `pages: string = []`, `showNumbers: boolean = true`, `showSummary: boolean = true`, `totalItems: number = 0`, `pageSize: number = 10`, `compact: boolean = false`, `centered: boolean = false`
- Slots: None
- Events: None
@@ -3185,6 +3221,15 @@ Reusable pill component.
- Slots: `default`
- Events: None
+### ProductMegaMenu
+
+Reusable product mega menu component.
+
+- Mount: `data-component="ProductMegaMenu"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: None
+
### progress
Reusable progress component.
@@ -3208,9 +3253,27 @@ Reusable progress bar component.
Reusable public footer component.
- Mount: `data-component="PublicFooter"`
-- Props: `class: string = ""`, `brand: string = "WRNexusJS"`, `description: string = "SSR-first, Bun-native full-stack framework."`, `copyright: string = "© 2026 WorkRoot Workspace"`
-- Slots: `default`
-- Events: None
+- Props: `class: string = ""`
+- Slots: None
+- Events: `submit`
+
+### PublicMobileNavigation
+
+Reusable public mobile navigation component.
+
+- Mount: `data-component="PublicMobileNavigation"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`
+
+### PublicSearch
+
+Reusable public search component.
+
+- Mount: `data-component="PublicSearch"`
+- Props: `class: string = ""`, `query: string = ""`, `placeholder: string = "Search..."`, `label: string = "Search"`, `action: string = ""`, `method: string = "get"`, `name: string = "q"`, `buttonLabel: string = ""`, `clearLabel: string = "Clear search"`, `size: string = "default"`, `centered: boolean = false`, `fullWidth: boolean = false`, `showShortcut: boolean = false`, `shortcutLabel: string = "⌘ K"`, `suggestions: string = []`
+- Slots: None
+- Events: `input`, `focus`, `blur`, `click`
### Radio
@@ -3257,6 +3320,15 @@ Reusable select component.
- Slots: `default`
- Events: None
+### SocialShare
+
+Reusable social share component.
+
+- Mount: `data-component="SocialShare"`
+- Props: `class: string = ""`, `title: string = "Share this page"`, `description: string = ""`, `url: string = ""`, `shareText: string = ""`, `centered: boolean = false`, `compact: boolean = false`, `showTitle: boolean = true`, `showCopy: boolean = true`, `networks: string = []`
+- Slots: None
+- Events: `click`
+
### spacer
Reusable spacer component.
@@ -3284,6 +3356,15 @@ Reusable stack component.
- Slots: `default`
- Events: None
+### StatusBanner
+
+Reusable status banner component.
+
+- Mount: `data-component="StatusBanner"`
+- Props: `class: string = ""`, `type: string = "info"`, `title: string = ""`, `description: string = ""`, `actionLabel: string = ""`, `actionHref: string = ""`, `dismissible: boolean = true`, `compact: boolean = false`, `details: string = []`
+- Slots: None
+- Events: `click`
+
### Sticky
Reusable sticky component.
@@ -3356,6 +3437,15 @@ Reusable toast component.
- Slots: None
- Events: `click`
+### ToastHost
+
+Reusable toast host component.
+
+- Mount: `data-component="ToastHost"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`
+
### Typography
Reusable typography component.
@@ -4292,7 +4382,7 @@ Reusable deprecated feature alert component.
Reusable empty state component.
- Mount: `data-component="EmptyState"`
-- Props: `class: string = ""`, `icon: string = "◇"`, `title: string = "Nothing here yet"`, `description: string = ""`, `actionLabel: string = ""`, `actionHref: string = "#"`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Nothing found"`, `description: string = ""`, `iconClass: string = "icon-[lucide--inbox]"`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `compact: boolean = false`, `centered: boolean = true`, `suggestions: string = []`
- Slots: None
- Events: None
@@ -4301,9 +4391,9 @@ Reusable empty state component.
Reusable error state component.
- Mount: `data-component="ErrorState"`
-- Props: `class: string = ""`, `code: string = "500"`, `title: string = "Something went wrong"`, `description: string = "Please try again."`, `actionLabel: string = "Try again"`, `actionHref: string = "/"`
+- Props: `class: string = ""`, `type: string = "error"`, `eyebrow: string = ""`, `title: string = "Something went wrong"`, `description: string = ""`, `errorCode: string = ""`, `iconClass: string = ""`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `retryLabel: string = ""`, `retryAction: string = ""`, `centered: boolean = true`, `compact: boolean = false`, `details: string = []`
- Slots: None
-- Events: None
+- Events: `click`
### FeatureUnavailableState
@@ -7113,8 +7203,8 @@ Reusable product page shell component.
Reusable public header component.
- Mount: `data-component="PublicHeader"`
-- Props: `class: string = ""`, `brand: string = "WRNexusJS"`, `homeHref: string = "/"`, `signInHref: string = "/signin"`, `ctaHref: string = "/start"`, `ctaLabel: string = "Get started"`
-- Slots: `default`, `mobile`
+- Props: `class: string = ""`
+- Slots: None
- Events: `click`
### PublicPageShell
@@ -7547,8 +7637,8 @@ Reusable prompt dialog component.
Reusable resources mega menu component.
- Mount: `data-component="ResourcesMegaMenu"`
-- Props: `title: string = ""`, `description: string = ""`, `open: boolean = false`, `closeLabel: string = "Close"`, `class: string = ""`
-- Slots: `default`
+- Props: `class: string = ""`
+- Slots: None
- Events: None
### SearchDialog
@@ -7583,8 +7673,8 @@ Reusable session expired dialog component.
Reusable solutions mega menu component.
- Mount: `data-component="SolutionsMegaMenu"`
-- Props: `title: string = ""`, `description: string = ""`, `open: boolean = false`, `closeLabel: string = "Close"`, `class: string = ""`
-- Slots: `default`
+- Props: `class: string = ""`
+- Slots: None
- Events: None
### StepUpAuthenticationDialog
diff --git a/.publish/ui/README.md b/.publish/ui/README.md
index cf510702..017f1837 100644
--- a/.publish/ui/README.md
+++ b/.publish/ui/README.md
@@ -133,6 +133,36 @@ entry and interaction motion. Override `--wire-motion-fast`,
`--wire-ease-emphasized` to tune it. Hover lift is limited to precise pointing
devices and `prefers-reduced-motion` is honored automatically.
+### Using the selected theme in application UI
+
+The active theme and palette are not limited to `@wrnexus/ui` components. The
+framework exposes the resolved values as semantic CSS custom properties, so
+pages and custom `.wrn` components can use the same contract:
+
+```css
+.account-card {
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ border: 1px solid var(--wire-color-border);
+}
+
+.account-card__action {
+ background: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+}
+```
+
+Stable no-spacing helper classes are also available: `wire-bg-page`,
+`wire-bg-surface`, `wire-bg-surface-2`, `wire-bg-primary`, `wire-bg-secondary`,
+`wire-text`, `wire-text-muted`, `wire-text-primary`, `wire-text-success`,
+`wire-text-warning`, `wire-text-danger`, and `wire-border`.
+
+Tailwind-authored custom markup can continue using the palette families already
+used by packaged components. `indigo-*` and `violet-*` resolve to primary,
+`blue-*` to info, `emerald-*`/`green-*` to success, `amber-*` to warning, and
+`red-*`/`rose-*` to danger. These aliases live at `:root`, so they work outside
+a `[data-component]` boundary too.
+
## Usage
### Auto-discovery
diff --git a/.publish/ui/component-reference.json b/.publish/ui/component-reference.json
index 561a5c4f..743124b9 100644
--- a/.publish/ui/component-reference.json
+++ b/.publish/ui/component-reference.json
@@ -1,6 +1,6 @@
{
"generatedFrom": "packages/ui/components/*.wrn",
- "count": 891,
+ "count": 901,
"components": [
{
"name": "AcceptAllCookiesButton",
@@ -4505,6 +4505,30 @@
"required": false,
"default": "\"\""
},
+ {
+ "name": "items",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showHome",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
{
"name": "homeLabel",
"type": "string",
@@ -4516,12 +4540,6 @@
"type": "string",
"required": false,
"default": "\"/\""
- },
- {
- "name": "current",
- "type": "string",
- "required": false,
- "default": "\"Current page\""
}
],
"slots": [],
@@ -9616,6 +9634,95 @@
"events": [],
"source": "components/ContactPageShell.wrn"
},
+ {
+ "name": "ContactSalesBanner",
+ "mount": "ContactSalesBanner",
+ "category": "core",
+ "purpose": "Reusable contact sales banner component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"Enterprise identity\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"Ready to secure your next application?\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Contact sales\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"/contact\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Start free\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"/sign-up\""
+ },
+ {
+ "name": "iconClass",
+ "type": "string",
+ "required": false,
+ "default": "\"icon-[lucide--messages-square]\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "points",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "trustPoints",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/ContactSalesBanner.wrn"
+ },
{
"name": "ContactSalesButton",
"mount": "ContactSalesButton",
@@ -10145,6 +10252,23 @@
"events": [],
"source": "components/CookieCategoryToggle.wrn"
},
+ {
+ "name": "CookieConsent",
+ "mount": "CookieConsent",
+ "category": "core",
+ "purpose": "Reusable cookie consent component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click", "change"],
+ "source": "components/CookieConsent.wrn"
+ },
{
"name": "CookieDetailsTable",
"mount": "CookieDetailsTable",
@@ -13171,6 +13295,23 @@
"events": [],
"source": "components/DeveloperSearch.wrn"
},
+ {
+ "name": "DevelopersMegaMenu",
+ "mount": "DevelopersMegaMenu",
+ "category": "core",
+ "purpose": "Reusable developers mega menu component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/DevelopersMegaMenu.wrn"
+ },
{
"name": "DevelopersMenu",
"mount": "DevelopersMenu",
@@ -14686,16 +14827,16 @@
"default": "\"\""
},
{
- "name": "icon",
+ "name": "eyebrow",
"type": "string",
"required": false,
- "default": "\"◇\""
+ "default": "\"\""
},
{
"name": "title",
"type": "string",
"required": false,
- "default": "\"Nothing here yet\""
+ "default": "\"Nothing found\""
},
{
"name": "description",
@@ -14704,16 +14845,52 @@
"default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "iconClass",
+ "type": "string",
+ "required": false,
+ "default": "\"icon-[lucide--inbox]\""
+ },
+ {
+ "name": "primaryLabel",
"type": "string",
"required": false,
"default": "\"\""
},
{
- "name": "actionHref",
+ "name": "primaryHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "suggestions",
+ "type": "string",
+ "required": false,
+ "default": "[]"
}
],
"slots": [],
@@ -15404,10 +15581,16 @@
"default": "\"\""
},
{
- "name": "code",
+ "name": "type",
"type": "string",
"required": false,
- "default": "\"500\""
+ "default": "\"error\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
},
{
"name": "title",
@@ -15419,23 +15602,77 @@
"name": "description",
"type": "string",
"required": false,
- "default": "\"Please try again.\""
+ "default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "errorCode",
"type": "string",
"required": false,
- "default": "\"Try again\""
+ "default": "\"\""
},
{
- "name": "actionHref",
+ "name": "iconClass",
"type": "string",
"required": false,
- "default": "\"/\""
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "retryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "retryAction",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "details",
+ "type": "string",
+ "required": false,
+ "default": "[]"
}
],
"slots": [],
- "events": [],
+ "events": ["click"],
"source": "components/ErrorState.wrn"
},
{
@@ -24908,14 +25145,68 @@
"required": false,
"default": "\"\""
},
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
{
"name": "title",
"type": "string",
"required": false,
- "default": "\"Trusted by modern teams\""
+ "default": "\"Trusted by teams building modern products\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "logos",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "variant",
+ "type": "string",
+ "required": false,
+ "default": "\"strip\""
+ },
+ {
+ "name": "grayscale",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showNames",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "maxItems",
+ "type": "number",
+ "required": false,
+ "default": "8"
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/LogoCloud.wrn"
},
@@ -27706,6 +27997,12 @@
"category": "content",
"purpose": "Reusable newsletter form component.",
"props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
{
"name": "eyebrow",
"type": "string",
@@ -27716,7 +28013,7 @@
"name": "title",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"Stay up to date\""
},
{
"name": "description",
@@ -27725,38 +28022,98 @@
"default": "\"\""
},
{
- "name": "href",
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "\"Enter your email\""
+ },
+ {
+ "name": "buttonLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Subscribe\""
+ },
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "\"/newsletter/subscribe\""
+ },
+ {
+ "name": "method",
+ "type": "string",
+ "required": false,
+ "default": "\"post\""
+ },
+ {
+ "name": "emailName",
+ "type": "string",
+ "required": false,
+ "default": "\"email\""
+ },
+ {
+ "name": "privacyLabel",
"type": "string",
"required": false,
"default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "privacyHref",
"type": "string",
"required": false,
- "default": "\"Learn more\""
+ "default": "\"/privacy\""
},
{
- "name": "image",
+ "name": "successMessage",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"You are subscribed.\""
},
{
- "name": "alt",
+ "name": "errorMessage",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"Something went wrong. Please try again.\""
},
{
- "name": "class",
+ "name": "iconClass",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"icon-[lucide--mail]\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showIcon",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showPrivacy",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "fullWidth",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
}
],
- "slots": ["default"],
- "events": [],
+ "slots": [],
+ "events": ["submit", "input"],
"source": "components/NewsletterForm.wrn"
},
{
@@ -28806,6 +29163,113 @@
"events": [],
"source": "components/PageAlert.wrn"
},
+ {
+ "name": "PageHeader",
+ "mount": "PageHeader",
+ "category": "core",
+ "purpose": "Reusable page header component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "icon",
+ "type": "string",
+ "required": false,
+ "default": "\"sparkles\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showBreadcrumbs",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "breadcrumbParent",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "breadcrumbParentHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "breadcrumbCurrent",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "highlights",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/PageHeader.wrn"
+ },
{
"name": "PageHeading",
"mount": "PageHeading",
@@ -28912,7 +29376,7 @@
"default": "\"\""
},
{
- "name": "page",
+ "name": "currentPage",
"type": "number",
"required": false,
"default": "1"
@@ -28927,13 +29391,55 @@
"name": "previousHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
},
{
"name": "nextHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
+ },
+ {
+ "name": "pages",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "showNumbers",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showSummary",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "totalItems",
+ "type": "number",
+ "required": false,
+ "default": "0"
+ },
+ {
+ "name": "pageSize",
+ "type": "number",
+ "required": false,
+ "default": "10"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
}
],
"slots": [],
@@ -32399,6 +32905,23 @@
"events": [],
"source": "components/ProductLogo.wrn"
},
+ {
+ "name": "ProductMegaMenu",
+ "mount": "ProductMegaMenu",
+ "category": "core",
+ "purpose": "Reusable product mega menu component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/ProductMegaMenu.wrn"
+ },
{
"name": "ProductMiniCard",
"mount": "ProductMiniCard",
@@ -33310,28 +33833,10 @@
"type": "string",
"required": false,
"default": "\"\""
- },
- {
- "name": "brand",
- "type": "string",
- "required": false,
- "default": "\"WRNexusJS\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"SSR-first, Bun-native full-stack framework.\""
- },
- {
- "name": "copyright",
- "type": "string",
- "required": false,
- "default": "\"© 2026 WorkRoot Workspace\""
}
],
- "slots": ["default"],
- "events": [],
+ "slots": [],
+ "events": ["submit"],
"source": "components/PublicFooter.wrn"
},
{
@@ -33345,39 +33850,9 @@
"type": "string",
"required": false,
"default": "\"\""
- },
- {
- "name": "brand",
- "type": "string",
- "required": false,
- "default": "\"WRNexusJS\""
- },
- {
- "name": "homeHref",
- "type": "string",
- "required": false,
- "default": "\"/\""
- },
- {
- "name": "signInHref",
- "type": "string",
- "required": false,
- "default": "\"/signin\""
- },
- {
- "name": "ctaHref",
- "type": "string",
- "required": false,
- "default": "\"/start\""
- },
- {
- "name": "ctaLabel",
- "type": "string",
- "required": false,
- "default": "\"Get started\""
}
],
- "slots": ["default", "mobile"],
+ "slots": [],
"events": ["click"],
"source": "components/PublicHeader.wrn"
},
@@ -33440,6 +33915,23 @@
"events": [],
"source": "components/PublicHeaderLogo.wrn"
},
+ {
+ "name": "PublicMobileNavigation",
+ "mount": "PublicMobileNavigation",
+ "category": "core",
+ "purpose": "Reusable public mobile navigation component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/PublicMobileNavigation.wrn"
+ },
{
"name": "PublicPageShell",
"mount": "PublicPageShell",
@@ -33481,6 +33973,107 @@
"events": [],
"source": "components/PublicPageShell.wrn"
},
+ {
+ "name": "PublicSearch",
+ "mount": "PublicSearch",
+ "category": "core",
+ "purpose": "Reusable public search component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "query",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "\"Search...\""
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": "\"Search\""
+ },
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "method",
+ "type": "string",
+ "required": false,
+ "default": "\"get\""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "\"q\""
+ },
+ {
+ "name": "buttonLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "clearLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Clear search\""
+ },
+ {
+ "name": "size",
+ "type": "string",
+ "required": false,
+ "default": "\"default\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "fullWidth",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showShortcut",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "shortcutLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"⌘ K\""
+ },
+ {
+ "name": "suggestions",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["input", "focus", "blur", "click"],
+ "source": "components/PublicSearch.wrn"
+ },
{
"name": "PublishDateTimePicker",
"mount": "PublishDateTimePicker",
@@ -35935,30 +36528,6 @@
"category": "overlays",
"purpose": "Reusable resources mega menu component.",
"props": [
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false"
- },
- {
- "name": "closeLabel",
- "type": "string",
- "required": false,
- "default": "\"Close\""
- },
{
"name": "class",
"type": "string",
@@ -35966,7 +36535,7 @@
"default": "\"\""
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/ResourcesMegaMenu.wrn"
},
@@ -40069,6 +40638,77 @@
"events": [],
"source": "components/SmsSegmentCounter.wrn"
},
+ {
+ "name": "SocialShare",
+ "mount": "SocialShare",
+ "category": "core",
+ "purpose": "Reusable social share component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"Share this page\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "shareText",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showTitle",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showCopy",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "networks",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/SocialShare.wrn"
+ },
{
"name": "SolutionHero",
"mount": "SolutionHero",
@@ -40198,30 +40838,6 @@
"category": "overlays",
"purpose": "Reusable solutions mega menu component.",
"props": [
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false"
- },
- {
- "name": "closeLabel",
- "type": "string",
- "required": false,
- "default": "\"Close\""
- },
{
"name": "class",
"type": "string",
@@ -40229,7 +40845,7 @@
"default": "\"\""
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/SolutionsMegaMenu.wrn"
},
@@ -40724,6 +41340,71 @@
"events": [],
"source": "components/StatusBadge.wrn"
},
+ {
+ "name": "StatusBanner",
+ "mount": "StatusBanner",
+ "category": "core",
+ "purpose": "Reusable status banner component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "required": false,
+ "default": "\"info\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "actionLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "actionHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "dismissible",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "details",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/StatusBanner.wrn"
+ },
{
"name": "StatusPageShell",
"mount": "StatusPageShell",
@@ -43839,6 +44520,23 @@
"events": [],
"source": "components/ToastAction.wrn"
},
+ {
+ "name": "ToastHost",
+ "mount": "ToastHost",
+ "category": "core",
+ "purpose": "Reusable toast host component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/ToastHost.wrn"
+ },
{
"name": "ToastIcon",
"mount": "ToastIcon",
diff --git a/.publish/ui/components/Breadcrumbs.wrn b/.publish/ui/components/Breadcrumbs.wrn
index 00036632..2f186735 100644
--- a/.publish/ui/components/Breadcrumbs.wrn
+++ b/.publish/ui/components/Breadcrumbs.wrn
@@ -1,11 +1,105 @@
component Breadcrumbs {
- props {
- class = ""
- homeLabel = "Home"
- homeHref = "/"
- current = "Current page"
- }
- view {
- {homeLabel} / {current}
- }
+ props {
+ class: string = ""
+ items = []
+ centered = false
+ compact = false
+ showHome = true
+ homeLabel = "Home"
+ homeHref = "/"
+ }
+
+ view {
+
+
+
+
+
+
+
+
+ {homeLabel}
+
+
+
+ {homeLabel}
+
+
+
+
+
+
+
+
+
+
+ {#each items as item, index}
+
+
+
+ {item.label}
+
+
+
+
+ {item.label}
+
+
+
+
+ {item.label}
+
+
+
+
+
+
+
+ {/each}
+
+
+ }
}
diff --git a/.publish/ui/components/ContactSalesBanner.wrn b/.publish/ui/components/ContactSalesBanner.wrn
new file mode 100644
index 00000000..58a954d9
--- /dev/null
+++ b/.publish/ui/components/ContactSalesBanner.wrn
@@ -0,0 +1,195 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+ {#each points.slice(0, 4) as point}
+
+
+
+
+
+ {point}
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
+ {#each trustPoints.slice(0, 4) as trustPoint}
+
+
+
+ {trustPoint.label}
+
+ {/each}
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/CookieConsent.wrn b/.publish/ui/components/CookieConsent.wrn
new file mode 100644
index 00000000..58f63e21
--- /dev/null
+++ b/.publish/ui/components/CookieConsent.wrn
@@ -0,0 +1,372 @@
+component CookieConsent {
+ props {
+ class: string = ""
+ }
+ state bannerOpen = false
+ state preferencesOpen = false
+
+ state analyticsCookies = false
+ state personalizationCookies = false
+ state marketingCookies = false
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your privacy matters
+
+
+
+ Privacy first
+
+
+
+
+ We use essential cookies to operate WrNexus. With your
+ permission, we also use analytics and personalization cookies
+ to improve your experience.
+
+
+
+
+
+
+
+
+
+ Essential only
+
+
+
+
+
+ Preferences
+
+
+
+ Accept all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cookie preferences
+
+
+
+ Choose which optional cookies WrNexus may use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Essential cookies
+
+
+
+ Always active
+
+
+
+
+ Required for authentication, security, sessions, preferences, and core website functionality.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Analytics cookies
+
+
+
+ Help us understand website usage, performance, and navigation patterns.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Personalization cookies
+
+
+
+ Remember your choices and provide a more relevant website experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Marketing cookies
+
+
+
+ Measure campaigns and show relevant WrNexus content across supported services.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/DevelopersMegaMenu.wrn b/.publish/ui/components/DevelopersMegaMenu.wrn
new file mode 100644
index 00000000..529dddfc
--- /dev/null
+++ b/.publish/ui/components/DevelopersMegaMenu.wrn
@@ -0,0 +1,421 @@
+component DevelopersMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+ Build secure identity into any application
+
+
+
+ Explore documentation, APIs, SDKs, examples, and tools built
+ for modern development teams.
+
+
+
+
+ Open documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Documentation
+
+
+
+
+
+
+ Guides for authentication, users, organizations, and
+ authorization.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ API reference
+
+
+
+
+
+
+ Complete endpoint, request, response, and error
+ documentation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SDKs
+
+
+
+
+
+
+ Official libraries for JavaScript, TypeScript, Go, Java,
+ Python, and more.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Examples
+
+
+
+
+
+
+ Ready-to-run projects for common frameworks and identity
+ flows.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Webhooks
+
+
+
+
+
+
+ Respond to user, session, organization, and security events.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Changelog
+
+
+
+
+
+
+ Review platform releases, improvements, and migration notes.
+
+
+
+
+
+
+ Open documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developer toolkit
+
+
+
+
+
+
+
+
+ APIs operational
+
+
+
+
+
+
+
+
+
+ Everything developers need
+
+
+
+ Build, test, and ship secure identity flows with APIs, SDKs,
+ examples, webhooks, and complete documentation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/EmptyState.wrn b/.publish/ui/components/EmptyState.wrn
index 1959bb46..c3c870e6 100644
--- a/.publish/ui/components/EmptyState.wrn
+++ b/.publish/ui/components/EmptyState.wrn
@@ -1,13 +1,167 @@
component EmptyState {
- props {
- class = ""
- icon = "◇"
- title = "Nothing here yet"
- description = ""
- actionLabel = ""
- actionHref = "#"
- }
- view {
- {icon}
{title} {description}
{actionLabel}
- }
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = "Nothing found"
+ description = ""
+
+ iconClass = "icon-[lucide--inbox]"
+
+ primaryLabel = ""
+ primaryHref = ""
+
+ secondaryLabel = ""
+ secondaryHref = ""
+
+ compact = false
+ centered = true
+
+ suggestions = []
+ }
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/ErrorState.wrn b/.publish/ui/components/ErrorState.wrn
index 65bf64ff..b3776e7d 100644
--- a/.publish/ui/components/ErrorState.wrn
+++ b/.publish/ui/components/ErrorState.wrn
@@ -1,13 +1,193 @@
component ErrorState {
- props {
- class = ""
- code = "500"
- title = "Something went wrong"
- description = "Please try again."
- actionLabel = "Try again"
- actionHref = "/"
- }
- view {
- {code}
{title} {description}
{actionLabel}
- }
+ 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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {errorCode}
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+ {#each details.slice(0, 4) as detail}
+
+
+
+
+
+ {detail.label}
+
+ {/each}
+
+
+
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/LogoCloud.wrn b/.publish/ui/components/LogoCloud.wrn
index 41d26bbc..bc207fd5 100644
--- a/.publish/ui/components/LogoCloud.wrn
+++ b/.publish/ui/components/LogoCloud.wrn
@@ -1,9 +1,150 @@
component LogoCloud {
- props {
- class = ""
- title = "Trusted by modern teams"
- }
- view {
-
- }
+ 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 {
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+ And {logos.length - maxItems} more teams using WrNexus.
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/NewsletterForm.wrn b/.publish/ui/components/NewsletterForm.wrn
index 1ed569a9..c7790ea7 100644
--- a/.publish/ui/components/NewsletterForm.wrn
+++ b/.publish/ui/components/NewsletterForm.wrn
@@ -1,13 +1,214 @@
component NewsletterForm {
- props {
- eyebrow = ""
- title = ""
- description = ""
- href = ""
- actionLabel = "Learn more"
- image = ""
- alt = ""
- class = ""
- }
- view { {eyebrow} {title} {description}
{actionLabel} }
+ 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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/PageHeader.wrn b/.publish/ui/components/PageHeader.wrn
new file mode 100644
index 00000000..6fd1a09d
--- /dev/null
+++ b/.publish/ui/components/PageHeader.wrn
@@ -0,0 +1,172 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+
+ {#each highlights as highlight}
+
= 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"
+ >
+
+
+
+
+
+
+
+ {highlight.title}
+
+
+
+ {highlight.description}
+
+
+
+
+ {/each}
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/Pagination.wrn b/.publish/ui/components/Pagination.wrn
index 712d1d3c..05d24965 100644
--- a/.publish/ui/components/Pagination.wrn
+++ b/.publish/ui/components/Pagination.wrn
@@ -1,12 +1,187 @@
component Pagination {
- props {
- class = ""
- page = 1
- totalPages = 1
- previousHref = "#"
- nextHref = "#"
- }
- view {
- ← Previous Page {page} of {totalPages} Next →
- }
+ props {
+ class: string = ""
+ currentPage = 1
+ totalPages = 1
+
+ previousHref = ""
+ nextHref = ""
+
+ pages = []
+
+ showNumbers = true
+ showSummary = true
+
+ totalItems = 0
+ pageSize = 10
+
+ compact = false
+ centered = false
+ }
+
+ view {
+
+
+
+ Showing
+
+
+ {(currentPage - 1) * pageSize + 1}
+
+
+ to
+
+
+ {currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize}
+
+
+ of
+
+
+ {totalItems}
+
+
+ results
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/ProductMegaMenu.wrn b/.publish/ui/components/ProductMegaMenu.wrn
new file mode 100644
index 00000000..09a9d48a
--- /dev/null
+++ b/.publish/ui/components/ProductMegaMenu.wrn
@@ -0,0 +1,332 @@
+component ProductMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Platform
+
+
+
+
+
+
+ Unified identity infrastructure for every application.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authentication
+
+
+
+
+
+
+ Passwords, passkeys, social login, MFA, and SSO.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User management
+
+
+
+
+
+
+ Profiles, sessions, invitations, and user lifecycle.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Organizations
+
+
+
+
+
+
+ Multi-tenant workspaces, teams, domains, and membership.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authorization
+
+
+
+
+
+
+ Roles, permissions, policies, and protected resources.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Security
+
+
+
+
+
+
+ Session controls, recovery, audit logs, and threat protection.
+
+
+
+
+
+
+ View all product features
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Featured
+
+
+
+
+
+
+
+ Identity built for modern SaaS
+
+
+
+ Add secure authentication, organizations, permissions, and user
+ management without rebuilding identity infrastructure.
+
+
+
+
+
+
+
+
+ Passkeys and multifactor authentication
+
+
+
+
+
+
+
+ Organizations and workspace isolation
+
+
+
+
+
+
+
+ APIs and SDKs for every stack
+
+
+
+
+ Explore SaaS identity
+
+
+
+
+
+
+
+ Developer-first and API-ready
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/PublicFooter.wrn b/.publish/ui/components/PublicFooter.wrn
index daea9e2d..7d5b7fee 100644
--- a/.publish/ui/components/PublicFooter.wrn
+++ b/.publish/ui/components/PublicFooter.wrn
@@ -1,11 +1,608 @@
component PublicFooter {
- props {
- class = ""
- brand = "WRNexusJS"
- description = "SSR-first, Bun-native full-stack framework."
- copyright = "© 2026 WorkRoot Workspace"
- }
- view {
-
- }
+ props {
+ class: string = ""
+ }
+ state email = ""
+ state newsletterSubmitted = false
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WrNexus updates
+
+
+
+
+
+ Get product updates, security guidance, implementation
+ strategies, and practical identity architecture resources.
+
+
+
+
+
+
+
+
+
+ No spam. Unsubscribe at any time. Read our
+
+ privacy policy
+ .
+
+
+
+
+
+ Thanks. Please check your inbox to confirm your subscription.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ © 2026 WrNexus. All rights reserved.
+
+
+
+
+
+ Built by WorkRoot Workspace.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Theme
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/PublicHeader.wrn b/.publish/ui/components/PublicHeader.wrn
index db9c0ac6..4168c9a4 100644
--- a/.publish/ui/components/PublicHeader.wrn
+++ b/.publish/ui/components/PublicHeader.wrn
@@ -1,14 +1,284 @@
component PublicHeader {
- props {
- class = ""
- brand = "WRNexusJS"
- homeHref = "/"
- signInHref = "/signin"
- ctaHref = "/start"
- ctaLabel = "Get started"
- }
- state mobileOpen = false
- view {
-
- }
+ props {
+ class: string = ""
+ }
+ state activeMenu = ""
+ state mobileMenuOpen = false
+ state headerScrolled = false
+
+ view {
+
+ }
}
diff --git a/.publish/ui/components/PublicMobileNavigation.wrn b/.publish/ui/components/PublicMobileNavigation.wrn
new file mode 100644
index 00000000..b8640479
--- /dev/null
+++ b/.publish/ui/components/PublicMobileNavigation.wrn
@@ -0,0 +1,589 @@
+component PublicMobileNavigation {
+ props {
+ class: string = ""
+ }
+ state openSection = ""
+
+ view {
+
+ }
+}
diff --git a/.publish/ui/components/PublicSearch.wrn b/.publish/ui/components/PublicSearch.wrn
new file mode 100644
index 00000000..612c374d
--- /dev/null
+++ b/.publish/ui/components/PublicSearch.wrn
@@ -0,0 +1,125 @@
+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 {
+
+ }
+}
diff --git a/.publish/ui/components/ResourcesMegaMenu.wrn b/.publish/ui/components/ResourcesMegaMenu.wrn
index 67694937..e5b32038 100644
--- a/.publish/ui/components/ResourcesMegaMenu.wrn
+++ b/.publish/ui/components/ResourcesMegaMenu.wrn
@@ -1,10 +1,365 @@
component ResourcesMegaMenu {
- props {
- title = ""
- description = ""
- open = false
- closeLabel = "Close"
- class = ""
- }
- view { }
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+ Learn, build, and get support
+
+
+
+ Explore practical guides, customer stories, product updates,
+ and security resources.
+
+
+
+
+ View all resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog
+
+
+
+
+
+
+ Product updates, engineering insights, identity trends, and
+ company news.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Customer stories
+
+
+
+
+
+
+ See how teams use WrNexus to secure and scale their
+ applications.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Guides
+
+
+
+
+
+
+ Practical identity, security, SaaS, and architecture
+ walkthroughs.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Help center
+
+
+
+
+
+
+ Find answers for account, workspace, billing, and security
+ questions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Security
+
+
+
+
+
+
+ Learn how WrNexus protects accounts, sessions, and
+ organizations.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trust center
+
+
+
+
+
+
+ Review compliance, privacy, infrastructure, and operational
+ controls.
+
+
+
+
+
+
+ View all resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Featured guide
+
+
+
+
+
+
+
+ The modern SaaS identity checklist
+
+
+
+ A practical checklist covering authentication, organizations,
+ permissions, MFA, recovery, sessions, and enterprise SSO.
+
+
+
+
+
+
+
+
+
+ Secure authentication foundations
+
+
+
+
+
+
+
+
+
+ Multi-tenant organization design
+
+
+
+
+
+
+
+
+
+ Recovery and account protection
+
+
+
+
+
+ Read the guide
+
+
+
+
+
+
+
+
+ 12 min read
+
+
+
+
+
+ PDF available
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/SocialShare.wrn b/.publish/ui/components/SocialShare.wrn
new file mode 100644
index 00000000..b0420ef5
--- /dev/null
+++ b/.publish/ui/components/SocialShare.wrn
@@ -0,0 +1,143 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+ {#each networks.slice(0, 5) as network}
+
+
+
+
+ {network.label}
+
+
+ {/each}
+
+
+
+
+
+
+
+
+ {copied ? 'Copied' : 'Copy link'}
+
+
+
+
+
+
+
+ Page link copied to your clipboard.
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/SolutionsMegaMenu.wrn b/.publish/ui/components/SolutionsMegaMenu.wrn
index a6f22457..48a1c6f3 100644
--- a/.publish/ui/components/SolutionsMegaMenu.wrn
+++ b/.publish/ui/components/SolutionsMegaMenu.wrn
@@ -1,10 +1,368 @@
component SolutionsMegaMenu {
- props {
- title = ""
- description = ""
- open = false
- closeLabel = "Close"
- class = ""
- }
- view { }
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Solutions
+
+
+
+ Identity infrastructure for every stage of growth
+
+
+
+ Choose a solution designed around your product, team, and customers.
+
+
+
+
+ View all solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Startups
+
+
+
+
+
+
+ Launch secure authentication quickly without slowing product development.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaS platforms
+
+
+
+
+
+
+ Add users, organizations, roles, SSO, and secure account recovery.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Enterprise
+
+
+
+
+
+
+ Support complex organizations, governance, auditability, and scale.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+
+
+
+ APIs, SDKs, webhooks, templates, and developer-friendly workflows.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agencies
+
+
+
+
+
+
+ Manage identities across customer projects and branded experiences.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B2B products
+
+
+
+
+
+
+ Secure customer organizations, team access, and enterprise connections.
+
+
+
+
+
+
+ View all solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recommended for SaaS
+
+
+
+
+
+
+
+ Launch enterprise-ready identity
+
+
+
+ Start with simple authentication and add organizations,
+ permissions, enterprise SSO, and governance as your product grows.
+
+
+
+
+
+
+
+
+
+
+ Faster launch
+
+
+
+ Start with secure defaults
+
+
+
+
+
+
+
+
+
+
+
+ Built to scale
+
+
+
+ Add advanced controls later
+
+
+
+
+
+
+
+
+
+
+
+ Secure by design
+
+
+
+ Protect every account flow
+
+
+
+
+
+
+ Explore the SaaS solution
+
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/.publish/ui/components/StatusBanner.wrn b/.publish/ui/components/StatusBanner.wrn
new file mode 100644
index 00000000..83c8f0f7
--- /dev/null
+++ b/.publish/ui/components/StatusBanner.wrn
@@ -0,0 +1,122 @@
+component StatusBanner {
+ props {
+ class: string = ""
+ type = "info"
+
+ title = ""
+ description = ""
+
+ actionLabel = ""
+ actionHref = ""
+
+ dismissible = true
+ compact = false
+
+ details = []
+ }
+
+ state visible = true
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+ {#each details.slice(0, 4) as detail}
+
+
+
+ {detail.label}
+
+ {/each}
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/components/ToastHost.wrn b/.publish/ui/components/ToastHost.wrn
new file mode 100644
index 00000000..36a516b5
--- /dev/null
+++ b/.publish/ui/components/ToastHost.wrn
@@ -0,0 +1,212 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+ {successTitle}
+
+
+
+ {successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {errorTitle}
+
+
+
+ {errorMessage}
+
+
+
+ Try again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {warningTitle}
+
+
+
+ {warningMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/.publish/ui/package.json b/.publish/ui/package.json
index d9fdb344..b09d3573 100644
--- a/.publish/ui/package.json
+++ b/.publish/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/ui — part of the WrNexus framework.",
"license": "MIT",
@@ -25,7 +25,7 @@
"./ui.css": "./ui.css"
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist",
diff --git a/.publish/ui/ui.css b/.publish/ui/ui.css
index 78437c37..44455d5d 100644
--- a/.publish/ui/ui.css
+++ b/.publish/ui/ui.css
@@ -1050,9 +1050,10 @@
--wire-ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
}
-/* Tailwind v4 color bridge. Existing utility-authored components inherit the
- * configured semantic palette without requiring generated per-palette markup. */
-[data-component] {
+/* Tailwind v4 color bridge. Define the aliases at the document root so both
+ * packaged components and application-authored pages/components inherit the
+ * palette selected in wrnexus.config.ts. */
+:root {
--color-violet-50: color-mix(in srgb, var(--wire-color-primary) 7%, white);
--color-violet-100: color-mix(in srgb, var(--wire-color-primary) 14%, white);
--color-violet-200: color-mix(in srgb, var(--wire-color-primary) 25%, white);
@@ -1096,6 +1097,47 @@
--color-rose-700: color-mix(in srgb, var(--wire-color-danger) 80%, black);
}
+/* Stable semantic helpers for application-authored markup. These deliberately
+ * avoid spacing so applications remain in control of their own layout. */
+.wire-bg-page {
+ background-color: var(--wire-color-bg);
+}
+.wire-bg-surface {
+ background-color: var(--wire-color-surface);
+}
+.wire-bg-surface-2 {
+ background-color: var(--wire-color-surface-2);
+}
+.wire-bg-primary {
+ background-color: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+}
+.wire-bg-secondary {
+ background-color: var(--wire-color-secondary);
+ color: var(--wire-color-secondary-contrast);
+}
+.wire-text {
+ color: var(--wire-color-text);
+}
+.wire-text-muted {
+ color: var(--wire-color-muted);
+}
+.wire-text-primary {
+ color: var(--wire-color-primary);
+}
+.wire-text-success {
+ color: var(--wire-color-success);
+}
+.wire-text-warning {
+ color: var(--wire-color-warning);
+}
+.wire-text-danger {
+ color: var(--wire-color-danger);
+}
+.wire-border {
+ border-color: var(--wire-color-border);
+}
+
[data-component] {
animation: wire-component-enter var(--wire-motion-slow) var(--wire-ease-emphasized) both;
}
diff --git a/.publish/uploader/package.json b/.publish/uploader/package.json
index 195d50e4..ae1f05d2 100644
--- a/.publish/uploader/package.json
+++ b/.publish/uploader/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/uploader — part of the WrNexus framework.",
"license": "MIT",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "@wrnexus/core": "^0.2.61"
+ "@wrnexus/core": "^0.2.62"
},
"files": [
"dist"
diff --git a/.publish/validation/package.json b/.publish/validation/package.json
index f55c6b5b..aaa950f6 100644
--- a/.publish/validation/package.json
+++ b/.publish/validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"description": "@wrnexus/validation — part of the WrNexus framework.",
"license": "MIT",
diff --git a/packages/ai/package.json b/packages/ai/package.json
index 607a1859..188d86ac 100644
--- a/packages/ai/package.json
+++ b/packages/ai/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ai",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"description": "Zero-dependency Claude (Anthropic) client for WrNexus apps.",
diff --git a/packages/authz/package.json b/packages/authz/package.json
index 37016ba8..540aac43 100644
--- a/packages/authz/package.json
+++ b/packages/authz/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/authz",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 18e7b744..4d240732 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/cli",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/cli/src/update.ts b/packages/cli/src/update.ts
index 35e14d3e..941d018a 100644
--- a/packages/cli/src/update.ts
+++ b/packages/cli/src/update.ts
@@ -619,6 +619,15 @@ const MIGRATIONS: Migration[] = [
// The UI component and stylesheet updates apply automatically.
},
},
+ {
+ version: "0.2.62",
+ id: "application-theme-contract-and-public-ui",
+ description:
+ "Exposes semantic theme helpers to application UI and promotes the public-site components into @wrnexus/ui.",
+ apply() {
+ // Package auto-discovery and the root-level theme aliases apply automatically.
+ },
+ },
];
/** Release tooling uses this to require an explicit migration entry per version. */
diff --git a/packages/compiler/package.json b/packages/compiler/package.json
index 62123f00..a7f6056d 100644
--- a/packages/compiler/package.json
+++ b/packages/compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/compiler",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/core/package.json b/packages/core/package.json
index ea378f1b..8d6095aa 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/core",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/csr/package.json b/packages/csr/package.json
index 1bfed5ae..d4df2f17 100644
--- a/packages/csr/package.json
+++ b/packages/csr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/csr",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/db/package.json b/packages/db/package.json
index 7212e29c..756de956 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/db",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/dev-server/package.json b/packages/dev-server/package.json
index 6e1b0435..fc9b83ee 100644
--- a/packages/dev-server/package.json
+++ b/packages/dev-server/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/dev-server",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/encryption/package.json b/packages/encryption/package.json
index 412a3697..c7ceaae8 100644
--- a/packages/encryption/package.json
+++ b/packages/encryption/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/encryption",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/helpers/package.json b/packages/helpers/package.json
index 4f29b2d3..0975e09b 100644
--- a/packages/helpers/package.json
+++ b/packages/helpers/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/helpers",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"description": "Safe convenience helpers for WrNexus request contexts and common application flows.",
diff --git a/packages/i18n/package.json b/packages/i18n/package.json
index 356b8759..1fd9d258 100644
--- a/packages/i18n/package.json
+++ b/packages/i18n/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/i18n",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/jwt/package.json b/packages/jwt/package.json
index cfc54fed..2976c82a 100644
--- a/packages/jwt/package.json
+++ b/packages/jwt/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/jwt",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/mobile/package.json b/packages/mobile/package.json
index 34a38aa5..9965a27b 100644
--- a/packages/mobile/package.json
+++ b/packages/mobile/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/mobile",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/native/package.json b/packages/native/package.json
index 623548fb..c1c6d9e8 100644
--- a/packages/native/package.json
+++ b/packages/native/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/native",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/oauth/package.json b/packages/oauth/package.json
index dadcab71..9f79fc5f 100644
--- a/packages/oauth/package.json
+++ b/packages/oauth/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/oauth",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json
index 7ab9dd19..dfbf93a7 100644
--- a/packages/pubsub/package.json
+++ b/packages/pubsub/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/pubsub",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/queue/package.json b/packages/queue/package.json
index 5e6af10d..8e6d0a0d 100644
--- a/packages/queue/package.json
+++ b/packages/queue/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/queue",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/reactive/package.json b/packages/reactive/package.json
index a6320310..435490da 100644
--- a/packages/reactive/package.json
+++ b/packages/reactive/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/reactive",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/router/package.json b/packages/router/package.json
index 376911ac..880821e5 100644
--- a/packages/router/package.json
+++ b/packages/router/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/router",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/ssr/package.json b/packages/ssr/package.json
index 8d4a5397..a1a33d9b 100644
--- a/packages/ssr/package.json
+++ b/packages/ssr/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ssr",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/styles/package.json b/packages/styles/package.json
index d22384b0..33475b42 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/styles",
- "version": "0.2.61",
+ "version": "0.2.62",
"type": "module",
"main": "src/index.ts",
"exports": {
diff --git a/packages/test/package.json b/packages/test/package.json
index e940148e..6ea4b480 100644
--- a/packages/test/package.json
+++ b/packages/test/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/test",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/tracking/package.json b/packages/tracking/package.json
index 8f1c2e0d..7b1621f9 100644
--- a/packages/tracking/package.json
+++ b/packages/tracking/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/tracking",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/ui/COMPONENTS.md b/packages/ui/COMPONENTS.md
index 26e199c0..11dda934 100644
--- a/packages/ui/COMPONENTS.md
+++ b/packages/ui/COMPONENTS.md
@@ -1,6 +1,6 @@
# WRNexus UI component reference
-This reference is generated from the 891 packaged `.wrn` component sources. Props marked required have no default; all others show their runtime default.
+This reference is generated from the 901 packaged `.wrn` component sources. Props marked required have no default; all others show their runtime default.
## Actions
@@ -1964,9 +1964,9 @@ Reusable navigation item component.
Reusable newsletter form component.
- Mount: `data-component="NewsletterForm"`
-- Props: `eyebrow: string = ""`, `title: string = ""`, `description: string = ""`, `href: string = ""`, `actionLabel: string = "Learn more"`, `image: string = ""`, `alt: string = ""`, `class: string = ""`
-- Slots: `default`
-- Events: None
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Stay up to date"`, `description: string = ""`, `placeholder: string = "Enter your email"`, `buttonLabel: string = "Subscribe"`, `action: string = "/newsletter/subscribe"`, `method: string = "post"`, `emailName: string = "email"`, `privacyLabel: string = ""`, `privacyHref: string = "/privacy"`, `successMessage: string = "You are subscribed."`, `errorMessage: string = "Something went wrong. Please try again."`, `iconClass: string = "icon-[lucide--mail]"`, `centered: boolean = false`, `compact: boolean = false`, `showIcon: boolean = true`, `showPrivacy: boolean = true`, `fullWidth: boolean = false`
+- Slots: None
+- Events: `submit`, `input`
### NotFoundPage
@@ -2911,7 +2911,7 @@ Reusable back to top component.
Reusable breadcrumbs component.
- Mount: `data-component="Breadcrumbs"`
-- Props: `class: string = ""`, `homeLabel: string = "Home"`, `homeHref: string = "/"`, `current: string = "Current page"`
+- Props: `class: string = ""`, `items: string = []`, `centered: boolean = false`, `compact: boolean = false`, `showHome: boolean = true`, `homeLabel: string = "Home"`, `homeHref: string = "/"`
- Slots: None
- Events: None
@@ -2951,6 +2951,15 @@ Reusable combobox component.
- Slots: None
- Events: None
+### ContactSalesBanner
+
+Reusable contact sales banner component.
+
+- Mount: `data-component="ContactSalesBanner"`
+- Props: `class: string = ""`, `eyebrow: string = "Enterprise identity"`, `title: string = "Ready to secure your next application?"`, `description: string = ""`, `primaryLabel: string = "Contact sales"`, `primaryHref: string = "/contact"`, `secondaryLabel: string = "Start free"`, `secondaryHref: string = "/sign-up"`, `iconClass: string = "icon-[lucide--messages-square]"`, `centered: boolean = false`, `compact: boolean = false`, `points: string = []`, `trustPoints: string = []`
+- Slots: None
+- Events: None
+
### Container
Reusable container component.
@@ -2960,6 +2969,24 @@ Reusable container component.
- Slots: `default`
- Events: None
+### CookieConsent
+
+Reusable cookie consent component.
+
+- Mount: `data-component="CookieConsent"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`, `change`
+
+### DevelopersMegaMenu
+
+Reusable developers mega menu component.
+
+- Mount: `data-component="DevelopersMegaMenu"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: None
+
### disclosure
Reusable disclosure component.
@@ -3109,8 +3136,8 @@ Reusable link component.
Reusable logo cloud component.
- Mount: `data-component="LogoCloud"`
-- Props: `class: string = ""`, `title: string = "Trusted by modern teams"`
-- Slots: `default`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Trusted by teams building modern products"`, `description: string = ""`, `logos: string = []`, `centered: boolean = true`, `compact: boolean = false`, `variant: string = "strip"`, `grayscale: boolean = true`, `showNames: boolean = false`, `maxItems: number = 8`
+- Slots: None
- Events: None
### Modal
@@ -3149,6 +3176,15 @@ Reusable notification dot component.
- Slots: `default`
- Events: None
+### PageHeader
+
+Reusable page header component.
+
+- Mount: `data-component="PageHeader"`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = ""`, `description: string = ""`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `icon: string = "sparkles"`, `centered: boolean = false`, `compact: boolean = false`, `showBreadcrumbs: boolean = false`, `breadcrumbParent: string = ""`, `breadcrumbParentHref: string = ""`, `breadcrumbCurrent: string = ""`, `highlights: string = []`
+- Slots: None
+- Events: None
+
### PageHeading
Reusable page heading component.
@@ -3172,7 +3208,7 @@ Reusable page shell component.
Reusable pagination component.
- Mount: `data-component="Pagination"`
-- Props: `class: string = ""`, `page: number = 1`, `totalPages: number = 1`, `previousHref: string = "#"`, `nextHref: string = "#"`
+- Props: `class: string = ""`, `currentPage: number = 1`, `totalPages: number = 1`, `previousHref: string = ""`, `nextHref: string = ""`, `pages: string = []`, `showNumbers: boolean = true`, `showSummary: boolean = true`, `totalItems: number = 0`, `pageSize: number = 10`, `compact: boolean = false`, `centered: boolean = false`
- Slots: None
- Events: None
@@ -3185,6 +3221,15 @@ Reusable pill component.
- Slots: `default`
- Events: None
+### ProductMegaMenu
+
+Reusable product mega menu component.
+
+- Mount: `data-component="ProductMegaMenu"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: None
+
### progress
Reusable progress component.
@@ -3208,9 +3253,27 @@ Reusable progress bar component.
Reusable public footer component.
- Mount: `data-component="PublicFooter"`
-- Props: `class: string = ""`, `brand: string = "WRNexusJS"`, `description: string = "SSR-first, Bun-native full-stack framework."`, `copyright: string = "© 2026 WorkRoot Workspace"`
-- Slots: `default`
-- Events: None
+- Props: `class: string = ""`
+- Slots: None
+- Events: `submit`
+
+### PublicMobileNavigation
+
+Reusable public mobile navigation component.
+
+- Mount: `data-component="PublicMobileNavigation"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`
+
+### PublicSearch
+
+Reusable public search component.
+
+- Mount: `data-component="PublicSearch"`
+- Props: `class: string = ""`, `query: string = ""`, `placeholder: string = "Search..."`, `label: string = "Search"`, `action: string = ""`, `method: string = "get"`, `name: string = "q"`, `buttonLabel: string = ""`, `clearLabel: string = "Clear search"`, `size: string = "default"`, `centered: boolean = false`, `fullWidth: boolean = false`, `showShortcut: boolean = false`, `shortcutLabel: string = "⌘ K"`, `suggestions: string = []`
+- Slots: None
+- Events: `input`, `focus`, `blur`, `click`
### Radio
@@ -3257,6 +3320,15 @@ Reusable select component.
- Slots: `default`
- Events: None
+### SocialShare
+
+Reusable social share component.
+
+- Mount: `data-component="SocialShare"`
+- Props: `class: string = ""`, `title: string = "Share this page"`, `description: string = ""`, `url: string = ""`, `shareText: string = ""`, `centered: boolean = false`, `compact: boolean = false`, `showTitle: boolean = true`, `showCopy: boolean = true`, `networks: string = []`
+- Slots: None
+- Events: `click`
+
### spacer
Reusable spacer component.
@@ -3284,6 +3356,15 @@ Reusable stack component.
- Slots: `default`
- Events: None
+### StatusBanner
+
+Reusable status banner component.
+
+- Mount: `data-component="StatusBanner"`
+- Props: `class: string = ""`, `type: string = "info"`, `title: string = ""`, `description: string = ""`, `actionLabel: string = ""`, `actionHref: string = ""`, `dismissible: boolean = true`, `compact: boolean = false`, `details: string = []`
+- Slots: None
+- Events: `click`
+
### Sticky
Reusable sticky component.
@@ -3356,6 +3437,15 @@ Reusable toast component.
- Slots: None
- Events: `click`
+### ToastHost
+
+Reusable toast host component.
+
+- Mount: `data-component="ToastHost"`
+- Props: `class: string = ""`
+- Slots: None
+- Events: `click`
+
### Typography
Reusable typography component.
@@ -4292,7 +4382,7 @@ Reusable deprecated feature alert component.
Reusable empty state component.
- Mount: `data-component="EmptyState"`
-- Props: `class: string = ""`, `icon: string = "◇"`, `title: string = "Nothing here yet"`, `description: string = ""`, `actionLabel: string = ""`, `actionHref: string = "#"`
+- Props: `class: string = ""`, `eyebrow: string = ""`, `title: string = "Nothing found"`, `description: string = ""`, `iconClass: string = "icon-[lucide--inbox]"`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `compact: boolean = false`, `centered: boolean = true`, `suggestions: string = []`
- Slots: None
- Events: None
@@ -4301,9 +4391,9 @@ Reusable empty state component.
Reusable error state component.
- Mount: `data-component="ErrorState"`
-- Props: `class: string = ""`, `code: string = "500"`, `title: string = "Something went wrong"`, `description: string = "Please try again."`, `actionLabel: string = "Try again"`, `actionHref: string = "/"`
+- Props: `class: string = ""`, `type: string = "error"`, `eyebrow: string = ""`, `title: string = "Something went wrong"`, `description: string = ""`, `errorCode: string = ""`, `iconClass: string = ""`, `primaryLabel: string = ""`, `primaryHref: string = ""`, `secondaryLabel: string = ""`, `secondaryHref: string = ""`, `retryLabel: string = ""`, `retryAction: string = ""`, `centered: boolean = true`, `compact: boolean = false`, `details: string = []`
- Slots: None
-- Events: None
+- Events: `click`
### FeatureUnavailableState
@@ -7113,8 +7203,8 @@ Reusable product page shell component.
Reusable public header component.
- Mount: `data-component="PublicHeader"`
-- Props: `class: string = ""`, `brand: string = "WRNexusJS"`, `homeHref: string = "/"`, `signInHref: string = "/signin"`, `ctaHref: string = "/start"`, `ctaLabel: string = "Get started"`
-- Slots: `default`, `mobile`
+- Props: `class: string = ""`
+- Slots: None
- Events: `click`
### PublicPageShell
@@ -7547,8 +7637,8 @@ Reusable prompt dialog component.
Reusable resources mega menu component.
- Mount: `data-component="ResourcesMegaMenu"`
-- Props: `title: string = ""`, `description: string = ""`, `open: boolean = false`, `closeLabel: string = "Close"`, `class: string = ""`
-- Slots: `default`
+- Props: `class: string = ""`
+- Slots: None
- Events: None
### SearchDialog
@@ -7583,8 +7673,8 @@ Reusable session expired dialog component.
Reusable solutions mega menu component.
- Mount: `data-component="SolutionsMegaMenu"`
-- Props: `title: string = ""`, `description: string = ""`, `open: boolean = false`, `closeLabel: string = "Close"`, `class: string = ""`
-- Slots: `default`
+- Props: `class: string = ""`
+- Slots: None
- Events: None
### StepUpAuthenticationDialog
diff --git a/packages/ui/README.md b/packages/ui/README.md
index cf510702..017f1837 100644
--- a/packages/ui/README.md
+++ b/packages/ui/README.md
@@ -133,6 +133,36 @@ entry and interaction motion. Override `--wire-motion-fast`,
`--wire-ease-emphasized` to tune it. Hover lift is limited to precise pointing
devices and `prefers-reduced-motion` is honored automatically.
+### Using the selected theme in application UI
+
+The active theme and palette are not limited to `@wrnexus/ui` components. The
+framework exposes the resolved values as semantic CSS custom properties, so
+pages and custom `.wrn` components can use the same contract:
+
+```css
+.account-card {
+ background: var(--wire-color-surface);
+ color: var(--wire-color-text);
+ border: 1px solid var(--wire-color-border);
+}
+
+.account-card__action {
+ background: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+}
+```
+
+Stable no-spacing helper classes are also available: `wire-bg-page`,
+`wire-bg-surface`, `wire-bg-surface-2`, `wire-bg-primary`, `wire-bg-secondary`,
+`wire-text`, `wire-text-muted`, `wire-text-primary`, `wire-text-success`,
+`wire-text-warning`, `wire-text-danger`, and `wire-border`.
+
+Tailwind-authored custom markup can continue using the palette families already
+used by packaged components. `indigo-*` and `violet-*` resolve to primary,
+`blue-*` to info, `emerald-*`/`green-*` to success, `amber-*` to warning, and
+`red-*`/`rose-*` to danger. These aliases live at `:root`, so they work outside
+a `[data-component]` boundary too.
+
## Usage
### Auto-discovery
diff --git a/packages/ui/component-reference.json b/packages/ui/component-reference.json
index 561a5c4f..743124b9 100644
--- a/packages/ui/component-reference.json
+++ b/packages/ui/component-reference.json
@@ -1,6 +1,6 @@
{
"generatedFrom": "packages/ui/components/*.wrn",
- "count": 891,
+ "count": 901,
"components": [
{
"name": "AcceptAllCookiesButton",
@@ -4505,6 +4505,30 @@
"required": false,
"default": "\"\""
},
+ {
+ "name": "items",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showHome",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
{
"name": "homeLabel",
"type": "string",
@@ -4516,12 +4540,6 @@
"type": "string",
"required": false,
"default": "\"/\""
- },
- {
- "name": "current",
- "type": "string",
- "required": false,
- "default": "\"Current page\""
}
],
"slots": [],
@@ -9616,6 +9634,95 @@
"events": [],
"source": "components/ContactPageShell.wrn"
},
+ {
+ "name": "ContactSalesBanner",
+ "mount": "ContactSalesBanner",
+ "category": "core",
+ "purpose": "Reusable contact sales banner component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"Enterprise identity\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"Ready to secure your next application?\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Contact sales\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"/contact\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Start free\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"/sign-up\""
+ },
+ {
+ "name": "iconClass",
+ "type": "string",
+ "required": false,
+ "default": "\"icon-[lucide--messages-square]\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "points",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "trustPoints",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/ContactSalesBanner.wrn"
+ },
{
"name": "ContactSalesButton",
"mount": "ContactSalesButton",
@@ -10145,6 +10252,23 @@
"events": [],
"source": "components/CookieCategoryToggle.wrn"
},
+ {
+ "name": "CookieConsent",
+ "mount": "CookieConsent",
+ "category": "core",
+ "purpose": "Reusable cookie consent component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click", "change"],
+ "source": "components/CookieConsent.wrn"
+ },
{
"name": "CookieDetailsTable",
"mount": "CookieDetailsTable",
@@ -13171,6 +13295,23 @@
"events": [],
"source": "components/DeveloperSearch.wrn"
},
+ {
+ "name": "DevelopersMegaMenu",
+ "mount": "DevelopersMegaMenu",
+ "category": "core",
+ "purpose": "Reusable developers mega menu component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/DevelopersMegaMenu.wrn"
+ },
{
"name": "DevelopersMenu",
"mount": "DevelopersMenu",
@@ -14686,16 +14827,16 @@
"default": "\"\""
},
{
- "name": "icon",
+ "name": "eyebrow",
"type": "string",
"required": false,
- "default": "\"◇\""
+ "default": "\"\""
},
{
"name": "title",
"type": "string",
"required": false,
- "default": "\"Nothing here yet\""
+ "default": "\"Nothing found\""
},
{
"name": "description",
@@ -14704,16 +14845,52 @@
"default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "iconClass",
+ "type": "string",
+ "required": false,
+ "default": "\"icon-[lucide--inbox]\""
+ },
+ {
+ "name": "primaryLabel",
"type": "string",
"required": false,
"default": "\"\""
},
{
- "name": "actionHref",
+ "name": "primaryHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "suggestions",
+ "type": "string",
+ "required": false,
+ "default": "[]"
}
],
"slots": [],
@@ -15404,10 +15581,16 @@
"default": "\"\""
},
{
- "name": "code",
+ "name": "type",
"type": "string",
"required": false,
- "default": "\"500\""
+ "default": "\"error\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
},
{
"name": "title",
@@ -15419,23 +15602,77 @@
"name": "description",
"type": "string",
"required": false,
- "default": "\"Please try again.\""
+ "default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "errorCode",
"type": "string",
"required": false,
- "default": "\"Try again\""
+ "default": "\"\""
},
{
- "name": "actionHref",
+ "name": "iconClass",
"type": "string",
"required": false,
- "default": "\"/\""
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "retryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "retryAction",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "details",
+ "type": "string",
+ "required": false,
+ "default": "[]"
}
],
"slots": [],
- "events": [],
+ "events": ["click"],
"source": "components/ErrorState.wrn"
},
{
@@ -24908,14 +25145,68 @@
"required": false,
"default": "\"\""
},
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
{
"name": "title",
"type": "string",
"required": false,
- "default": "\"Trusted by modern teams\""
+ "default": "\"Trusted by teams building modern products\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "logos",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "variant",
+ "type": "string",
+ "required": false,
+ "default": "\"strip\""
+ },
+ {
+ "name": "grayscale",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showNames",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "maxItems",
+ "type": "number",
+ "required": false,
+ "default": "8"
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/LogoCloud.wrn"
},
@@ -27706,6 +27997,12 @@
"category": "content",
"purpose": "Reusable newsletter form component.",
"props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
{
"name": "eyebrow",
"type": "string",
@@ -27716,7 +28013,7 @@
"name": "title",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"Stay up to date\""
},
{
"name": "description",
@@ -27725,38 +28022,98 @@
"default": "\"\""
},
{
- "name": "href",
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "\"Enter your email\""
+ },
+ {
+ "name": "buttonLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Subscribe\""
+ },
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "\"/newsletter/subscribe\""
+ },
+ {
+ "name": "method",
+ "type": "string",
+ "required": false,
+ "default": "\"post\""
+ },
+ {
+ "name": "emailName",
+ "type": "string",
+ "required": false,
+ "default": "\"email\""
+ },
+ {
+ "name": "privacyLabel",
"type": "string",
"required": false,
"default": "\"\""
},
{
- "name": "actionLabel",
+ "name": "privacyHref",
"type": "string",
"required": false,
- "default": "\"Learn more\""
+ "default": "\"/privacy\""
},
{
- "name": "image",
+ "name": "successMessage",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"You are subscribed.\""
},
{
- "name": "alt",
+ "name": "errorMessage",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"Something went wrong. Please try again.\""
},
{
- "name": "class",
+ "name": "iconClass",
"type": "string",
"required": false,
- "default": "\"\""
+ "default": "\"icon-[lucide--mail]\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showIcon",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showPrivacy",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "fullWidth",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
}
],
- "slots": ["default"],
- "events": [],
+ "slots": [],
+ "events": ["submit", "input"],
"source": "components/NewsletterForm.wrn"
},
{
@@ -28806,6 +29163,113 @@
"events": [],
"source": "components/PageAlert.wrn"
},
+ {
+ "name": "PageHeader",
+ "mount": "PageHeader",
+ "category": "core",
+ "purpose": "Reusable page header component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "eyebrow",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "primaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "secondaryHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "icon",
+ "type": "string",
+ "required": false,
+ "default": "\"sparkles\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showBreadcrumbs",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "breadcrumbParent",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "breadcrumbParentHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "breadcrumbCurrent",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "highlights",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/PageHeader.wrn"
+ },
{
"name": "PageHeading",
"mount": "PageHeading",
@@ -28912,7 +29376,7 @@
"default": "\"\""
},
{
- "name": "page",
+ "name": "currentPage",
"type": "number",
"required": false,
"default": "1"
@@ -28927,13 +29391,55 @@
"name": "previousHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
},
{
"name": "nextHref",
"type": "string",
"required": false,
- "default": "\"#\""
+ "default": "\"\""
+ },
+ {
+ "name": "pages",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ },
+ {
+ "name": "showNumbers",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showSummary",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "totalItems",
+ "type": "number",
+ "required": false,
+ "default": "0"
+ },
+ {
+ "name": "pageSize",
+ "type": "number",
+ "required": false,
+ "default": "10"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
}
],
"slots": [],
@@ -32399,6 +32905,23 @@
"events": [],
"source": "components/ProductLogo.wrn"
},
+ {
+ "name": "ProductMegaMenu",
+ "mount": "ProductMegaMenu",
+ "category": "core",
+ "purpose": "Reusable product mega menu component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": [],
+ "source": "components/ProductMegaMenu.wrn"
+ },
{
"name": "ProductMiniCard",
"mount": "ProductMiniCard",
@@ -33310,28 +33833,10 @@
"type": "string",
"required": false,
"default": "\"\""
- },
- {
- "name": "brand",
- "type": "string",
- "required": false,
- "default": "\"WRNexusJS\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"SSR-first, Bun-native full-stack framework.\""
- },
- {
- "name": "copyright",
- "type": "string",
- "required": false,
- "default": "\"© 2026 WorkRoot Workspace\""
}
],
- "slots": ["default"],
- "events": [],
+ "slots": [],
+ "events": ["submit"],
"source": "components/PublicFooter.wrn"
},
{
@@ -33345,39 +33850,9 @@
"type": "string",
"required": false,
"default": "\"\""
- },
- {
- "name": "brand",
- "type": "string",
- "required": false,
- "default": "\"WRNexusJS\""
- },
- {
- "name": "homeHref",
- "type": "string",
- "required": false,
- "default": "\"/\""
- },
- {
- "name": "signInHref",
- "type": "string",
- "required": false,
- "default": "\"/signin\""
- },
- {
- "name": "ctaHref",
- "type": "string",
- "required": false,
- "default": "\"/start\""
- },
- {
- "name": "ctaLabel",
- "type": "string",
- "required": false,
- "default": "\"Get started\""
}
],
- "slots": ["default", "mobile"],
+ "slots": [],
"events": ["click"],
"source": "components/PublicHeader.wrn"
},
@@ -33440,6 +33915,23 @@
"events": [],
"source": "components/PublicHeaderLogo.wrn"
},
+ {
+ "name": "PublicMobileNavigation",
+ "mount": "PublicMobileNavigation",
+ "category": "core",
+ "purpose": "Reusable public mobile navigation component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/PublicMobileNavigation.wrn"
+ },
{
"name": "PublicPageShell",
"mount": "PublicPageShell",
@@ -33481,6 +33973,107 @@
"events": [],
"source": "components/PublicPageShell.wrn"
},
+ {
+ "name": "PublicSearch",
+ "mount": "PublicSearch",
+ "category": "core",
+ "purpose": "Reusable public search component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "query",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "placeholder",
+ "type": "string",
+ "required": false,
+ "default": "\"Search...\""
+ },
+ {
+ "name": "label",
+ "type": "string",
+ "required": false,
+ "default": "\"Search\""
+ },
+ {
+ "name": "action",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "method",
+ "type": "string",
+ "required": false,
+ "default": "\"get\""
+ },
+ {
+ "name": "name",
+ "type": "string",
+ "required": false,
+ "default": "\"q\""
+ },
+ {
+ "name": "buttonLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "clearLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"Clear search\""
+ },
+ {
+ "name": "size",
+ "type": "string",
+ "required": false,
+ "default": "\"default\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "fullWidth",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showShortcut",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "shortcutLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"⌘ K\""
+ },
+ {
+ "name": "suggestions",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["input", "focus", "blur", "click"],
+ "source": "components/PublicSearch.wrn"
+ },
{
"name": "PublishDateTimePicker",
"mount": "PublishDateTimePicker",
@@ -35935,30 +36528,6 @@
"category": "overlays",
"purpose": "Reusable resources mega menu component.",
"props": [
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false"
- },
- {
- "name": "closeLabel",
- "type": "string",
- "required": false,
- "default": "\"Close\""
- },
{
"name": "class",
"type": "string",
@@ -35966,7 +36535,7 @@
"default": "\"\""
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/ResourcesMegaMenu.wrn"
},
@@ -40069,6 +40638,77 @@
"events": [],
"source": "components/SmsSegmentCounter.wrn"
},
+ {
+ "name": "SocialShare",
+ "mount": "SocialShare",
+ "category": "core",
+ "purpose": "Reusable social share component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"Share this page\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "url",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "shareText",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "centered",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "showTitle",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "showCopy",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "networks",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/SocialShare.wrn"
+ },
{
"name": "SolutionHero",
"mount": "SolutionHero",
@@ -40198,30 +40838,6 @@
"category": "overlays",
"purpose": "Reusable solutions mega menu component.",
"props": [
- {
- "name": "title",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "description",
- "type": "string",
- "required": false,
- "default": "\"\""
- },
- {
- "name": "open",
- "type": "boolean",
- "required": false,
- "default": "false"
- },
- {
- "name": "closeLabel",
- "type": "string",
- "required": false,
- "default": "\"Close\""
- },
{
"name": "class",
"type": "string",
@@ -40229,7 +40845,7 @@
"default": "\"\""
}
],
- "slots": ["default"],
+ "slots": [],
"events": [],
"source": "components/SolutionsMegaMenu.wrn"
},
@@ -40724,6 +41340,71 @@
"events": [],
"source": "components/StatusBadge.wrn"
},
+ {
+ "name": "StatusBanner",
+ "mount": "StatusBanner",
+ "category": "core",
+ "purpose": "Reusable status banner component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "type",
+ "type": "string",
+ "required": false,
+ "default": "\"info\""
+ },
+ {
+ "name": "title",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "description",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "actionLabel",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "actionHref",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ },
+ {
+ "name": "dismissible",
+ "type": "boolean",
+ "required": false,
+ "default": "true"
+ },
+ {
+ "name": "compact",
+ "type": "boolean",
+ "required": false,
+ "default": "false"
+ },
+ {
+ "name": "details",
+ "type": "string",
+ "required": false,
+ "default": "[]"
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/StatusBanner.wrn"
+ },
{
"name": "StatusPageShell",
"mount": "StatusPageShell",
@@ -43839,6 +44520,23 @@
"events": [],
"source": "components/ToastAction.wrn"
},
+ {
+ "name": "ToastHost",
+ "mount": "ToastHost",
+ "category": "core",
+ "purpose": "Reusable toast host component.",
+ "props": [
+ {
+ "name": "class",
+ "type": "string",
+ "required": false,
+ "default": "\"\""
+ }
+ ],
+ "slots": [],
+ "events": ["click"],
+ "source": "components/ToastHost.wrn"
+ },
{
"name": "ToastIcon",
"mount": "ToastIcon",
diff --git a/packages/ui/components/Breadcrumbs.wrn b/packages/ui/components/Breadcrumbs.wrn
index 00036632..2f186735 100644
--- a/packages/ui/components/Breadcrumbs.wrn
+++ b/packages/ui/components/Breadcrumbs.wrn
@@ -1,11 +1,105 @@
component Breadcrumbs {
- props {
- class = ""
- homeLabel = "Home"
- homeHref = "/"
- current = "Current page"
- }
- view {
- {homeLabel} / {current}
- }
+ props {
+ class: string = ""
+ items = []
+ centered = false
+ compact = false
+ showHome = true
+ homeLabel = "Home"
+ homeHref = "/"
+ }
+
+ view {
+
+
+
+
+
+
+
+
+ {homeLabel}
+
+
+
+ {homeLabel}
+
+
+
+
+
+
+
+
+
+
+ {#each items as item, index}
+
+
+
+ {item.label}
+
+
+
+
+ {item.label}
+
+
+
+
+ {item.label}
+
+
+
+
+
+
+
+ {/each}
+
+
+ }
}
diff --git a/packages/ui/components/ContactSalesBanner.wrn b/packages/ui/components/ContactSalesBanner.wrn
new file mode 100644
index 00000000..58a954d9
--- /dev/null
+++ b/packages/ui/components/ContactSalesBanner.wrn
@@ -0,0 +1,195 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+ {#each points.slice(0, 4) as point}
+
+
+
+
+
+ {point}
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
+ {#each trustPoints.slice(0, 4) as trustPoint}
+
+
+
+ {trustPoint.label}
+
+ {/each}
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/CookieConsent.wrn b/packages/ui/components/CookieConsent.wrn
new file mode 100644
index 00000000..58f63e21
--- /dev/null
+++ b/packages/ui/components/CookieConsent.wrn
@@ -0,0 +1,372 @@
+component CookieConsent {
+ props {
+ class: string = ""
+ }
+ state bannerOpen = false
+ state preferencesOpen = false
+
+ state analyticsCookies = false
+ state personalizationCookies = false
+ state marketingCookies = false
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Your privacy matters
+
+
+
+ Privacy first
+
+
+
+
+ We use essential cookies to operate WrNexus. With your
+ permission, we also use analytics and personalization cookies
+ to improve your experience.
+
+
+
+
+
+
+
+
+
+ Essential only
+
+
+
+
+
+ Preferences
+
+
+
+ Accept all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cookie preferences
+
+
+
+ Choose which optional cookies WrNexus may use.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Essential cookies
+
+
+
+ Always active
+
+
+
+
+ Required for authentication, security, sessions, preferences, and core website functionality.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Analytics cookies
+
+
+
+ Help us understand website usage, performance, and navigation patterns.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Personalization cookies
+
+
+
+ Remember your choices and provide a more relevant website experience.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Marketing cookies
+
+
+
+ Measure campaigns and show relevant WrNexus content across supported services.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/DevelopersMegaMenu.wrn b/packages/ui/components/DevelopersMegaMenu.wrn
new file mode 100644
index 00000000..529dddfc
--- /dev/null
+++ b/packages/ui/components/DevelopersMegaMenu.wrn
@@ -0,0 +1,421 @@
+component DevelopersMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+ Build secure identity into any application
+
+
+
+ Explore documentation, APIs, SDKs, examples, and tools built
+ for modern development teams.
+
+
+
+
+ Open documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Documentation
+
+
+
+
+
+
+ Guides for authentication, users, organizations, and
+ authorization.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ API reference
+
+
+
+
+
+
+ Complete endpoint, request, response, and error
+ documentation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SDKs
+
+
+
+
+
+
+ Official libraries for JavaScript, TypeScript, Go, Java,
+ Python, and more.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Examples
+
+
+
+
+
+
+ Ready-to-run projects for common frameworks and identity
+ flows.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Webhooks
+
+
+
+
+
+
+ Respond to user, session, organization, and security events.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Changelog
+
+
+
+
+
+
+ Review platform releases, improvements, and migration notes.
+
+
+
+
+
+
+ Open documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developer toolkit
+
+
+
+
+
+
+
+
+ APIs operational
+
+
+
+
+
+
+
+
+
+ Everything developers need
+
+
+
+ Build, test, and ship secure identity flows with APIs, SDKs,
+ examples, webhooks, and complete documentation.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/EmptyState.wrn b/packages/ui/components/EmptyState.wrn
index 1959bb46..c3c870e6 100644
--- a/packages/ui/components/EmptyState.wrn
+++ b/packages/ui/components/EmptyState.wrn
@@ -1,13 +1,167 @@
component EmptyState {
- props {
- class = ""
- icon = "◇"
- title = "Nothing here yet"
- description = ""
- actionLabel = ""
- actionHref = "#"
- }
- view {
- {icon}
{title} {description}
{actionLabel}
- }
+ props {
+ class: string = ""
+ eyebrow = ""
+ title = "Nothing found"
+ description = ""
+
+ iconClass = "icon-[lucide--inbox]"
+
+ primaryLabel = ""
+ primaryHref = ""
+
+ secondaryLabel = ""
+ secondaryHref = ""
+
+ compact = false
+ centered = true
+
+ suggestions = []
+ }
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/ErrorState.wrn b/packages/ui/components/ErrorState.wrn
index 65bf64ff..b3776e7d 100644
--- a/packages/ui/components/ErrorState.wrn
+++ b/packages/ui/components/ErrorState.wrn
@@ -1,13 +1,193 @@
component ErrorState {
- props {
- class = ""
- code = "500"
- title = "Something went wrong"
- description = "Please try again."
- actionLabel = "Try again"
- actionHref = "/"
- }
- view {
- {code}
{title} {description}
{actionLabel}
- }
+ 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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {errorCode}
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+ {#each details.slice(0, 4) as detail}
+
+
+
+
+
+ {detail.label}
+
+ {/each}
+
+
+
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/LogoCloud.wrn b/packages/ui/components/LogoCloud.wrn
index 41d26bbc..bc207fd5 100644
--- a/packages/ui/components/LogoCloud.wrn
+++ b/packages/ui/components/LogoCloud.wrn
@@ -1,9 +1,150 @@
component LogoCloud {
- props {
- class = ""
- title = "Trusted by modern teams"
- }
- view {
-
- }
+ 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 {
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+ And {logos.length - maxItems} more teams using WrNexus.
+
+
+
+
+ }
}
diff --git a/packages/ui/components/NewsletterForm.wrn b/packages/ui/components/NewsletterForm.wrn
index 1ed569a9..c7790ea7 100644
--- a/packages/ui/components/NewsletterForm.wrn
+++ b/packages/ui/components/NewsletterForm.wrn
@@ -1,13 +1,214 @@
component NewsletterForm {
- props {
- eyebrow = ""
- title = ""
- description = ""
- href = ""
- actionLabel = "Learn more"
- image = ""
- alt = ""
- class = ""
- }
- view { {eyebrow} {title} {description}
{actionLabel} }
+ 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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+ {title}
+
+
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/PageHeader.wrn b/packages/ui/components/PageHeader.wrn
new file mode 100644
index 00000000..6fd1a09d
--- /dev/null
+++ b/packages/ui/components/PageHeader.wrn
@@ -0,0 +1,172 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {eyebrow}
+
+
+
+
+
+ {title}
+
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+
+ {#each highlights as highlight}
+
= 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"
+ >
+
+
+
+
+
+
+
+ {highlight.title}
+
+
+
+ {highlight.description}
+
+
+
+
+ {/each}
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/Pagination.wrn b/packages/ui/components/Pagination.wrn
index 712d1d3c..05d24965 100644
--- a/packages/ui/components/Pagination.wrn
+++ b/packages/ui/components/Pagination.wrn
@@ -1,12 +1,187 @@
component Pagination {
- props {
- class = ""
- page = 1
- totalPages = 1
- previousHref = "#"
- nextHref = "#"
- }
- view {
- ← Previous Page {page} of {totalPages} Next →
- }
+ props {
+ class: string = ""
+ currentPage = 1
+ totalPages = 1
+
+ previousHref = ""
+ nextHref = ""
+
+ pages = []
+
+ showNumbers = true
+ showSummary = true
+
+ totalItems = 0
+ pageSize = 10
+
+ compact = false
+ centered = false
+ }
+
+ view {
+
+
+
+ Showing
+
+
+ {(currentPage - 1) * pageSize + 1}
+
+
+ to
+
+
+ {currentPage * pageSize > totalItems ? totalItems : currentPage * pageSize}
+
+
+ of
+
+
+ {totalItems}
+
+
+ results
+
+
+
+
+ }
}
diff --git a/packages/ui/components/ProductMegaMenu.wrn b/packages/ui/components/ProductMegaMenu.wrn
new file mode 100644
index 00000000..09a9d48a
--- /dev/null
+++ b/packages/ui/components/ProductMegaMenu.wrn
@@ -0,0 +1,332 @@
+component ProductMegaMenu {
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Platform
+
+
+
+
+
+
+ Unified identity infrastructure for every application.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authentication
+
+
+
+
+
+
+ Passwords, passkeys, social login, MFA, and SSO.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ User management
+
+
+
+
+
+
+ Profiles, sessions, invitations, and user lifecycle.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Organizations
+
+
+
+
+
+
+ Multi-tenant workspaces, teams, domains, and membership.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authorization
+
+
+
+
+
+
+ Roles, permissions, policies, and protected resources.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Security
+
+
+
+
+
+
+ Session controls, recovery, audit logs, and threat protection.
+
+
+
+
+
+
+ View all product features
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Featured
+
+
+
+
+
+
+
+ Identity built for modern SaaS
+
+
+
+ Add secure authentication, organizations, permissions, and user
+ management without rebuilding identity infrastructure.
+
+
+
+
+
+
+
+
+ Passkeys and multifactor authentication
+
+
+
+
+
+
+
+ Organizations and workspace isolation
+
+
+
+
+
+
+
+ APIs and SDKs for every stack
+
+
+
+
+ Explore SaaS identity
+
+
+
+
+
+
+
+ Developer-first and API-ready
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/PublicFooter.wrn b/packages/ui/components/PublicFooter.wrn
index daea9e2d..7d5b7fee 100644
--- a/packages/ui/components/PublicFooter.wrn
+++ b/packages/ui/components/PublicFooter.wrn
@@ -1,11 +1,608 @@
component PublicFooter {
- props {
- class = ""
- brand = "WRNexusJS"
- description = "SSR-first, Bun-native full-stack framework."
- copyright = "© 2026 WorkRoot Workspace"
- }
- view {
-
- }
+ props {
+ class: string = ""
+ }
+ state email = ""
+ state newsletterSubmitted = false
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WrNexus updates
+
+
+
+
+
+ Get product updates, security guidance, implementation
+ strategies, and practical identity architecture resources.
+
+
+
+
+
+
+
+
+
+ No spam. Unsubscribe at any time. Read our
+
+ privacy policy
+ .
+
+
+
+
+
+ Thanks. Please check your inbox to confirm your subscription.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Product
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ © 2026 WrNexus. All rights reserved.
+
+
+
+
+
+ Built by WorkRoot Workspace.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Theme
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/PublicHeader.wrn b/packages/ui/components/PublicHeader.wrn
index db9c0ac6..4168c9a4 100644
--- a/packages/ui/components/PublicHeader.wrn
+++ b/packages/ui/components/PublicHeader.wrn
@@ -1,14 +1,284 @@
component PublicHeader {
- props {
- class = ""
- brand = "WRNexusJS"
- homeHref = "/"
- signInHref = "/signin"
- ctaHref = "/start"
- ctaLabel = "Get started"
- }
- state mobileOpen = false
- view {
-
- }
+ props {
+ class: string = ""
+ }
+ state activeMenu = ""
+ state mobileMenuOpen = false
+ state headerScrolled = false
+
+ view {
+
+ }
}
diff --git a/packages/ui/components/PublicMobileNavigation.wrn b/packages/ui/components/PublicMobileNavigation.wrn
new file mode 100644
index 00000000..b8640479
--- /dev/null
+++ b/packages/ui/components/PublicMobileNavigation.wrn
@@ -0,0 +1,589 @@
+component PublicMobileNavigation {
+ props {
+ class: string = ""
+ }
+ state openSection = ""
+
+ view {
+
+ }
+}
diff --git a/packages/ui/components/PublicSearch.wrn b/packages/ui/components/PublicSearch.wrn
new file mode 100644
index 00000000..612c374d
--- /dev/null
+++ b/packages/ui/components/PublicSearch.wrn
@@ -0,0 +1,125 @@
+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 {
+
+ }
+}
diff --git a/packages/ui/components/ResourcesMegaMenu.wrn b/packages/ui/components/ResourcesMegaMenu.wrn
index 67694937..e5b32038 100644
--- a/packages/ui/components/ResourcesMegaMenu.wrn
+++ b/packages/ui/components/ResourcesMegaMenu.wrn
@@ -1,10 +1,365 @@
component ResourcesMegaMenu {
- props {
- title = ""
- description = ""
- open = false
- closeLabel = "Close"
- class = ""
- }
- view { }
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Resources
+
+
+
+ Learn, build, and get support
+
+
+
+ Explore practical guides, customer stories, product updates,
+ and security resources.
+
+
+
+
+ View all resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Blog
+
+
+
+
+
+
+ Product updates, engineering insights, identity trends, and
+ company news.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Customer stories
+
+
+
+
+
+
+ See how teams use WrNexus to secure and scale their
+ applications.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Guides
+
+
+
+
+
+
+ Practical identity, security, SaaS, and architecture
+ walkthroughs.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Help center
+
+
+
+
+
+
+ Find answers for account, workspace, billing, and security
+ questions.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Security
+
+
+
+
+
+
+ Learn how WrNexus protects accounts, sessions, and
+ organizations.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Trust center
+
+
+
+
+
+
+ Review compliance, privacy, infrastructure, and operational
+ controls.
+
+
+
+
+
+
+ View all resources
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Featured guide
+
+
+
+
+
+
+
+ The modern SaaS identity checklist
+
+
+
+ A practical checklist covering authentication, organizations,
+ permissions, MFA, recovery, sessions, and enterprise SSO.
+
+
+
+
+
+
+
+
+
+ Secure authentication foundations
+
+
+
+
+
+
+
+
+
+ Multi-tenant organization design
+
+
+
+
+
+
+
+
+
+ Recovery and account protection
+
+
+
+
+
+ Read the guide
+
+
+
+
+
+
+
+
+ 12 min read
+
+
+
+
+
+ PDF available
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/SocialShare.wrn b/packages/ui/components/SocialShare.wrn
new file mode 100644
index 00000000..b0420ef5
--- /dev/null
+++ b/packages/ui/components/SocialShare.wrn
@@ -0,0 +1,143 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+ {#each networks.slice(0, 5) as network}
+
+
+
+
+ {network.label}
+
+
+ {/each}
+
+
+
+
+
+
+
+
+ {copied ? 'Copied' : 'Copy link'}
+
+
+
+
+
+
+
+ Page link copied to your clipboard.
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/SolutionsMegaMenu.wrn b/packages/ui/components/SolutionsMegaMenu.wrn
index a6f22457..48a1c6f3 100644
--- a/packages/ui/components/SolutionsMegaMenu.wrn
+++ b/packages/ui/components/SolutionsMegaMenu.wrn
@@ -1,10 +1,368 @@
component SolutionsMegaMenu {
- props {
- title = ""
- description = ""
- open = false
- closeLabel = "Close"
- class = ""
- }
- view { }
+ props {
+ class: string = ""
+ }
+ view {
+
+
+
+
+
+
+
+
+
+ Solutions
+
+
+
+ Identity infrastructure for every stage of growth
+
+
+
+ Choose a solution designed around your product, team, and customers.
+
+
+
+
+ View all solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Startups
+
+
+
+
+
+
+ Launch secure authentication quickly without slowing product development.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SaaS platforms
+
+
+
+
+
+
+ Add users, organizations, roles, SSO, and secure account recovery.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Enterprise
+
+
+
+
+
+
+ Support complex organizations, governance, auditability, and scale.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Developers
+
+
+
+
+
+
+ APIs, SDKs, webhooks, templates, and developer-friendly workflows.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Agencies
+
+
+
+
+
+
+ Manage identities across customer projects and branded experiences.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ B2B products
+
+
+
+
+
+
+ Secure customer organizations, team access, and enterprise connections.
+
+
+
+
+
+
+ View all solutions
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Recommended for SaaS
+
+
+
+
+
+
+
+ Launch enterprise-ready identity
+
+
+
+ Start with simple authentication and add organizations,
+ permissions, enterprise SSO, and governance as your product grows.
+
+
+
+
+
+
+
+
+
+
+ Faster launch
+
+
+
+ Start with secure defaults
+
+
+
+
+
+
+
+
+
+
+
+ Built to scale
+
+
+
+ Add advanced controls later
+
+
+
+
+
+
+
+
+
+
+
+ Secure by design
+
+
+
+ Protect every account flow
+
+
+
+
+
+
+ Explore the SaaS solution
+
+
+
+
+
+
+
+
+
+
+
+ }
}
diff --git a/packages/ui/components/StatusBanner.wrn b/packages/ui/components/StatusBanner.wrn
new file mode 100644
index 00000000..83c8f0f7
--- /dev/null
+++ b/packages/ui/components/StatusBanner.wrn
@@ -0,0 +1,122 @@
+component StatusBanner {
+ props {
+ class: string = ""
+ type = "info"
+
+ title = ""
+ description = ""
+
+ actionLabel = ""
+ actionHref = ""
+
+ dismissible = true
+ compact = false
+
+ details = []
+ }
+
+ state visible = true
+
+ view {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+ {description}
+
+
+
+
+
+
+
+
+
+ {#each details.slice(0, 4) as detail}
+
+
+
+ {detail.label}
+
+ {/each}
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/components/ToastHost.wrn b/packages/ui/components/ToastHost.wrn
new file mode 100644
index 00000000..36a516b5
--- /dev/null
+++ b/packages/ui/components/ToastHost.wrn
@@ -0,0 +1,212 @@
+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 {
+
+
+
+
+
+
+
+
+
+
+
+
+ {successTitle}
+
+
+
+ {successMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {errorTitle}
+
+
+
+ {errorMessage}
+
+
+
+ Try again
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {warningTitle}
+
+
+
+ {warningMessage}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 535de76c..8af0addc 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/ui",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/ui/test/ui.test.ts b/packages/ui/test/ui.test.ts
index 4e247de7..0fada5d0 100644
--- a/packages/ui/test/ui.test.ts
+++ b/packages/ui/test/ui.test.ts
@@ -79,6 +79,9 @@ test("component-system CSS includes responsive, theme-token, focus, and reduced-
expect(css).toContain("--color-violet-600: var(--wire-color-primary)");
expect(css).toContain("--color-blue-600: var(--wire-color-info)");
expect(css).toContain("--color-red-600: var(--wire-color-danger)");
+ expect(css).toMatch(/:root\s*\{[^}]*--color-violet-600: var\(--wire-color-primary\)/s);
+ expect(css).toContain(".wire-bg-primary");
+ expect(css).toContain(".wire-text-muted");
});
test("page shells leave background ownership to the page", () => {
diff --git a/packages/ui/ui.css b/packages/ui/ui.css
index 78437c37..44455d5d 100644
--- a/packages/ui/ui.css
+++ b/packages/ui/ui.css
@@ -1050,9 +1050,10 @@
--wire-ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
}
-/* Tailwind v4 color bridge. Existing utility-authored components inherit the
- * configured semantic palette without requiring generated per-palette markup. */
-[data-component] {
+/* Tailwind v4 color bridge. Define the aliases at the document root so both
+ * packaged components and application-authored pages/components inherit the
+ * palette selected in wrnexus.config.ts. */
+:root {
--color-violet-50: color-mix(in srgb, var(--wire-color-primary) 7%, white);
--color-violet-100: color-mix(in srgb, var(--wire-color-primary) 14%, white);
--color-violet-200: color-mix(in srgb, var(--wire-color-primary) 25%, white);
@@ -1096,6 +1097,47 @@
--color-rose-700: color-mix(in srgb, var(--wire-color-danger) 80%, black);
}
+/* Stable semantic helpers for application-authored markup. These deliberately
+ * avoid spacing so applications remain in control of their own layout. */
+.wire-bg-page {
+ background-color: var(--wire-color-bg);
+}
+.wire-bg-surface {
+ background-color: var(--wire-color-surface);
+}
+.wire-bg-surface-2 {
+ background-color: var(--wire-color-surface-2);
+}
+.wire-bg-primary {
+ background-color: var(--wire-color-primary);
+ color: var(--wire-color-primary-contrast);
+}
+.wire-bg-secondary {
+ background-color: var(--wire-color-secondary);
+ color: var(--wire-color-secondary-contrast);
+}
+.wire-text {
+ color: var(--wire-color-text);
+}
+.wire-text-muted {
+ color: var(--wire-color-muted);
+}
+.wire-text-primary {
+ color: var(--wire-color-primary);
+}
+.wire-text-success {
+ color: var(--wire-color-success);
+}
+.wire-text-warning {
+ color: var(--wire-color-warning);
+}
+.wire-text-danger {
+ color: var(--wire-color-danger);
+}
+.wire-border {
+ border-color: var(--wire-color-border);
+}
+
[data-component] {
animation: wire-component-enter var(--wire-motion-slow) var(--wire-ease-emphasized) both;
}
diff --git a/packages/uploader/package.json b/packages/uploader/package.json
index 764f18f6..c5a11412 100644
--- a/packages/uploader/package.json
+++ b/packages/uploader/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/uploader",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",
diff --git a/packages/validation/package.json b/packages/validation/package.json
index 1fb8bcad..0d312a27 100644
--- a/packages/validation/package.json
+++ b/packages/validation/package.json
@@ -1,6 +1,6 @@
{
"name": "@wrnexus/validation",
- "version": "0.2.61",
+ "version": "0.2.62",
"private": true,
"type": "module",
"main": "src/index.ts",