Navigated to /docs/ui/layout-components

Layout component reference

Use layout defaults, responsive primitives, compound structures, tables, split panes, and Resizable accurately.

Layout primitive defaults

  • Stack and Inline default gap to md. Stack lays out vertically; Inline lays out horizontally.

  • Flex defaults direction=row, align=stretch, justify=start, gap=none, and wrap=false.

  • Grid defaults to 12 columns, spacing=md, and align=stretch. minItemWidth switches it to auto-fit responsive columns.

  • Page defaults size=xl and padding=lg. Section defaults to a section root, titleSize=h2, and spacing=lg.

  • Toolbar defaults component=div, align=center, justify=between, gap=md, and wrap=true.

  • AppBar defaults component=header and position=sticky. Sidebar defaults padding=md.

  • Spacer defaults size=md and axis=block; it is aria-hidden because it is layout-only.

Shell, split panes, and owned structure

  • Shell accepts header, sidebar, rail, and children as explicit application regions. The application owns landmark labels and responsive visibility.

  • SplitPane accepts aside and children directly and also exposes Root, Aside, and Main members. It defaults side=left, ratio=1fr 2fr, and gap=md.

  • Card defaults component=section, tone=neutral, and surface=default. Card.Root exposes Header, Media, Content, and Actions members.

  • Table.Root owns native table structure inside a scroll wrapper. Use Table.Caption rather than a caption prop, and keep Head, Body, Row, HeaderCell, and Cell in valid table order.

  • Table.Data receives columns and rows, defaults compact=false, and stringifies a cell when the column has no render function.

Understand the current Resizable contract

Resizable currently provides layout anatomy rather than managed resizing. Root defaults direction to horizontal. Panel applies defaultSize as flex-basis. Handle renders a focusable separator, but the package does not yet attach pointer dragging, arrow-key resizing, value constraints, or change callbacks.