PublicMobileNavigation
Reusable public mobile navigation component.
Usage
Components are auto-discovered. Use the component directly in any .wrn view:
<PublicMobileNavigation />Legacy mount name: data-component="PublicMobileNavigation".
Props and attributes
| Prop | Type | Requirement | Default |
|---|---|---|---|
class | string | Optional | "" |
Slots
This component does not declare a slot.
Events
click
Source contract
Installed source: components/PublicMobileNavigation.wrn
component PublicMobileNavigation {
props {
class: string = ""
}
state openSection = ""
view {
<div
class="border-t border-slate-200 bg-white shadow-xl dark:border-white/10 dark:bg-slate-950 lg:hidden {class}"
>
<div class="mx-auto max-h-[calc(100dvh-4.5rem)] max-w-7xl overflow-y-auto px-5 py-5 sm:px-8">
<!-- Mobile status -->
<a
href="/status"
class="mb-5 flex items-center justify-between rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-3 transition hover:border-emerald-300 hover:bg-emerald-100 dark:border-emerald-500/20 dark:bg-emerald-500/10 dark:hover:border-emerald-500/30 dark:hover:bg-emerald-500/15"
>
<span class="flex items-center gap-3">
<span class="relative flex h-2.5 w-2.5 shrink-0">
<span class="absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60">
</span>
<span class="relative inline-flex h-2.5 w-2.5 rounded-full bg-emerald-500">
</span>
</span>
<span>
<span class="block text-sm font-semibold text-emerald-900 dark:text-emerald-100">
All systems operational
</span>
<span class="mt-0.5 block text-xs text-emerald-700 dark:text-emerald-300">
View service status
</span>
</span>
</span>
<span class="icon-[lucide--arrow-up-right] h-4 w-4 shrink-0 text-emerald-700 dark:text-emerald-300" aria-hidden="true" >
</span>
</a>
<nav
aria-label="Mobile navigation"
class="space-y-2"
>
<!-- Product -->
<div
class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
>
<button
type="button"
@click="openSection = openSection === 'product' ? '' : 'product'"
aria-expanded="{openSection === 'product'}"
aria-controls="mobile-product-menu"
class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
class:bg-indigo-50="openSection === 'product'"
class:dark:bg-indigo-500/10="openSection === 'product'"
>
<span class="flex items-center gap-3">
<span
class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
class:bg-indigo-100="openSection === 'product'"
class:text-indigo-700="openSection === 'product'"
class:bg-slate-100="openSection !== 'product'"
class:text-slate-600="openSection !== 'product'"
class:dark:bg-indigo-500/15="openSection === 'product'"
class:dark:text-indigo-300="openSection === 'product'"
class:dark:bg-white/5="openSection !== 'product'"
class:dark:text-slate-300="openSection !== 'product'"
>
<span class="icon-[lucide--boxes] h-5 w-5" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold"
class:text-indigo-950="openSection === 'product'"
class:text-slate-950="openSection !== 'product'"
class:dark:text-indigo-100="openSection === 'product'"
class:dark:text-white="openSection !== 'product'"
>
Product
</span>
<span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
Explore the WRNexusJS platform
</span>
</span>
</span>
<span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'product'" aria-hidden="true" >
</span>
</button>
<div
id="mobile-product-menu"
data-show="openSection === 'product'"
class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
>
<div class="grid gap-1">
<a
href="/platform"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-indigo-50 text-indigo-700 dark:bg-indigo-500/10 dark:text-indigo-300"
>
<span class="icon-[lucide--layers-3] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
Platform
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Complete identity infrastructure
</span>
</span>
</a>
<a
href="/authentication"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-violet-50 text-violet-700 dark:bg-violet-500/10 dark:text-violet-300"
>
<span class="icon-[lucide--fingerprint] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
Authentication
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Passwords, passkeys, social login, and SSO
</span>
</span>
</a>
<a
href="/user-management"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-cyan-50 text-cyan-700 dark:bg-cyan-500/10 dark:text-cyan-300"
>
<span class="icon-[lucide--users-round] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
User management
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Profiles, sessions, invitations, and lifecycle
</span>
</span>
</a>
<a
href="/organizations"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-emerald-50 text-emerald-700 dark:bg-emerald-500/10 dark:text-emerald-300"
>
<span class="icon-[lucide--building-2] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
Organizations
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Multi-tenant workspaces and teams
</span>
</span>
</a>
<a
href="/security"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-amber-50 text-amber-700 dark:bg-amber-500/10 dark:text-amber-300"
>
<span class="icon-[lucide--shield-check] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
Security
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Protect identities and sensitive actions
</span>
</span>
</a>
<a
href="/integrations"
class="group flex items-start gap-3 rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span
class="grid h-9 w-9 shrink-0 place-items-center rounded-lg bg-rose-50 text-rose-700 dark:bg-rose-500/10 dark:text-rose-300"
>
<span class="icon-[lucide--plug] h-4 w-4" aria-hidden="true" >
</span>
</span>
<span>
<span
class="block text-sm font-semibold text-slate-900 group-hover:text-indigo-700 dark:text-white dark:group-hover:text-indigo-300"
>
Integrations
</span>
<span class="mt-0.5 block text-xs leading-5 text-slate-500 dark:text-slate-400">
Connect your stack and applications
</span>
</span>
</a>
</div>
<a
href="/product"
class="mt-2 flex items-center justify-center gap-2 rounded-xl bg-indigo-50 px-4 py-3 text-sm font-semibold text-indigo-700 transition hover:bg-indigo-100 dark:bg-indigo-500/10 dark:text-indigo-300 dark:hover:bg-indigo-500/15"
>
View all product features
<span class="icon-[lucide--arrow-right] h-4 w-4" aria-hidden="true" >
</span>
</a>
</div>
</div>
<!-- Solutions -->
<div
class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
>
<button
type="button"
@click="openSection = openSection === 'solutions' ? '' : 'solutions'"
aria-expanded="{openSection === 'solutions'}"
aria-controls="mobile-solutions-menu"
class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
class:bg-indigo-50="openSection === 'solutions'"
class:dark:bg-indigo-500/10="openSection === 'solutions'"
>
<span class="flex items-center gap-3">
<span
class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
class:bg-indigo-100="openSection === 'solutions'"
class:text-indigo-700="openSection === 'solutions'"
class:bg-slate-100="openSection !== 'solutions'"
class:text-slate-600="openSection !== 'solutions'"
class:dark:bg-indigo-500/15="openSection === 'solutions'"
class:dark:text-indigo-300="openSection === 'solutions'"
class:dark:bg-white/5="openSection !== 'solutions'"
class:dark:text-slate-300="openSection !== 'solutions'"
>
<span class="icon-[lucide--lightbulb] h-5 w-5" aria-hidden="true" >
</span>
</span>
<span>
<span class="block text-sm font-semibold text-slate-950 dark:text-white">
Solutions
</span>
<span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
Built for your business
</span>
</span>
</span>
<span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'solutions'" aria-hidden="true" >
</span>
</button>
<div
id="mobile-solutions-menu"
data-show="openSection === 'solutions'"
class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
>
<div class="grid grid-cols-2 gap-2">
<a
href="/solutions/startups"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--rocket] h-5 w-5 text-indigo-600 dark:text-indigo-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
Startups
</span>
</a>
<a
href="/solutions/saas"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--cloud] h-5 w-5 text-cyan-600 dark:text-cyan-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
SaaS
</span>
</a>
<a
href="/solutions/enterprise"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--building] h-5 w-5 text-violet-600 dark:text-violet-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
Enterprise
</span>
</a>
<a
href="/solutions/developers"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--code-2] h-5 w-5 text-emerald-600 dark:text-emerald-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
Developers
</span>
</a>
<a
href="/solutions/agencies"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--briefcase-business] h-5 w-5 text-amber-600 dark:text-amber-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
Agencies
</span>
</a>
<a
href="/solutions/b2b"
class="rounded-xl px-3 py-3 transition hover:bg-slate-100 dark:hover:bg-white/5"
>
<span class="icon-[lucide--handshake] h-5 w-5 text-rose-600 dark:text-rose-400">
</span>
<span class="mt-2 block text-sm font-semibold text-slate-900 dark:text-white">
B2B
</span>
</a>
</div>
</div>
</div>
<!-- Developers -->
<div
class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
>
<button
type="button"
@click="openSection = openSection === 'developers' ? '' : 'developers'"
aria-expanded="{openSection === 'developers'}"
aria-controls="mobile-developers-menu"
class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
class:bg-indigo-50="openSection === 'developers'"
class:dark:bg-indigo-500/10="openSection === 'developers'"
>
<span class="flex items-center gap-3">
<span
class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
class:bg-indigo-100="openSection === 'developers'"
class:text-indigo-700="openSection === 'developers'"
class:bg-slate-100="openSection !== 'developers'"
class:text-slate-600="openSection !== 'developers'"
class:dark:bg-indigo-500/15="openSection === 'developers'"
class:dark:text-indigo-300="openSection === 'developers'"
class:dark:bg-white/5="openSection !== 'developers'"
class:dark:text-slate-300="openSection !== 'developers'"
>
<span class="icon-[lucide--terminal-square] h-5 w-5" aria-hidden="true" >
</span>
</span>
<span>
<span class="block text-sm font-semibold text-slate-950 dark:text-white">
Developers
</span>
<span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
Build with WRNexusJS
</span>
</span>
</span>
<span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'developers'" aria-hidden="true" >
</span>
</button>
<div
id="mobile-developers-menu"
data-show="openSection === 'developers'"
class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
>
<div class="grid gap-1">
<a
href="/docs"
class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--book-open] h-5 w-5 text-indigo-600 dark:text-indigo-400">
</span>
Documentation
</a>
<a
href="/docs/api"
class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--braces] h-5 w-5 text-violet-600 dark:text-violet-400">
</span>
API reference
</a>
<a
href="/sdks"
class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--package] h-5 w-5 text-cyan-600 dark:text-cyan-400">
</span>
SDKs
</a>
<a
href="/examples"
class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--flask-conical] h-5 w-5 text-emerald-600 dark:text-emerald-400">
</span>
Examples
</a>
<a
href="/changelog"
class="flex items-center gap-3 rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 hover:text-indigo-700 dark:text-slate-200 dark:hover:bg-white/5 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--history] h-5 w-5 text-amber-600 dark:text-amber-400">
</span>
Changelog
</a>
</div>
</div>
</div>
<!-- Resources -->
<div
class="overflow-hidden rounded-2xl border border-slate-200 bg-white dark:border-white/10 dark:bg-white/5"
>
<button
type="button"
@click="openSection = openSection === 'resources' ? '' : 'resources'"
aria-expanded="{openSection === 'resources'}"
aria-controls="mobile-resources-menu"
class="flex w-full items-center justify-between gap-4 px-4 py-4 text-left transition hover:bg-slate-50 dark:hover:bg-white/5"
class:bg-indigo-50="openSection === 'resources'"
class:dark:bg-indigo-500/10="openSection === 'resources'"
>
<span class="flex items-center gap-3">
<span
class="grid h-10 w-10 shrink-0 place-items-center rounded-xl transition"
class:bg-indigo-100="openSection === 'resources'"
class:text-indigo-700="openSection === 'resources'"
class:bg-slate-100="openSection !== 'resources'"
class:text-slate-600="openSection !== 'resources'"
class:dark:bg-indigo-500/15="openSection === 'resources'"
class:dark:text-indigo-300="openSection === 'resources'"
class:dark:bg-white/5="openSection !== 'resources'"
class:dark:text-slate-300="openSection !== 'resources'"
>
<span class="icon-[lucide--library] h-5 w-5" aria-hidden="true" >
</span>
</span>
<span>
<span class="block text-sm font-semibold text-slate-950 dark:text-white">
Resources
</span>
<span class="mt-0.5 block text-xs text-slate-500 dark:text-slate-400">
Learn and get support
</span>
</span>
</span>
<span class="icon-[lucide--chevron-down] h-5 w-5 shrink-0 text-slate-400 transition-transform duration-200" class:rotate-180="openSection === 'resources'" aria-hidden="true" >
</span>
</button>
<div
id="mobile-resources-menu"
data-show="openSection === 'resources'"
class="border-t border-slate-200 px-3 py-3 dark:border-white/10"
>
<div class="grid grid-cols-2 gap-2">
<a
href="/blog"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Blog
</a>
<a
href="/customers"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Customer stories
</a>
<a
href="/guides"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Guides
</a>
<a
href="/help"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Help center
</a>
<a
href="/security"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Security
</a>
<a
href="/trust"
class="rounded-xl px-3 py-3 text-sm font-semibold text-slate-800 transition hover:bg-slate-100 dark:text-slate-200 dark:hover:bg-white/5"
>
Trust center
</a>
</div>
</div>
</div>
<!-- Direct links -->
<a
href="/pricing"
class="flex items-center justify-between rounded-2xl border border-slate-200 bg-white px-4 py-4 text-sm font-semibold text-slate-950 transition hover:border-indigo-300 hover:bg-indigo-50 dark:border-white/10 dark:bg-white/5 dark:text-white dark:hover:border-indigo-500 dark:hover:bg-indigo-500/10"
>
<span class="flex items-center gap-3">
<span
class="grid h-10 w-10 place-items-center rounded-xl bg-slate-100 text-slate-600 dark:bg-white/5 dark:text-slate-300"
>
<span class="icon-[lucide--badge-dollar-sign] h-5 w-5" aria-hidden="true" >
</span>
</span>
Pricing
</span>
<span class="icon-[lucide--chevron-right] h-5 w-5 text-slate-400" aria-hidden="true" >
</span>
</a>
</nav>
<!-- Mobile CTAs -->
<div class="mt-5 grid gap-3 border-t border-slate-200 pt-5 dark:border-white/10 sm:grid-cols-2">
<a
href="/sign-in"
class="flex h-12 items-center justify-center gap-2 rounded-xl border border-slate-200 bg-white px-5 text-sm font-semibold text-slate-700 shadow-sm transition hover:border-indigo-300 hover:bg-slate-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500 dark:border-white/10 dark:bg-white/5 dark:text-slate-200 dark:hover:border-indigo-500 dark:hover:bg-white/10 dark:hover:text-indigo-300"
>
<span class="icon-[lucide--log-in] h-4 w-4" aria-hidden="true" >
</span>
Sign in
</a>
<a
href="/sign-up"
class="group flex h-12 items-center justify-center gap-2 rounded-xl bg-indigo-600 px-5 text-sm font-bold text-white shadow-lg shadow-indigo-600/20 transition hover:-translate-y-0.5 hover:bg-indigo-500 hover:shadow-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
>
Start free
<span class="icon-[lucide--arrow-right] h-4 w-4 transition-transform group-hover:translate-x-1" aria-hidden="true" >
</span>
</a>
</div>
<p class="mt-5 text-center text-xs leading-5 text-slate-400 dark:text-slate-500">
Secure identity infrastructure for modern applications.
</p>
</div>
</div>
}
}