// 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 {
Layout component

Footer

Render structured responsive footer navigation, pre and post content, copyright content, links, and public events.

8 props4 slots2 eventsTheme readyResponsive
Interactive playground

Configure Footer

Change any prop and inspect the server-rendered component immediately.

Live preview
Component code
<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 outputInteract with the preview to inspect event.detail.
Component props8 controls
Live examples

Designed for real product surfaces

Compare configurations and resize the browser to check responsive behavior.

Recommended

Four-column public footer

Organize product, developer, resource, and company links into responsive columns.

01
Component usage.wrn
<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>
Compact

Compact application footer

Use fewer columns and reduced spacing inside product applications.

02
Component usage.wrn
<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>
Advanced

Full-width footer with slots

Compose pre-footer, post-footer, and legal content around structured navigation.

03
Component usage.wrn
<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.
Declarative handlers.wrn
<Footer
  @select='console.log(event.detail)'
  @action='console.log(event.detail)'
/>
Browser listeners.js
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.

PropTypeDefaultRequired
sizestring"default"No
colorstring"primary"No
labelstring"Footer navigation"No
itemsstring[]No
columnsnumber3No
maxWidthstring"compact"No
copyrightstring""No
classstring""No
} }