Skip to content

Layout Widgets Overview

Layout widgets are containers. They take a children array (a tabs/accordion takes a sections array of { label, uid, children }) and arrange them visually. They have no path and don’t write to form data themselves.

import { gui } from '@golemui/gui-shared';
const formDef = [
// Grid for rows — subgrid keeps labels and inputs aligned across all children.
gui.layouts.grid([
gui.inputs.textInput('user.firstName'),
gui.inputs.textInput('user.lastName'),
]),
// Flex for columns.
gui.layouts.flex(
[gui.inputs.textInput('user.email'), gui.inputs.password('user.password')],
{ direction: 'column' },
),
// Tabs — first arg is sections, each with its own children.
gui.layouts.tabs([
{
label: 'Personal',
uid: 'personal',
children: [
/* ... */
],
},
{
label: 'Work',
uid: 'work',
children: [
/* ... */
],
},
]),
];

flex and grid also have direction-preset variants — gui.layouts.horizontalFlex / verticalFlex / horizontalGrid / verticalGrid — equivalent to passing { direction: 'row' } or { direction: 'column' } explicitly. See the gui.layouts reference for the full list.

  • Use grid for rows. CSS subgrid keeps labels, inputs, and validation messages aligned across every child in the row.
  • Use flex for columns. Lighter, more flexible for vertical stacks.
WidgetDX shortcutReference
Flexgui.layouts.flexFlex
Gridgui.layouts.gridGrid — recommended for rows
Tabsgui.layouts.tabsTabs
Accordiongui.layouts.accordionAccordion
Customgui.layouts.customCustom Widgets