StarGet License
Free
Pro

Shell

<ply-shell> is the unified Pro application shell. Use mode="page" for marketing/content sites (hamburger push drawer under 991px, optional footer) or mode="dashboard" for admin apps (expanded / mini / mobile rail). Project header, sidebar, content, and an optional footer; put <router-outlet> in content.

Proshell

Shell — part of Ply Pro

Unlock it plus 90 pro blocks, widgets & layouts — $99 one-time. Lifetime updates, 14-day money-back guarantee.

Unlock Pro

Live demo

Switch product mode, then open panels or collapse the rail. Force mobile chrome with the viewport buttons to preview push/drawer behavior inside the frame.

Docs

Article

Header, content, and footer push together when a sidebar opens. Only one side may be open at a time.

Optional footer slot

Modes and sizing

Page mode uses a 991px cutoff and push panels (mutex left/right). Dashboard mode uses 1080px / 1360px for mobile / mini / expanded, with [(collapsed)], [width], and [miniWidth]. Force chrome with layout (auto | mobile | desktop) for demos.

HTML

When to use

  • mode="page" — marketing sites, docs articles, optional site footer.
  • mode="dashboard" — admin apps with persistent icon navigation.
  • Free-tier alternatives: <ply-sidenav> for simple docs hubs, <ply-scroll-nav> for on-page TOC shells, and <ply-page-main> for header/body/footer page frames.

Installation

Run the following command to add this shell to your project:

bash

npx ply-ui-cli add shell

API Reference

For AI agents

Copy a prompt with the registry name, CLI install, and import — or add the Ply MCP server.

bash

npx -y ply-ui-mcp

Ply provides standalone components. Import the exact elements you want to use into your component.

typescript (Example)

// Install: npx ply-ui-cli add shell
// Paths are relative to aliases.components (default: src/app/components)
import { ShellContentComponent } from './shell/shell-content/shell-content.component';
import { ShellFooterComponent } from './shell/shell-footer/shell-footer.component';
import { ShellHeaderComponent } from './shell/shell-header/shell-header.component';
import { ShellNavItemComponent } from './shell/shell-nav-item/shell-nav-item.component';
import { ShellNavSectionComponent } from './shell/shell-nav-section/shell-nav-section.component';
import { ShellNavComponent } from './shell/shell-nav/shell-nav.component';
import { ShellSidebarComponent } from './shell/shell-sidebar/shell-sidebar.component';
import { ShellToggleComponent } from './shell/shell-toggle/shell-toggle.component';
import { ShellComponent } from './shell/shell.component';
import { ShellService } from './shell/shell.service';

@Component({
  selector: 'app-your-component',
  imports: [
    ShellComponent,
    ShellContentComponent,
    ShellFooterComponent,
    ShellHeaderComponent,
    ShellNavComponent,
    ShellNavItemComponent,
    ShellNavSectionComponent,
    ShellSidebarComponent,
    ShellToggleComponent
  ],
  template: `...`
})
export class YourComponent {
  private shell = inject(ShellService);
}

API for shell — generated from JSDoc in the library source.

API reference for shell
APIMemberTypeDefaultDescription
ShellServiceopen()(side: ShellSide) => voidCalls open.
ShellServiceclose()(side: ShellSide) => voidCalls close.
ShellServicecloseAll()() => voidCalls closeAll.
ShellServicetoggle()(side: ShellSide) => voidCalls toggle.
ShellServiceisOpen()(side: ShellSide) => voidCalls isOpen.
ShellServicetoggleCollapsed()() => voidCalls toggleCollapsed.
ShellServicetoggleMobile()() => voidCalls toggleMobile.
ShellServicesetMobileOpen()(open: boolean) => voidCalls setMobileOpen.
ShellServicecloseDrawer()() => voidClose any transient drawer (page panel or dashboard mobile).
a[ply-shell-nav-item], button[ply-shell-nav-item], ply-shell-nav-itemclassstring''Extra host classes merged via `cn()`.
a[ply-shell-nav-item], button[ply-shell-nav-item], ply-shell-nav-itemiconstring''Icon sprite name rendered before the label.
ply-shellclassstring''Extra host classes merged via `cn()`.
ply-shellmodeShellMode'page'Product mode. `page` = marketing push-drawer under 991px (no mini). `dashboard` = expanded / mini / mobile rail.
ply-shelllayoutShellLayoutMode'auto'Force chrome for demos. `auto` follows breakpoints for the active mode.
ply-shellwidthnumber280Dashboard expanded rail width in px.
ply-shellminiWidthnumber76Dashboard mini rail width in px.
ply-shellcollapsedbooleanfalseStart dashboard in mini (icons-only) rail. Two-way bindable.
ply-shell(collapsedChange)booleanEmits when dashboard collapsed state changes.
ply-shell-contentScrollable main area for `ply-shell`. Place `<router-outlet>` here. In page mode the parent column scrolls (with footer); in dashboard mode this host scrolls.
ply-shell-contentclassstring''Extra host classes merged via `cn()`.
ply-shell-footerOptional footer slot for `ply-shell`. Typically used in page mode.
ply-shell-footerclassstring''Extra host classes merged via `cn()`.
ply-shell-headerclassstring''Extra host classes merged via `cn()`.
ply-shell-headershowCollapseTogglebooleantrueShow the dashboard collapse/expand control (left edge, next to the sidebar).
ply-shell-headershowMenuTogglebooleantrueShow the built-in hamburger (dashboard mobile, or page under 991px when enabled).
ply-shell-navNavigation list container for `ply-shell-sidebar`.
ply-shell-navclassstring''Extra host classes merged via `cn()`.
ply-shell-nav-sectionclassstring''Extra host classes merged via `cn()`.
ply-shell-nav-sectionlabelstring''Visible section heading. Fades out when the dashboard rail is collapsed.
ply-shell-sidebarclassstring''Extra host classes merged via `cn()`.
ply-shell-sidebarsideShellSide'left'Edge for page-mode panels. Dashboard mode always uses the left rail.
ply-shell-sidebarwidthnumber280Panel / rail width in px (page panel or dashboard expanded width).
ply-shell-toggleclassstring''Extra host classes merged via `cn()`.
ply-shell-togglesideShellSide'left'Which panel this toggle opens.