Components
Back to catalog
Component detail entry
Layout
@vean/ui
SLayout

Layout

Layout belongs to the Layout category. Start with demos and usage, then use the API tables to finish integration and styling decisions.

Use the quick jump panel to reach overview, usage, demos, and API first, then continue through the full page.

Quick jump

Related components

If you are composing interactions in the same family, these components usually pair well together.

Layout

Overview

The layout component structure for admin dashboards or complex applications. It manages sidebar, header, footer, tabs, and main content areas.

Features

  • One unified layout — SLayout combines the modern sidebar shell with admin-classic capabilities: scrollable wrapper, fixed header/footer, and orientation support.
  • Three variants — sidebar (bordered), floating (rounded shadow), and inset (content with margin and rounded corners).
  • Collapsible sidebar — collapsible="icon" collapses the sidebar to a rail width; collapsible="offcanvas" slides it off-canvas while preserving layout space.
  • Side control — side="left" or side="right" flips the sidebar position with full RTL-aware logical properties.
  • Mobile drawer — unset isMobile follows the viewport and swaps the desktop sidebar for a Dialog-based drawer with overlay and focus trap; pass a boolean to override the breakpoint.
  • Slot-level overrides — every region (sidebar, header, tab, content, footer) accepts per-slot *Props for granular attribute forwarding.
  • CSS-variable driven — dimensions (sidebarWidth, headerHeight, tabHeight, footerHeight) emit rem-based CSS variables for runtime customization.
  • Size scaling — size (xs…2xl) scales the layout spacing and base typography through themeSizeRatio.
  • fullContent mode — pins the content area to fill the viewport while keeping the tab bar above it.
  • Orientation — Layout supports horizontal (sidebar beside content) and vertical (sidebar stacked under header) orientations.
  • Scroll behaviors — scrollBehavior="content" scrolls only the content region; scrollBehavior="wrapper" scrolls the entire main wrapper.
  • Fixed header/footer — fixedTop and fixedFooter keep the header/footer pinned during content scroll, with automatic placeholder elements to prevent overlap.
  • Base z-index control — baseZIndex derives the stacking order of sidebar, header, tab, and footer so multiple layouts compose predictably.
  • Aria composition — every region (LayoutRoot, LayoutSidebar, LayoutRail, LayoutHeader, LayoutTab, LayoutContent, LayoutFooter, LayoutMobile, LayoutTrigger) is exported from @vean/aria/layout for custom styled builds.
  • SSR safe — no window/document access in setup; the viewport fallback is guarded, and useId() generates stable scroll ids for server rendering.

Usage

Demos

Basic

API

Aria Layer

13

Layout

38 Props2 Emits6 Slots
Props
PropTypeDefaultDescription
class
ClassValue
—
Additional class names applied to the root element.
size
ThemeSize
—
Visual size of the component.
ui
Partial<LayoutUi>
—
Per-slot class overrides for the component.
open
boolean
—
The controlled open state of the layout. Can be bound with `v-model`.
defaultOpen
boolean
—
The open state of the layout when it is initially rendered. Use when you do not need to control its open state.
side
HorizontalSide
—
The side of the layout.
variant
LayoutVariant
—
The variant of the layout.
collapsible
LayoutCollapsible
—
The collapsible state of the layout.
sidebarVisible
boolean
true
whether to show the sidebar.
sidebarWidth
number
240
The width of the sidebar. (px)
collapsedSidebarWidth
number
50
The width of the sidebar when it is collapsed. (px)
isMobile
boolean
—
Whether the layout is in mobile view. Resolution order: this prop, then a host viewport decision provided through `provideViewportContext` (a simulated viewport — a device frame, an embedded shell), then `useMediaQuery(mobileViewportQuery)` — the same breakpoint the styled desktop sidebar is hidden at. Pass an explicit boolean to force the mode (e.g. a server-side detection); `false` re-enables the inline sidebar even below the breakpoint.
mobileOpen
boolean
—
The controlled open state of the mobile drawer. Can be bound with `v-model:mobileOpen`. Kept apart from `open`, which drives the desktop sidebar: on mobile the inline sidebar is replaced by a drawer, so the two states never apply at the same time.
defaultMobileOpen
boolean
false
The open state of the mobile drawer when it is initially rendered.
mobileSidebarWidth
number
240
The width of the sidebar in the mobile view. (px)
headerVisible
boolean
true
whether to show the header.
headerHeight
number
56
The height of the header. (px)
tabVisible
boolean
true
whether to show the tab.
tabHeight
number
44
The height of the tab. (px)
footerVisible
boolean
true
whether to show the footer.
footerHeight
number
48
The height of the footer. (px)
fullContent
boolean
false
whether the content takes the full height of the layout (include).
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
orientation
DataOrientation
—
Orientation of the component.
scrollBehavior
LayoutScrollBehavior
—
Scroll behavior.
scrollId
string
—
Scroll id.
baseZIndex
number
50
The base z-index of the layout. The z-index of the sidebar, header, tab, footer, and their fixed versions will be calculated based on this value.
fixedTop
boolean
true
Whether the header and tab are fixed to the top of the layout when the orientation is vertical. If true, the header and tab will be fixed to the top of the layout when the orientation is vertical, and will scroll with the content when the orientation is horizontal.
fixedFooter
boolean
true
Whether footer is fixed
stretchFooter
boolean
true
Whether the footer should stretch to the full width of the layout or the content when layout orientation is vertical.
sidebarProps
LayoutSidebarProps
—
—
railProps
LayoutRailProps
—
—
mainProps
LayoutMainProps
—
—
headerProps
LayoutHeaderProps
—
—
tabProps
LayoutTabProps
—
—
contentProps
LayoutContentProps
—
—
footerProps
LayoutFooterProps
—
—
mobileProps
LayoutMobileProps
—
—
Emits
Emit NameParametersDescription
update:open
boolean
Emitted when the open state changes.
update:mobileOpen
boolean
Emitted when the mobile drawer open state changes.
Slots
Slot NameParametersDescription
default
—
Custom content for the default slot.
sidebar
{ open: boolean | undefined; collapsedSidebarWidth: number; collapsed: boolean; }
Custom content for the sidebar slot. `collapsed` is the mode-aware state to render from: it is `false` on mobile, where the sidebar is a drawer that always shows the expanded navigation, so a collapse chosen on desktop does not follow the content into the drawer. `open` still reports the desktop state.
header
—
Custom content for the header slot.
tab
—
Custom content for the tab slot.
content
—
Custom content for the content slot.
footer
—
Custom content for the footer slot.

LayoutCompact

35 Props2 Emits6 Slots
Props
PropTypeDefaultDescription
open
boolean
—
The controlled open state of the layout. Can be bound with `v-model`.
defaultOpen
boolean
—
The open state of the layout when it is initially rendered. Use when you do not need to control its open state.
side
HorizontalSide
—
The side of the layout.
variant
LayoutVariant
—
The variant of the layout.
collapsible
LayoutCollapsible
—
The collapsible state of the layout.
sidebarVisible
boolean
true
whether to show the sidebar.
sidebarWidth
number
240
The width of the sidebar. (px)
collapsedSidebarWidth
number
50
The width of the sidebar when it is collapsed. (px)
isMobile
boolean
—
Whether the layout is in mobile view. Resolution order: this prop, then a host viewport decision provided through `provideViewportContext` (a simulated viewport — a device frame, an embedded shell), then `useMediaQuery(mobileViewportQuery)` — the same breakpoint the styled desktop sidebar is hidden at. Pass an explicit boolean to force the mode (e.g. a server-side detection); `false` re-enables the inline sidebar even below the breakpoint.
mobileOpen
boolean
—
The controlled open state of the mobile drawer. Can be bound with `v-model:mobileOpen`. Kept apart from `open`, which drives the desktop sidebar: on mobile the inline sidebar is replaced by a drawer, so the two states never apply at the same time.
defaultMobileOpen
boolean
false
The open state of the mobile drawer when it is initially rendered.
mobileSidebarWidth
number
240
The width of the sidebar in the mobile view. (px)
headerVisible
boolean
true
whether to show the header.
headerHeight
number
56
The height of the header. (px)
tabVisible
boolean
true
whether to show the tab.
tabHeight
number
44
The height of the tab. (px)
footerVisible
boolean
true
whether to show the footer.
footerHeight
number
48
The height of the footer. (px)
fullContent
boolean
false
whether the content takes the full height of the layout (include).
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
orientation
DataOrientation
—
Orientation of the component.
scrollBehavior
LayoutScrollBehavior
—
Scroll behavior.
scrollId
string
—
Scroll id.
baseZIndex
number
50
The base z-index of the layout. The z-index of the sidebar, header, tab, footer, and their fixed versions will be calculated based on this value.
fixedTop
boolean
true
Whether the header and tab are fixed to the top of the layout when the orientation is vertical. If true, the header and tab will be fixed to the top of the layout when the orientation is vertical, and will scroll with the content when the orientation is horizontal.
fixedFooter
boolean
true
Whether footer is fixed
stretchFooter
boolean
true
Whether the footer should stretch to the full width of the layout or the content when layout orientation is vertical.
sidebarProps
LayoutSidebarProps
—
—
railProps
LayoutRailProps
—
—
mainProps
LayoutMainProps
—
—
headerProps
LayoutHeaderProps
—
—
tabProps
LayoutTabProps
—
—
contentProps
LayoutContentProps
—
—
footerProps
LayoutFooterProps
—
—
mobileProps
LayoutMobileProps
—
—
Emits
Emit NameParametersDescription
update:open
boolean
Emitted when the open state changes.
update:mobileOpen
boolean
Emitted when the mobile drawer open state changes.
Slots
Slot NameParametersDescription
default
—
Custom content for the default slot.
sidebar
{ open: boolean | undefined; collapsedSidebarWidth: number; collapsed: boolean; }
Custom content for the sidebar slot. `collapsed` is the mode-aware state to render from: it is `false` on mobile, where the sidebar is a drawer that always shows the expanded navigation, so a collapse chosen on desktop does not follow the content into the drawer. `open` still reports the desktop state.
header
—
Custom content for the header slot.
tab
—
Custom content for the tab slot.
content
—
Custom content for the content slot.
footer
—
Custom content for the footer slot.

LayoutContent

LayoutFooter

LayoutHeader

LayoutMain

LayoutMobile

LayoutPlaceholder

1 Props
Props
PropTypeDefaultDescription
type
'header' | 'tab' | 'footer'
—
Which region the placeholder reserves space for.

LayoutRail

LayoutRoot

27 Props2 Emits
Props
PropTypeDefaultDescription
open
boolean
—
The controlled open state of the layout. Can be bound with `v-model`.
defaultOpen
boolean
—
The open state of the layout when it is initially rendered. Use when you do not need to control its open state.
side
HorizontalSide
—
The side of the layout.
variant
LayoutVariant
—
The variant of the layout.
collapsible
LayoutCollapsible
—
The collapsible state of the layout.
sidebarVisible
boolean
true
whether to show the sidebar.
sidebarWidth
number
240
The width of the sidebar. (px)
collapsedSidebarWidth
number
50
The width of the sidebar when it is collapsed. (px)
isMobile
boolean
—
Whether the layout is in mobile view. Resolution order: this prop, then a host viewport decision provided through `provideViewportContext` (a simulated viewport — a device frame, an embedded shell), then `useMediaQuery(mobileViewportQuery)` — the same breakpoint the styled desktop sidebar is hidden at. Pass an explicit boolean to force the mode (e.g. a server-side detection); `false` re-enables the inline sidebar even below the breakpoint.
mobileOpen
boolean
—
The controlled open state of the mobile drawer. Can be bound with `v-model:mobileOpen`. Kept apart from `open`, which drives the desktop sidebar: on mobile the inline sidebar is replaced by a drawer, so the two states never apply at the same time.
defaultMobileOpen
boolean
false
The open state of the mobile drawer when it is initially rendered.
mobileSidebarWidth
number
240
The width of the sidebar in the mobile view. (px)
headerVisible
boolean
true
whether to show the header.
headerHeight
number
56
The height of the header. (px)
tabVisible
boolean
true
whether to show the tab.
tabHeight
number
44
The height of the tab. (px)
footerVisible
boolean
true
whether to show the footer.
footerHeight
number
48
The height of the footer. (px)
fullContent
boolean
false
whether the content takes the full height of the layout (include).
pxToRem
((px: number) => number)
(px: number) => px / 16 (16 is the base font size)
The function to convert pixels to rem.
orientation
DataOrientation
—
Orientation of the component.
scrollBehavior
LayoutScrollBehavior
—
Scroll behavior.
scrollId
string
—
Scroll id.
baseZIndex
number
50
The base z-index of the layout. The z-index of the sidebar, header, tab, footer, and their fixed versions will be calculated based on this value.
fixedTop
boolean
true
Whether the header and tab are fixed to the top of the layout when the orientation is vertical. If true, the header and tab will be fixed to the top of the layout when the orientation is vertical, and will scroll with the content when the orientation is horizontal.
fixedFooter
boolean
true
Whether footer is fixed
stretchFooter
boolean
true
Whether the footer should stretch to the full width of the layout or the content when layout orientation is vertical.
Emits
Emit NameParametersDescription
update:open
boolean
Emitted when the open state changes.
update:mobileOpen
boolean
Emitted when the mobile drawer open state changes.

LayoutSidebar

LayoutTab

LayoutTrigger

4 Props
Props
PropTypeDefaultDescription
type
ButtonType
'button'
The type of the button element. Can be one of 'button', 'submit', or 'reset'.
disabled
boolean
—
Whether the component is disabled.
asChild
boolean
—
Change the default rendered element for the one passed as a child, merging their props and behavior.
as
AsTag | Component
'div'
The element or component this component should render as. Can be overwrite by `asChild`

Notes

Architecture and benchmark comparison

ConcernVeanUIAnt Design Layout/Header/Sider/Content/FooterElement Plus ElContainer/ElHeader/ElAside/ElMain/ElFooter
Aria / styled separation✅ @vean/aria/layout ships logic + structure; @vean/ui ships scv() recipes❌ single styled package❌ single styled package
Sidebar variantssidebar / floating / insetsider onlyaside only
Collapsible modesicon (rail) + offcanvas (slide out)collapsible + collapsedWidth—
Mobile drawerbuilt-in Dialog-based drawer (follows the viewport)requires Drawer compositionrequires Drawer composition
Fixed header/footerLayout with fixedTop / fixedFooter + automatic placeholdersrequires manual sticky CSSrequires manual sticky CSS
OrientationLayout orientation="horizontal" | "vertical"——
Scroll behaviorwrapper / content on Layout——
CSS-variable dimensions--vean-sidebar-width, --vean-layout-header-height, etc.inline width on Siderinline width on Aside
RTL supportlogical properties (start-*, end-*, ps-*, pe-*) + rtl: variants on rail——
Z-index orchestrationbaseZIndex derives sidebar/header/tab/footer z-indexmanualmanual
Region visibilitysidebarVisible / headerVisible / tabVisible / footerVisible propsremove the componentremove the component

Runtime considerations

  1. CSS variables are rem-based — sidebarWidth, collapsedSidebarWidth, headerHeight, tabHeight, footerHeight, and mobileSidebarWidth are converted via pxToRem (default px / 16). Pass a custom pxToRem to align with a non-default root font size.
  2. size scales spacing and typography — the UI wrapper multiplies pixel dimensions by themeSizeRatio[size] / themeSizeMap.md, so size="xs" shrinks both text and sidebar width proportionally.
  3. isMobile resolves through three levels — the prop, then a viewport a host publishes with provideViewportContext (a documentation device frame, an embedded shell), then useMediaQuery(mobileViewportQuery), the breakpoint shared with the styled sidebar’s lt-md hiding rule (767.9px). The winning source is published as data-mobile-source="explicit|viewport", and the styled lt-md fallback only applies to viewport: an explicit isMobile="false" below the breakpoint keeps the inline sidebar and its reserved width, instead of reserving space for a sidebar the CSS had hidden. The drawer is teleported out of the layout, so on mobile the sidebar reserves no space: the start gaps (--vean-layout-start-gap, --vean-layout-header-start-gap, --vean-layout-footer-start-gap) collapse to 0, and each variant falls back to its own end gap — sidebar/floating become full-bleed, inset stays inset symmetrically on both edges. The same fallback covers sidebarVisible="false" on desktop: a hidden sidebar reserves no space either, so the extra spacing floating/inset add beside the sidebar width is withdrawn with it, and the main column stays aligned with the fixed header and footer. A host that resolves the sidebar to no column at all — SAppShell’s split modes do, while a first-level leaf is active — declares sidebarWidth="0" instead: the root then reports data-sidebar-flow="false", the styled layer withdraws the same spacing and paints no column, and because the region itself stays mounted (its mount targets host teleported panes), only the column disappears, not the subtree.
  4. The sidebar slot renders from a mode-aware collapsed — the slot hands its content collapsed next to open: it is false on mobile, where the sidebar is a drawer that always shows the expanded navigation, so a collapse picked on desktop does not follow the content into the drawer. Render from collapsed (a menu’s collapsed, a brand title’s visibility); open keeps reporting the desktop state, and the collapse returns the moment the mode does.
  5. LayoutTrigger vs LayoutRail — LayoutTrigger is a focusable button in the header for keyboard users; LayoutRail is the edge drag affordance with tabindex="-1" (click-only). Both reflect aria-expanded for whichever sidebar the current mode renders — on mobile that is the drawer, not the desktop open state.
  6. Layout placeholder elements — when fixedTop or fixedFooter is enabled, LayoutPlaceholder renders empty spacer divs (data-vean-layout-{header|tab|footer}-placeholder) to prevent content from sliding under the fixed region. Hiding a region removes its placeholder with it, and the fixed regions below close the gap: with the header hidden the tab takes the layout’s top edge instead of keeping the header’s height (inset keeps only its own half-spacing).
  7. scrollId for scroll restoration — Layout generates a stable soybean-layout-scroll-{id} on the scrolling element (wrapper or content depending on scrollBehavior). Pass scrollId to make it deterministic across SSR/CSR.

FAQ

Which layout mode should I use?

Use SLayout for both modern application shells and admin dashboards. It handles fixed header/footer, orientation switching (horizontal / vertical), and wrapper-level scrolling with placeholder spacers through a single unified component.

How do I control the sidebar open state?

Use v-model:open (controlled) or default-open (uncontrolled). The state is reflected on the root via data-state="expanded|collapsed" and on LayoutTrigger/LayoutRail via aria-expanded.

On mobile the inline sidebar is replaced by a drawer, which carries its own state: bind v-model:mobileOpen (or default-mobile-open uncontrolled) to drive it. open keeps controlling the desktop sidebar, so a host that pins isMobile reaches what the user sees through mobileOpen — and the trigger reports that state. A single open binding cannot mean both, because the desktop sidebar defaults to expanded while the drawer has to start closed.

How do I make the sidebar collapse to icons instead of sliding away?

Set collapsible="icon" (default) and collapsedSidebarWidth to the rail width. The sidebar shrinks to the collapsed width and the sidebarGapHandler adjusts the main area accordingly. Use collapsible="offcanvas" to slide the sidebar off-canvas instead.

How does mobile mode work?

Leave isMobile unset (the default) and the layout follows the viewport, swapping the desktop sidebar for a Dialog-based drawer; pass a boolean to pin the mode yourself. The drawer inherits mobileSidebarWidth and reuses the same sidebar slot content. The drawer overlay and focus trap are provided by the underlying Dialog component.

Can a host decide the mode for a whole subtree?

Yes. A host that already knows the answer — a device preview frame rendering a phone, a shell embedded in a desktop app, an SSR pass with a device hint — publishes it once with provideViewportContext({ isMobile }) from @vean/aria/composables; every layout below it follows, and an explicit isMobile prop still wins per instance. Publishing at the frame rather than per component is also what keeps a documentation preview honest: the frame can simulate a phone viewport while the browser window stays wide. Note that viewport-prefixed utilities (lt-md:hidden, sm:, md:) still key off the browser window, so a simulated viewport moves the JS structure (drawer vs. inline sidebar) and the prop-driven spacing, not those breakpoint classes.

Can I render the sidebar on the right?

Yes — set side="right". The layout uses RTL-aware logical properties (start-*, end-*, border-s, border-e) so the sidebar, gap handler, rail cursor, and fixed header/footer insets all flip correctly.

How are z-index values coordinated?

Layout accepts a baseZIndex (default 50). The sidebar, header, tab, and footer z-index values are derived from this base so they stack predictably. The derived values are exposed as --layout-{sidebar|header|tab|footer}-z-index CSS variables.

How do I customize region-level attributes?

Each region accepts a *Props prop on the compact component (e.g. sidebarProps, headerProps, tabProps, contentProps, footerProps, mainProps, railProps, mobileProps). These are forwarded to the corresponding Aria region component.

Changelog

Version history is grouped by release so you can quickly see what changed for this component across published versions.

v0.50.0

2026-10-02

Compare release

Feature

let a host viewport decide isMobile and expose the drawer state

Scope: layoutAuthors: soybeanjsView commit6f9d8

Feature

expose the region visibility props in the basic example

Scope: layoutAuthors: soybeanjsView commitb08dc

Fix

follow the viewport and drop the sidebar gaps on mobile

Scope: layoutAuthors: soybeanjsView commitda8ef

Fix

keep the drawer navigation expanded on mobile

Scope: layoutAuthors: soybeanjsView commit989ca

Fix

re-publish the layout variables inside the mobile drawer

Scope: layoutAuthors: soybeanjsView commitfb1ad

Fix

collapse the fixed tab when the header is hidden

Scope: layoutAuthors: soybeanjsView commit99976

Fix

drop the sidebar-adjacent spacing when the sidebar is hidden

Scope: layoutAuthors: soybeanjsView commita2f34

Fix

reserve and paint nothing for a zero-width sidebar

Scope: layoutAuthors: soybeanjsView commitf6aef

Optimization

adjust transition durations and add margin to layout triggers

Scope: layoutAuthors: soybeanjsView commit0cbff

Chore

align surface-layering assertions with the current recipe

Scope: layoutAuthors: soybeanjsView commit1ab80

Feature

expose the region visibility props in the basic example

Scope: layoutAuthors: soybeanjsView commitb08dc

Fix

collapse the fixed tab when the header is hidden

Scope: layoutAuthors: soybeanjsView commit99976

Fix

drop the sidebar-adjacent spacing when the sidebar is hidden

Scope: layoutAuthors: soybeanjsView commita2f34

Fix

reserve and paint nothing for a zero-width sidebar

Scope: layoutAuthors: soybeanjsView commitf6aef

Fix

re-publish the layout variables inside the mobile drawer

Scope: layoutAuthors: soybeanjsView commitfb1ad

Feature

let a host viewport decide isMobile and expose the drawer state

Scope: layoutAuthors: soybeanjsView commit6f9d8

Fix

follow the viewport and drop the sidebar gaps on mobile

Scope: layoutAuthors: soybeanjsView commitda8ef

Fix

keep the drawer navigation expanded on mobile

Scope: layoutAuthors: soybeanjsView commit989ca

Docs

align surface-layering assertions with the current recipe

Scope: layoutAuthors: soybeanjsView commit1ab80

Optimization

adjust transition durations and add margin to layout triggers

Scope: layoutAuthors: soybeanjsView commit0cbff

v0.22.3

2026-05-17

Compare release

Fix

replace DialogContent with DialogPopup for mobile layout

Scope: layoutAuthors: soybeanfeView commit1efaa

v0.15.5

2026-04-30

Compare release

Optimization

remove unused properties from LayoutClassicRootProps

Scope: layoutAuthors: soybeanfeView commitc9233

v0.9.1

2026-03-03

Compare release

Fix

add background color to sidebar for better visibility

Scope: layoutAuthors: soybeanjsView commit1ce3f

Optimization

optimize layout styles

Scope: layoutAuthors: soybeanjsView commitf5d4d

v0.6.3

2026-02-08

Compare release

Fix

add background color to tab and content variants

Scope: layoutAuthors: soybeanjsView commitd7ab2

v0.5.9

2026-02-07

Compare release

Fix

update main and root styles for layout variants

Scope: layoutAuthors: soybeanjsView commit4bea2

v0.5.8

2026-02-07

Compare release

Feature

add tabVisible and footerVisible props to LayoutProps

Scope: layoutAuthors: soybeanjsView commitaf2b6

v0.3.2

2026-01-29

Compare release

Feature

add LayoutContent component and update layout structure

Scope: layoutAuthors: soybeanjsView commitf5515

v0.1.6

2026-01-27

Compare release

Feature

add customizable header, tab, and footer heights

Scope: layoutAuthors: soybeanjsView commit17258

v0.1.1

2026-01-23

Compare release

Feature

add default props for side, variant, and collapsible

Scope: layoutAuthors: soybeanjsView commit203e7

v0.0.14

2026-01-14

Compare release

Breaking

replace mobile media query with isMobile boolean for improved layout handling

Scope: layoutAuthors: soybeanjsView commit3718f

v0.0.13

2026-01-09

Compare release

Fix

adjust breadcrumb spacing and enhance content area for better layout consistency

Scope: layoutAuthors: soybeanjsView commitc595b

v0.0.11

2026-01-08

Compare release

Fix

update max-width values in configuration and layout files for consistent styling

Scope: layoutAuthors: soybeanjsView commit861cc

v0.0.10

2026-01-07

Compare release

Refactor

replace sizeRatio with pxToRem function for improved sidebar width calculations and update mobile layout styles

Scope: layoutAuthors: soybeanjsView commitca234

v0.0.8

2026-01-01

Compare release

Fix

replace drawerContentVariants with drawerPopupVariants for improved layout handling

Scope: layoutAuthors: soybeanjsView commit6ba89

v0.0.7

2025-12-09

Compare release

Fix

add z-index to mobile drawer for improved visibility

Scope: layoutAuthors: soybeanjsView commit43a1c

v0.0.6

2025-12-09

Compare release

Fix

adjust header and layout styles for improved consistency and overflow handling

Scope: layoutAuthors: soybeanjsView commit6996b

v0.0.2

2025-11-18

Compare release

Feature

implement Layout components

Scope: layoutAuthors: soybeanjsView commitcf0ee

Optimization

rename theme variable to themeContext for consistency across layout components

Scope: layoutAuthors: soybeanjsView commit270ed

Feature

implement Layout components

Scope: layoutAuthors: soybeanjsView commitcf0ee

Optimization

rename theme variable to themeContext for consistency across layout components

Scope: layoutAuthors: soybeanjsView commit270ed