PUI.Layout (pui v1.0.0-beta.10)

Copy Markdown

Reusable application shell primitives for documentation sites, dashboards, and other two-pane LiveView layouts.

The layout API is split into small components so applications can compose their own shell without inheriting opinionated navigation data structures.

Basic Usage

<.app_layout id="docs-shell">
  <:sidebar>
    <.sidebar>
      <:header>
        <div class="px-4 py-3 font-semibold">PUI</div>
      </:header>

      <nav class="p-3">
        <.sidebar_menu_item title="Getting Started" icon="hero-rocket-launch" href="/docs" />
      </nav>
    </.sidebar>
  </:sidebar>

  <:header>
    <.content_header shell_id="docs-shell" breadcrumb_current="Getting Started" />
  </:header>

  Content goes here.
</.app_layout>

Collapsible Navigation

Use collapsible={true} on sidebar_menu_item/1 when an item owns nested links. The submenu state is handled by the bundled PUI.Sidebar hook.

<.sidebar_menu_item
  title="Components"
  icon="hero-squares-2x2"
  collapsible
  expanded
>
  <:subitem>
    <.link href="/docs/button" class="block rounded-md px-2 py-1.5 text-sm">Button</.link>
  </:subitem>
</.sidebar_menu_item>

Components

ComponentDescription
app_layout/1Root shell with collapsible sidebar state
sidebar/1Sidebar surface with header and footer slots
sidebar_menu_item/1Sidebar link row with optional collapsible submenu
content_header/1Sticky content header with sidebar toggle and breadcrumbs

Summary

Functions

Renders a two-pane application shell.

Renders a sticky shell header with a sidebar toggle and breadcrumb.

Renders a collapsible sidebar surface.

Renders a sidebar item as a link or as a collapsible submenu trigger.

Functions

app_layout(assigns)

Renders a two-pane application shell.

Attributes

NameTypeDefaultDescription
idstring"app-layout"Shell DOM id, used by content_header/1 toggle
classstring""Additional classes for the root shell
content_classstring"w-full px-4 py-4"Classes for the scrollable main content element
collapsedbooleanfalseInitial sidebar collapsed state rendered by the server

Slots

NameRequiredDescription
sidebarYesSidebar content, usually sidebar/1
headerNoSticky header content, usually content_header/1
inner_blockYesMain page content

Attributes

  • id (:string) - Defaults to "app-layout".
  • class (:string) - Defaults to "".
  • content_class (:string) - Defaults to "w-full px-4 py-4".
  • collapsed (:boolean) - Defaults to false.

Slots

  • sidebar (required)
  • header
  • inner_block (required)

content_header(assigns)

Renders a sticky shell header with a sidebar toggle and breadcrumb.

Attributes

NameTypeDefaultDescription
shell_idstring"app-layout"Target shell id for collapse toggling
classstring""Additional classes for the header
toggle_classstring""Additional classes for the toggle button
titlestringnilSmall eyebrow text above the breadcrumb
breadcrumb_parentstringnilOptional parent breadcrumb
breadcrumb_currentstringrequiredCurrent page breadcrumb

Slots

NameRequiredDescription
right_actionsNoRight-aligned buttons, menus, or theme controls

Attributes

  • shell_id (:string) - Defaults to "app-layout".
  • class (:string) - Defaults to "".
  • toggle_class (:string) - Defaults to "".
  • title (:string) - Defaults to nil.
  • breadcrumb_parent (:string) - Defaults to nil.
  • breadcrumb_current (:string) (required)

Slots

  • right_actions

sidebar(assigns)

Renders a collapsible sidebar surface.

Attributes

NameTypeDefaultDescription
idstring"app-sidebar"Sidebar DOM id
classstring""Additional classes for the sidebar
expanded_width_classstring"w-72"Width class when the shell is expanded
collapsed_width_classstring"group-data-[collapsed=true]/pui-layout:w-12"Width class when collapsed

Slots

NameRequiredDescription
headerNoLogo, workspace switcher, or sidebar title
inner_blockYesSidebar navigation/content
footerNoAccount controls or secondary actions

Attributes

  • id (:string) - Defaults to "app-sidebar".
  • class (:string) - Defaults to "".
  • expanded_width_class (:string) - Defaults to "w-72".
  • collapsed_width_class (:string) - Defaults to "group-data-[collapsed=true]/pui-layout:w-12".

Slots

  • header
  • inner_block (required)
  • footer