> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# InlineBanner

> Inline feedback with node content, icons, and actions.

export const StoryEmbed = ({storyId, title, height = 120}) => <>
    <Tabs>
      <Tab title="Light">
        <iframe title={`${title} (light)`} src={`https://storybook.twenty.com/iframe.html?id=${storyId}&viewMode=story&globals=colorScheme:light`} width="100%" height={height} loading="lazy" allow="clipboard-write" style={{
  border: 0
}} />
      </Tab>
      <Tab title="Dark">
        <iframe title={`${title} (dark)`} src={`https://storybook.twenty.com/iframe.html?id=${storyId}&viewMode=story&globals=colorScheme:dark`} width="100%" height={height} loading="lazy" allow="clipboard-write" style={{
  border: 0
}} />
      </Tab>
    </Tabs>
    <a href={`https://storybook.twenty.com/?path=/story/${storyId}`}>
      Open in Storybook
    </a>
  </>;

`InlineBanner` composes [Banner](/ui/primitives/feedback/banner) with a rounded inline layout and a decorative information icon. It shares Banner's independent `status`, `variant`, `color`, `icon` and `action` contracts. Its default appearance is `soft` and its default status is `info`.

<StoryEmbed storyId="ui-feedback-inlinebanner--display" title="Inline banner with an action" height={130} />

## Usage

```tsx theme={null}
import { InlineBanner } from 'twenty-ui/components/feedback';

export const ModelsBanner = ({ onConfigure }: { onConfigure: () => void }) => (
  <InlineBanner
    status="error"
    action={
      <InlineBanner.Action onClick={onConfigure}>
        Configure models
      </InlineBanner.Action>
    }
  >
    No AI models are enabled.
  </InlineBanner>
);
```

The `standard` layout fills the available width. Plain string children truncate, with keyboard focus, pointer hover or touch revealing the full string in a tooltip. Rich node children render directly, so embedded links and controls retain their own semantics. Compose explicit typography when rich content needs truncation.

Use `layout="compact"` for wrapping content, closer spacing and a maximum content width of 512px. Add `fullWidth` to remove that cap and fill the available parent width, including padding and borders. It defaults to `false` and does not change the standard layout, which already fills its parent. It has no bottom margin. Layout is independent of `solid` or `soft` appearance. `embedded` removes the standard layout's bottom margin.

```tsx theme={null}
import { InlineBanner } from 'twenty-ui/components/feedback';
import { IconInfoCircle } from 'twenty-ui/icon';

export const ConnectionBanner = () => (
  <InlineBanner
    layout="compact"
    status="warning"
    color="blue"
    icon={<IconInfoCircle aria-hidden="true" />}
    action={
      <InlineBanner.Action href="/settings/accounts">
        Connection settings
      </InlineBanner.Action>
    }
  >
    Connect your account to sync contacts.
  </InlineBanner>
);
```

<StoryEmbed storyId="ui-feedback-inlinebanner--compact-link" title="Compact banner with a destination link" height={120} />

`InlineBanner.Action` provides a small outline button that inherits the banner’s displayed color, including explicit palette overrides and solid appearances. It supports Button interactions, links, refs and custom rendering. The `action` slot also accepts arbitrary controls.

The root target is a `div`. Native props, `className`, `style` and `ref` target that root; Base UI `render` can compose another element and receives resolved Banner state. `action` accepts any ReactNode, including multiple controls with their complete Button or link APIs. `icon={null}` removes the default icon.

The caller owns whether the banner is rendered and whether changes should be announced. Supply `role="status"` and `aria-live="polite"`, or an appropriate live-region wrapper, when needed. Status does not assign live-region semantics. Name action controls and mark decorative custom icons with `aria-hidden`.

## Migration

Replace `message` with `children`, `LeftIcon={Icon}` with `icon={<Icon />}`, and `button` configuration with an `action` node. Use `InlineBanner.Action` to keep action styling aligned with the banner. Replace `variant="compact"` with `layout="compact"`; standard is now the default layout. Use `status="error"` for error meaning or `color="red"` for a palette override.

## Props

<ParamField body="action" type="ReactNode">
  Optional trailing ReactNode. InlineBanner.Action supplies the shared banner action preset and inherits the resolved banner color; arbitrary controls are also accepted.
</ParamField>

<ParamField body="children" type="ReactNode">
  Caller-provided content. Standard plain strings truncate with a focusable tooltip; rich nodes render directly. Compact content wraps.
</ParamField>

<ParamField body="className" type="string">
  Class merged onto the root div or composed element.
</ParamField>

<ParamField body="color" type="&#x22;blue&#x22; | &#x22;gray&#x22; | &#x22;green&#x22; | &#x22;orange&#x22; | &#x22;red&#x22;" default="status palette">
  Gray, blue, green, orange or red palette override. An omitted color follows status.
</ParamField>

<ParamField body="embedded" type="boolean" default="false">
  Removes the standard bottom margin. Compact layouts have no bottom margin.
</ParamField>

<ParamField body="fullWidth" type="boolean" default="false">
  Fills the available parent width, including padding and borders, and removes the compact layout's 512px maximum. Defaults to false; standard layout already fills its parent.
</ParamField>

<ParamField body="icon" type="ReactNode" default="decorative information icon">
  Leading ReactNode. Defaults to a decorative information icon. Pass null to omit it.
</ParamField>

<ParamField body="layout" type="&#x22;compact&#x22; | &#x22;standard&#x22;" default="standard">
  Standard full-width layout or compact wrapping layout with a 512px maximum content width. Defaults to standard.
</ParamField>

<ParamField body="ref" type="Ref<HTMLDivElement>">
  Ref to the root div, or to the DOM element supplied through render.
</ParamField>

<ParamField body="render" type="ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, BannerState>">
  Base UI root element or render callback, receiving native props/ref and resolved Banner state.
</ParamField>

<ParamField body="status" type="&#x22;error&#x22; | &#x22;info&#x22; | &#x22;neutral&#x22; | &#x22;success&#x22; | &#x22;warning&#x22;" default="info">
  Feedback meaning: neutral, info, success, warning or error. Defaults to info. Roles and announcements remain caller-owned.
</ParamField>

<ParamField body="style" type="CSSProperties">
  Inline styles applied to the root div or composed element.
</ParamField>

<ParamField body="variant" type="&#x22;soft&#x22; | &#x22;solid&#x22;" default="soft">
  Solid or soft appearance, independently of status and layout. Defaults to soft.
</ParamField>

### InlineBanner.Action

<ParamField body="Action.className" type="string | ((state: ButtonState) => string | undefined)">
  CSS class applied to the element, or a function that
  returns a class based on the component's state.
</ParamField>

<ParamField body="Action.elevated" type="boolean">
  Adds a shadow and backdrop blur. Neutral outline buttons also use elevated surface colors.
</ParamField>

<ParamField body="Action.endIcon" type="ReactNode">
  Decorative content displayed after the label.
</ParamField>

<ParamField body="Action.focusableWhenDisabled" type="boolean" default="false">
  Whether the button should be focusable when disabled.
</ParamField>

<ParamField body="Action.fullWidth" type="boolean">
  Expands the button to fill its container width.
</ParamField>

<ParamField body="Action.href" type="string">
  Destination URL. Renders a native anchor when `render` is omitted unless `nativeButton` is explicitly true. Custom renderers retain their own element contract.
</ParamField>

<ParamField body="Action.loading" type="boolean">
  Shows a loading indicator and disables activation.
</ParamField>

<ParamField body="Action.loadingPosition" type="&#x22;center&#x22; | &#x22;end&#x22; | &#x22;start&#x22;">
  Where the loading indicator appears. `center` hides the content while preserving its layout space; `start` and `end` keep children and the opposite icon visible and replace the corresponding icon with the spinner.
</ParamField>

<ParamField body="Action.nativeButton" type="boolean" default="true">
  Whether the rendered root is a native button. Defaults to true for custom renderers. The built-in `href` anchor defaults to false; an explicit value takes precedence.
</ParamField>

<ParamField body="Action.render" type="ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, ButtonState>">
  Caller-supplied root element or renderer. Native attributes, handlers, event details, and refs reach the rendered root. Use `nativeButton={false}` and `role="link"` for a custom navigation anchor. Router integration belongs to the caller.
</ParamField>

<ParamField body="Action.role" type="AriaRole">
  Role of the root element. Use `link` for custom navigation renderers.
</ParamField>

<ParamField body="Action.shortcut" type="ShortcutDefinition">
  Flat key array for simultaneous keys, or nested key arrays for an ordered sequence. Displayed on non-mobile screens.
</ParamField>

<ParamField body="Action.shortcutJoinLabel" type="string">
  Localized text between sequence steps. Defaults to then.
</ParamField>

<ParamField body="Action.startIcon" type="ReactNode">
  Decorative content displayed before the label.
</ParamField>

<ParamField body="Action.style" type="CSSProperties | ((state: ButtonState) => CSSProperties | undefined)">
  Style applied to the element, or a function that
  returns a style object based on the component's state.
</ParamField>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.