# Component Catalog — Layout Components > **Part of:** [Component Catalog](00-overview.md) > **See also:** [Input Components](01-inputs.md) | [List Components](02-lists.md) Layout components are located in `src/components/layouts/`. ## TabLayout Outermost wrapper for Settings tabs. Provides fixed bottom toolbar. **Import:** `import TabLayout from "src/components/layouts/TabLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `id` | `string` | Layout identifier | | `toolbarItems` | `{ key: number; element: ReactNode }[]` | Toolbar buttons | ```tsx const toolbarFields = [ { key: 0, element: }, { key: 1, element: }, { key: 2, element: }, { key: 3, element: }, ]; {/* Content */} ``` ## SidebarLayout Provides sidebar with jump links navigation for multi-section pages. **Import:** `import SidebarLayout from "src/components/layouts/SidebarLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `itemNames` | `string[]` | Section names for jump links | ```tsx const itemNames = ["General", "User", "Host", "Options"]; {/* Section content */} {/* More sections */} ``` ## TitleLayout Section heading with consistent styling. **Import:** `import TitleLayout from "src/components/layouts/TitleLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `headingLevel` | `"h1" \| "h2" \| "h3" \| ...` | Heading level | | `id` | `string` | Section ID (for jump links) | | `text` | `string` | Section title | ## KebabLayout Kebab menu (three dots) with dropdown actions. **Import:** `import KebabLayout from "src/components/layouts/KebabLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `direction` | `"up" \| "down"` | Dropdown direction | | `dropdownItems` | `ReactNode[]` | Menu items | **Important:** Use `direction="up"` when kebab is in the bottom toolbar. ## HelpTextWithIconLayout Help button with question mark icon. **Import:** `import HelpTextWithIconLayout from "src/components/layouts/HelpTextWithIconLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `textContent` | `string` | Button text | | `onClick` | `() => void` | Click handler | ## SettingsTableLayout Table layout for displaying key-value pairs in Settings. **Import:** `import SettingsTableLayout from "src/components/layouts/SettingsTableLayout"` --- ## Modal Components ### ModalWithFormLayout Base modal component for forms with field definitions. **Import:** `import ModalWithFormLayout, { Field } from "src/components/layouts/ModalWithFormLayout"` **Props:** | Prop | Type | Description | |------|------|-------------| | `dataCy` | `string` | Test identifier | | `variantType` | `"small" \| "medium" \| "large"` | Modal size | | `modalPosition` | `"top" \| "default"` | Modal position | | `offPosition` | `string` | Offset from top (e.g., `"76px"`) | | `title` | `string` | Modal title | | `formId` | `string` | Form ID for submit button | | `fields` | `Field[]` | Form field definitions | | `show` | `boolean` | Controls visibility | | `onSubmit` | `() => void` | Submit handler | | `onClose` | `() => void` | Close handler | | `actions` | `JSX.Element[]` | Action buttons | **Field definition:** ```tsx interface Field { id: string; name: string; pfComponent: ReactNode; fieldRequired?: boolean; } ``` **Example:** ```tsx const fields: Field[] = [ { id: "modal-form-name", name: "Name", pfComponent: , fieldRequired: true, }, ]; ``` ### ModalWithTextAreaLayout Modal with text area content. **Import:** `import ModalWithTextAreaLayout from "src/components/layouts/ModalWithTextAreaLayout"` --- ## Other Layout Components | Component | Import | Use Case | |-----------|--------|----------| | `PopoverWithIconLayout` | `src/components/layouts/PopoverWithIconLayout` | Info popover with icon | | `ExpandableCardLayout` | `src/components/layouts/ExpandableCardLayout` | Expandable card (used in certificates) | | `DualListLayout` | `src/components/layouts/DualListLayout` | Dual list selector | | `DataSpinner` | `src/components/layouts/DataSpinner` | Loading spinner | | `SecondaryButton` | `src/components/layouts/SecondaryButton` | Secondary action button | | `InputRequiredText` | `src/components/layouts/InputRequiredText` | Text input with required indicator | --- ## Generic Section Components For complex sections with the Category Toggle + Tables pattern: ### CategoryToggleSection **Import:** `import CategoryToggleSection from "src/components/CategoryToggleSection/CategoryToggleSection"` See [sub-pages/15-category-toggle-sections.md](../sub-pages/15-category-toggle-sections.md) for detailed usage.