Skip to content
Kappa
Application Shell
@dicehub/kappav0.4.2

Application Shell

Application shell layouts built from Kappa controls, with responsive navigation and source you can copy.

Overview

These layouts compose the Sidebar component and use Kappa's compact visual style. Namespace, profile, search, navigation, and New project controls work with local example data. No account, router, or backend is connected.

Sidebar component documents the primitive parts, resizing, peeking, loading, and sliding views. This separate Blocks section contains complete compositions.

Kappa componentPurpose
SidebarNavigation, resizing, collapsible sections, and the mobile drawer.
DropdownNamespace, profile, and page-link menus.
Command PaletteQuick search and keyboard navigation between pages.
ButtonPage actions such as New project.
TableCompact project lists in the examples.

Layouts

Grouped Navigation

A documentation sidebar with text links grouped by section, a version selector, and an editable search field. Desktop collapse hides the sidebar; mobile uses a full-screen drawer.

Application Shell · groupedOpen full example (new tab)

Collapsible Sections

Section headings expand and collapse their links independently. Search opens matching sections, and section state is retained when switching between desktop and mobile.

Application Shell · collapsible-sectionsOpen full example (new tab)

Clickable parent pages with always-visible, indented child links. A simple documentation header and off-canvas collapse keep the hierarchy clear.

Application Shell · submenusOpen full example (new tab)

Floating Submenus

A wider, floating navigation panel with a border, rounded corners, and visible child links. Desktop collapse hides the panel; mobile uses a full-screen drawer.

Application Shell · floating-submenusOpen full example (new tab)

Collapsible Submenus

Click a parent row to show or hide its indented links. The selected page's group starts open. Search reveals matching links, and open groups are retained on mobile.

Application Shell · collapsible-submenusOpen full example (new tab)

Click a parent row to open its page links in a popup. Search filters the links. Mobile selection closes the full-screen navigation and keeps the selected page.

Application Shell · dropdown-submenusOpen full example (new tab)

Collapsible Icon Navigation

Starts expanded with nested link groups, project shortcuts, namespace and profile menus, and Quick search. Collapse to an icon rail; click a group icon to expand its links. Group state and selection are retained on mobile.

Application Shell · collapsible-iconsOpen full example (new tab)

Inset Navigation

An inset content panel beside nested navigation and project links. Support and Feedback stay above the profile menu while the main links scroll. Includes namespace selection, Quick search, icon collapse, and full-screen mobile navigation.

Application Shell · inset-navigationOpen full example (new tab)

Inbox Navigation

A fixed folder icon rail beside a searchable message list and reading panel. Filter unread messages, collapse the list, and open messages from a full-screen mobile drawer.

Application Shell · inbox-navigationOpen full example (new tab)

Workspace Pages

A page-based workspace with Favorites, expandable groups, namespace selection, Quick search, and utility links. Desktop collapse hides the sidebar; mobile uses a full-screen drawer. The original Workspace example remains available below.

Application Shell · workspace-pagesOpen full example (new tab)

Minimal Workspace

A compact dicehub-style shell with centered search, a simple namespace selector, a resizable sidebar, and a rounded content panel. Includes local project creation, profile and Help menus, a footer collapse button, and full-screen mobile navigation.

Application Shell · minimal-workspaceOpen full example (new tab)

Dashboard

Your projects and recent work, in one place.

Projects

2
2 shown
Projects in Ros.Space
ProjectStatusUpdated
ReadyToday
In reviewYesterday

Example data only. Changes stay in this preview until reload.

Workspace

Grouped navigation, namespace and profile menus, Quick search, and a resizable edge.

Application Shell · workspaceOpen full example (new tab)

Icon Rail

Starts with a compact icon rail. Expand it for labels and nested navigation.

Application Shell · railOpen full example (new tab)

Inset Content

A quiet navigation surface beside a bordered, inset content panel.

Application Shell · insetOpen full example (new tab)

Floating Sidebar

A separate navigation panel with a small outer gap and rounded edges.

Application Shell · floatingOpen full example (new tab)

Installation and Usage

Application Shell uses the published SidebarLayout block. Import it from @dicehub/kappa or @dicehub/kappa/blocks/sidebar-layout. Icons in the complete examples use the docs site's existing Lucide package; the block itself has no icon dependency.

View Code provides a complete Vue file with the example styles. Copy it into your application, replace the synthetic data, and connect navigation to your router. For a smaller composition, use the named slots directly:

Give the block a height. The built-in toggle and mobile Close remain available in every layout. Do not add another Provider or Root inside its slots. SidebarLayout does not create a main landmark; use one in the default slot for an application page.

API and Composition

All Sidebar.Provider props and events are supported, including controlled open/mobile state, width, resize events, compact mode, logical placement, and custom mobile breakpoints. Attributes, styles, and DOM listeners go to the Provider layout element.

PropDefaultPurpose
variantworkspaceworkspace, rail, inset, floating, split, or header.
defaultOpenFalse for rail; true otherwiseInitial desktop state. Changing variant does not reset the current preference.
width / defaultWidth352px for split; 260px otherwiseFixed CSS width or initial numeric resize width. Explicit values take priority.
labelApplication navigationNavigation landmark and mobile dialog name.
navigationLabel / secondaryLabelNavigation links / Secondary navigationNames for the independently scrollable columns.
fullScreenOnMobilefalseFull-viewport mobile navigation. Enabled in all gallery examples.
triggerProps / closeLabel / resizeLabelSidebar labelsTranslate the built-in controls. Trigger props also support disabled state.

Slots: header, navigation, footer, toolbar, secondary, and the default page content. Each receives the Sidebar context. The secondary slot is used only by split. The toolbar is above the full layout for header, and above page content for other variants.

Header, Content, Footer, the toggle, Close, and optional ResizeHandle are composed by the block. Put Menu, Group, links, selectors, or other controls inside the matching slot. Use icons on top-level entries for icon-rail collapse. Grouped Navigation uses text-only links and collapsible="offcanvas" instead.

Use v-model:open, v-model:mobile-open, and v-model:resize-width as with Sidebar.Provider. Keep selection, form values, and controlled section state outside navigation slots: mobile transitions remount the Sidebar content.

This controlled example can reject open and resize requests. Close project list tests focus return from the hidden second column; End placement and RTL show logical positioning.

Grouped Navigation composes Kappa Sidebar, Dropdown, and Input. Its search field filters section links, Escape clears the query, and selecting a page updates the local heading and breadcrumb. The version selector retains its selection across mobile transitions. This is example-level state, not a new SidebarLayout variant.

Collapsible Sections adds Sidebar.Collapsible, CollapsibleTrigger, and CollapsibleContent to each group. All sections start open. Enter and Space toggle the focused heading. Section state is held outside the navigation slot so mobile transitions preserve it. Typing a search opens matching sections; clearing search keeps the current section state.

Submenus uses Sidebar.MenuSub and MenuSubItem for nested lists. Parent links open section overviews, not disclosure controls. Child links remain visible. Native Tab and Enter navigation is preserved; selecting a page closes the mobile drawer and keeps the selection when the viewport changes.

Floating Submenus uses the same navigation with SidebarLayout's floating variant and a 19rem desktop width. The panel has an outer gap and rounded frame. Mobile retains the standard full-screen drawer without the desktop frame.

Collapsible Submenus wraps each nested list in Sidebar.Collapsible. Parent rows are buttons, not links; click, Enter, or Space toggles the list without changing the selected page. Only the selected page's group starts open. Search opens matching groups; clearing search keeps their current state. Open groups and selection survive mobile transitions.

Dropdown Submenus composes Kappa Dropdown with Sidebar.MenuButton. Parent buttons open page links in a popup; they do not navigate. Arrow keys move between menu items, Enter selects a page, and Escape closes the popup and returns focus to its parent. Search filters each popup. Mobile popups stay inside the full-screen drawer; selection closes both layers and returns focus to the sidebar toggle.

This local preview uses Dropdown's navigate callback to dispatch a cancelable native click. The link's @click.prevent then prevents keyboard and pointer selection from leaving the example. Replace this demo handling with your application's navigation when you copy the source.

Collapsible Icon Navigation starts expanded and uses SidebarLayout with icon collapse. Each parent button toggles an independent Sidebar.Collapsible. Clicking a group icon in the rail expands the sidebar and opens that group. Hidden child links are not keyboard targets. Quick search opens the selected page's group, and namespace, profile, group state, and page selection are held outside the slots to survive mobile transitions. This is a demo composition, not a new SidebarLayout variant. The original Icon Rail example is unchanged.

Inset Navigation uses the inset variant with nested link groups and project shortcuts. Its Help and feedback navigation sits in the footer above the profile menu, outside the scrolling primary links. Secondary links open local preview pages, are included in Quick search, and close the mobile drawer after selection. The existing Inset Content example remains unchanged. This composition does not use the secondary slot, which is reserved for the split layout.

Namespace/profile popups use :teleport="!isMobile" and fixed positioning. The namespace trigger uses a 32px icon tile and a 48px row. In the workspace layouts, Quick search is a bordered button that opens Kappa CommandPalette, not an editable input. The examples close mobile navigation after selection; your application must decide when routing has succeeded.

Application Shell profile triggers use a 48px row, a 32px rounded Avatar, and two lines of identity text. Their menus repeat the identity above grouped plan, account, billing, notification, and logout actions. Switch profile opens a submenu; Preferences remains available. All account actions open local previews and do not change real accounts or sessions. The sample portraits use the docs site's local avatar assets; replace their paths when copying this example. Quick search uses a subtle token-based surface instead of a solid white background.

Inbox Navigation composes Sidebar parts directly for a fixed 64px folder rail, a collapsible message list, and a reading panel. It does not add or change a SidebarLayout variant. Folder selection opens the list and clears its filters. Search matches the sender, subject, and body; Unread filters the sample data. Filtering selects the first visible message when necessary. Opening a message does not mark it as read. Empty folders and filters have explicit empty states.

On mobile, the folder rail and message list share a full-screen drawer. Selecting a message closes the drawer and returns focus to its opener. Folder, query, unread filter, and selected message survive viewport changes. Tab and Enter operate the folder and message buttons. The Ros.Space profile uses the same local avatar and grouped account actions; this compact single-account example does not include profile switching. No mail or account action contacts a server.

Workspace Pages is a separate composition of SidebarLayout, Sidebar.Collapsible, Dropdown, CommandPalette, and Button. It does not replace the original Workspace example or add a SidebarLayout variant. Namespace selection changes the available pages. Each namespace keeps its own selected page, Favorites, and open groups until reload. The toolbar star adds or removes the current page from Favorites; removing its last Favorite shows an empty state.

Workspace group buttons only expand or collapse their child links. Selecting a page from Favorites, Home, or Quick search opens its group. Mobile selection closes the full-screen drawer and returns focus to the sidebar toggle. Search matches page names in the active namespace; Escape closes search and returns to its opener. Closed search content is inert during its exit animation. Search selection releases the nested dialog on the next Vue update before closing the drawer, so the two focus traps do not compete. Calendar, Settings, Trash, and Help open local previews. There is no editor, account integration, or server persistence.

The examples also set closed popup content to inert through Dropdown.Context. This prevents delayed menu focus from returning to a closed popup during its exit animation. Selection, dismissal, and trigger focus remain controlled by Kappa Dropdown.

Minimal Workspace is a separate dicehub-style composition of SidebarLayout's existing header variant. Its shared top bar is 48px high. Equal-width header sides center Search or go to across the full example, independent of sidebar width. The desktop sidebar starts at 250px, resizes from 200px to 420px, and collapses to a 48px icon rail. The resize line is hidden at rest and appears on hover, keyboard focus, or drag; its hit area stays active. Drag the separator or use its arrow keys; the last expanded width survives collapse and mobile transitions.

The desktop collapse button sits below Help and uses Sidebar.Trigger with Sidebar.MenuButton. The built-in top-bar trigger is hidden only on desktop; it remains the mobile drawer opener. A simple namespace row and project links sit beside a rounded content panel. The example does not include account warnings, credits, or onboarding cards.

Its Search or go to button opens CommandPalette from the top bar. Search by name filters the project table; Escape clears that field. New project and Use template add local sample projects. Namespace selection changes the project list and resets the page to Dashboard. Profile, Help, and other navigation actions open local previews; Sign out does not end a session. State lasts until reload, and no account, router, or backend is connected.

Container queries replace the wide top navigation with a Browse application pages menu in narrow previews and reduce search to a centered icon on small screens. On mobile, navigation uses Kappa's full-screen drawer; selecting a link or Help action closes it and returns focus to the single top-bar opener. The desktop footer toggle and resize handle are absent on mobile. Desktop collapse retains the namespace and navigation icons while hiding project shortcuts. All other examples remain unchanged.

Accessibility and Styling

Keyboard navigation, visible focus, mobile focus trapping, Escape, and resize controls come from the existing Kappa components. Split navigation hides and disables its secondary column during icon collapse, then stacks the columns on mobile. The top header stays outside the scrolling content.

Navigation headers and page toolbars have a 64px minimum height. Floating and inset surfaces are block-only styles. Mobile uses the normal Sidebar drawer surface. Light and dark modes use the same semantic tokens; reduced-motion settings are preserved.

Optional dimensions: --kappa-sidebar-layout-gap (0.5rem), --kappa-sidebar-layout-radius (0.625rem), and --kappa-sidebar-layout-primary-width (9.5rem for split's first column). Namespace and profile data remain example-level compositions, not new application-specific controls.