// Generated by scripts/generate-showcase.mjs. Do not edit directly.
page FooterDetail {
layout = "showcase"
state playground_size = ctx.url.searchParams.get("pg_size") ?? "default"
state playground_color = ctx.url.searchParams.get("pg_color") ?? "primary"
state playground_label = ctx.url.searchParams.get("pg_label") ?? "Footer"
state playground_items = JSON.parse(ctx.url.searchParams.get("pg_items") ?? "[{\"type\":\"header\",\"label\":\"Product\",\"description\":\"Build consistent interfaces with WRNexusJS.\",\"items\":[{\"label\":\"Components\",\"href\":\"/base\"},{\"label\":\"Themes\",\"href\":\"/themes\"},{\"label\":\"Examples\",\"href\":\"/blocks\"}]},{\"type\":\"header\",\"label\":\"Developers\",\"items\":[{\"label\":\"Documentation\",\"href\":\"/docs\"},{\"label\":\"Installation\",\"href\":\"/installation\"},{\"label\":\"Framework guides\",\"href\":\"/framework-guides\"}]},{\"type\":\"header\",\"label\":\"Resources\",\"items\":[{\"label\":\"Accessibility\",\"href\":\"/accessibility\"},{\"label\":\"Design tokens\",\"href\":\"/colors\"},{\"label\":\"Typography\",\"href\":\"/fonts\"}]},{\"type\":\"header\",\"label\":\"Company\",\"items\":[{\"label\":\"WorkRoot\",\"href\":\"https://workroot.in\",\"external\":true},{\"label\":\"WRNexusJS\",\"href\":\"https://wrnexusjs.dev\",\"external\":true}]}]")
state playground_columns = Number(ctx.url.searchParams.get("pg_columns") ?? "4")
state playground_maxWidth = ctx.url.searchParams.get("pg_maxWidth") ?? "wide"
state playground_copyright = ctx.url.searchParams.get("pg_copyright") ?? ""
state playground_class = ctx.url.searchParams.get("pg_class") ?? "showcase-instance showcase-instance--1"
seo {
title = "Footer"
description = "Render structured responsive footer navigation, pre and post content, copyright content, links, and public events."
}
view {
Components / Layout / Footer
Interactive playground Configure Footer Change any prop and inspect the server-rendered component immediately.
Live preview
<Footer
label="Footer"
items='[
{
"id": "footer-0-1",
"key": "footer-0-1",
"value": "primary",
"label": "Primary workflow",
"title": "Primary workflow",
"description": "A clean default configuration for everyday product interfaces.",
"text": "A configurable sample message.",
"href": "#footer-demo",
"actionHref": "#footer-demo",
"actionLabel": "View details",
"icon": "icon-[lucide--sparkles]",
"iconClass": "icon-[lucide--sparkles]",
"variant": "primary",
"status": "Active",
"time": "09:30",
"current": true,
"selected": true,
"checked": true,
"disabled": false,
"outgoing": false,
"open": true,
"number": 1,
"count": 16,
"percentage": 72,
"color": "#7c3aed",
"target": "_self",
"ariaLabel": "Open primary workflow 1",
"items": [
{
"label": "Nested option A",
"value": "nested-a"
},
{
"label": "Nested option B",
"value": "nested-b"
}
],
"links": [
{
"label": "Documentation",
"href": "#documentation"
},
{
"label": "API reference",
"href": "#api-reference"
}
],
"values": [
"Included",
"Standard"
]
},
{
"id": "footer-0-2",
"key": "footer-0-2",
"value": "secondary",
"label": "Additional option",
"title": "Supporting example",
"description": "A clean default configuration for everyday product interfaces.",
"text": "Another configurable message.",
"href": "#footer-demo",
"actionHref": "#footer-demo",
"actionLabel": "View details",
"icon": "icon-[lucide--sparkles]",
"iconClass": "icon-[lucide--sparkles]",
"variant": "primary",
"status": "Active",
"time": "09:30",
"current": false,
"selected": false,
"checked": false,
"disabled": false,
"outgoing": true,
"open": true,
"number": 2,
"count": 32,
"percentage": 72,
"color": "#7c3aed",
"target": "_self",
"ariaLabel": "Open primary workflow 2",
"items": [
{
"label": "Nested option A",
"value": "nested-a"
},
{
"label": "Nested option B",
"value": "nested-b"
}
],
"links": [
{
"label": "Documentation",
"href": "#documentation"
},
{
"label": "API reference",
"href": "#api-reference"
}
],
"values": [
"Included",
"Standard"
]
}
]'>
<div data-slot="pre-footer">
<div class="showcase-slot">pre-footer slot</div>
</div>
<div data-slot="post-footer">
<div class="showcase-slot">post-footer slot</div>
</div>
<div data-slot="copyright-left">
<div class="showcase-slot">copyright-left slot</div>
</div>
<div data-slot="copyright-right">
<div class="showcase-slot">copyright-right slot</div>
</div>
</Footer>
Event output Interact with the preview to inspect event.detail.
Live examples Designed for real product surfaces Compare configurations and resize the browser to check responsive behavior.
<Footer
label="Footer"
items='[
{
"type": "header",
"label": "Product",
"description": "Build consistent interfaces with WRNexusJS.",
"items": [
{
"label": "Components",
"href": "/base"
},
{
"label": "Themes",
"href": "/themes"
},
{
"label": "Examples",
"href": "/blocks"
}
]
},
{
"type": "header",
"label": "Developers",
"items": [
{
"label": "Documentation",
"href": "/docs"
},
{
"label": "Installation",
"href": "/installation"
},
{
"label": "Framework guides",
"href": "/framework-guides"
}
]
},
{
"type": "header",
"label": "Resources",
"items": [
{
"label": "Accessibility",
"href": "/accessibility"
},
{
"label": "Design tokens",
"href": "/colors"
},
{
"label": "Typography",
"href": "/fonts"
}
]
},
{
"type": "header",
"label": "Company",
"items": [
{
"label": "WorkRoot",
"href": "https://workroot.in",
"external": true
},
{
"label": "WRNexusJS",
"href": "https://wrnexusjs.dev",
"external": true
}
]
}
]'
columns="4"
maxWidth="wide"
copyright="© 2026 WRNexusJS. All rights reserved.">
<div data-slot="pre-footer">
<div class="showcase-slot">pre-footer slot</div>
</div>
<div data-slot="post-footer">
<div class="showcase-slot">post-footer slot</div>
</div>
<div data-slot="copyright-left">
<div class="showcase-slot">copyright-left slot</div>
</div>
<div data-slot="copyright-right">
<div class="showcase-slot">copyright-right slot</div>
</div>
</Footer>
<Footer
size="compact"
label="Compact example"
items='[
{
"type": "header",
"label": "Product",
"description": "Build consistent interfaces with WRNexusJS.",
"items": [
{
"label": "Components",
"href": "/base"
},
{
"label": "Themes",
"href": "/themes"
},
{
"label": "Examples",
"href": "/blocks"
}
]
},
{
"type": "header",
"label": "Developers",
"items": [
{
"label": "Documentation",
"href": "/docs"
},
{
"label": "Installation",
"href": "/installation"
},
{
"label": "Framework guides",
"href": "/framework-guides"
}
]
},
{
"type": "header",
"label": "Resources",
"items": [
{
"label": "Accessibility",
"href": "/accessibility"
},
{
"label": "Design tokens",
"href": "/colors"
},
{
"label": "Typography",
"href": "/fonts"
}
]
}
]'
copyright="WRNexusJS component showcase">
<div data-slot="pre-footer">
<div class="showcase-slot">pre-footer slot</div>
</div>
<div data-slot="post-footer">
<div class="showcase-slot">post-footer slot</div>
</div>
<div data-slot="copyright-left">
<div class="showcase-slot">copyright-left slot</div>
</div>
<div data-slot="copyright-right">
<div class="showcase-slot">copyright-right slot</div>
</div>
</Footer>
<Footer
size="spacious"
label="Advanced example"
items='[
{
"type": "header",
"label": "Product",
"description": "Build consistent interfaces with WRNexusJS.",
"items": [
{
"label": "Components",
"href": "/base"
},
{
"label": "Themes",
"href": "/themes"
},
{
"label": "Examples",
"href": "/blocks"
}
]
},
{
"type": "header",
"label": "Developers",
"items": [
{
"label": "Documentation",
"href": "/docs"
},
{
"label": "Installation",
"href": "/installation"
},
{
"label": "Framework guides",
"href": "/framework-guides"
}
]
},
{
"type": "header",
"label": "Resources",
"items": [
{
"label": "Accessibility",
"href": "/accessibility"
},
{
"label": "Design tokens",
"href": "/colors"
},
{
"label": "Typography",
"href": "/fonts"
}
]
},
{
"type": "header",
"label": "Company",
"items": [
{
"label": "WorkRoot",
"href": "https://workroot.in",
"external": true
},
{
"label": "WRNexusJS",
"href": "https://wrnexusjs.dev",
"external": true
}
]
}
]'
columns="4"
maxWidth="full"
copyright="Built with WRNexusJS">
<div data-slot="pre-footer">
<div class="showcase-footer-banner"><strong>Stay informed</strong><a href="#notifications">Manage notifications</a></div>
</div>
<div data-slot="post-footer">
<div class="showcase-slot">post-footer slot</div>
</div>
<div data-slot="copyright-left">
<div class="showcase-slot">copyright-left slot</div>
</div>
<div data-slot="copyright-right">
<div class="showcase-footer-legal"><a href="#privacy">Privacy</a><a href="#terms">Terms</a></div>
</div>
</Footer>
Component events Respond to every public interaction Use declarative @event handlers in .wrn files or subscribe to the bubbling browser events from JavaScript.
@selectFires when an item, option, card, or result is selected.
@actionFires when the component's primary or item action is activated.
<Footer
@select='console.log(event.detail)'
@action='console.log(event.detail)'
/>const component = document.querySelector("[data-ui-component=\"Footer\"], [data-component=\"Footer\"]")
component?.addEventListener("select", (event) => {
console.log("select", event.detail)
})
component?.addEventListener("action", (event) => {
console.log("action", event.detail)
})
Component API Props and configuration All content and behavior shown above is supplied through these props and slots.
Prop Type Default Required sizestring "default"No colorstring "primary"No labelstring "Footer navigation"No itemsstring []No columnsnumber 3No maxWidthstring "compact"No copyrightstring ""No classstring ""No
}
}