Skip to component content

Explain an empty collection with a quiet dashed boundary and an optional next action.

No items yet

Create your first item to get started.

Usage

.empty-state supplies the dashed border, rounded corners, centered layout and spacing. Its header, icon, title, description and action classes supply the standard appearance without additional utilities or JavaScript.

Provide a title or description, and use a short action when the user can resolve the empty state. Omit the action when that capability is unavailable.

Add Bootstrap utility classes directly to the .empty-state root element for additional styling. For example, border-0 removes the boundary, bg-body-tertiary adds a surface, and text-start align-items-start gives a start-aligned variant. Directional text utilities follow the host's Bootstrap CSS distribution; an RTL host supplies its RTL utility definitions.

Place a decorative icon inside .empty-state-icon and native links or buttons inside .empty-state-actions. Mark decorative icons aria-hidden="true"; the standard icon frame sizes elements with data-icon. Escape untrusted text and attributes before adding them to HTML.

For filtered collections, explain that no results match and offer a filter reset. For an empty collection, explain how to create the first item. Native navigation, form ownership and permissions remain with the action and its host.

Empty collection

A title, short explanation and optional action share a calm surface.

Empty

No items yet

Create your first item to get started.

<div class="empty-state">
  <div class="empty-state-header">
    <div class="empty-state-icon">
      <i class="lucide lucide-folder" data-icon="inline-start" aria-hidden="true"></i>
    </div>
    <h3 class="empty-state-title">No items yet</h3>
    <p class="empty-state-description">Create your first item to get started.</p>
  </div>
  <div class="empty-state-actions">
    <button class="btn btn-outline-secondary" type="button">Create item</button>
  </div>
</div>

Message only

Use a short explanation when no direct action is available.

Empty

No matching results

Try a different search.

<div class="empty-state">
  <div class="empty-state-header">
    <h3 class="empty-state-title">No matching results</h3>
    <p class="empty-state-description">Try a different search.</p>
  </div>
</div>

Utility customization

Add Bootstrap utilities to the standard component for a different surface or alignment.

Empty

No matching results

Clear the filters to see all items.

<div class="empty-state border-0 bg-body-tertiary text-start align-items-start">
  <div class="empty-state-header">
    <h3 class="empty-state-title">No matching results</h3>
    <p class="empty-state-description">Clear the filters to see all items.</p>
  </div>
  <div class="empty-state-actions">
    <button class="btn btn-outline-secondary" type="button">Clear filters</button>
  </div>
</div>

RTL

The same quiet composition follows the native reading direction.

لا توجد عناصر بعد

أنشئ أول عنصر للبدء.

<div class="w-100" dir="rtl">
  <div class="empty-state">
    <div class="empty-state-header">
      <div class="empty-state-icon">
        <i class="lucide lucide-folder" data-icon="inline-start" aria-hidden="true"></i>
      </div>
      <h3 class="empty-state-title">لا توجد عناصر بعد</h3>
      <p class="empty-state-description">أنشئ أول عنصر للبدء.</p>
    </div>
    <div class="empty-state-actions">
      <button class="btn btn-outline-secondary" type="button">إنشاء عنصر</button>
    </div>
  </div>
</div>

עדיין אין פריטים

צרו פריט ראשון כדי להתחיל.

<div class="w-100" dir="rtl">
  <div class="empty-state">
    <div class="empty-state-header">
      <div class="empty-state-icon">
        <i class="lucide lucide-folder" data-icon="inline-start" aria-hidden="true"></i>
      </div>
      <h3 class="empty-state-title">עדיין אין פריטים</h3>
      <p class="empty-state-description">צרו פריט ראשון כדי להתחיל.</p>
    </div>
    <div class="empty-state-actions">
      <button class="btn btn-outline-secondary" type="button">יצירת פריט</button>
    </div>
  </div>
</div>

No items yet

Create your first item to get started.

<div class="empty-state">
  <div class="empty-state-header">
    <div class="empty-state-icon">
      <i class="lucide lucide-folder" data-icon="inline-start" aria-hidden="true"></i>
    </div>
    <h3 class="empty-state-title">No items yet</h3>
    <p class="empty-state-description">Create your first item to get started.</p>
  </div>
  <div class="empty-state-actions">
    <button class="btn btn-outline-secondary" type="button">Create item</button>
  </div>
</div>

Component reference

Status
Ready
Runtime
native HTML/CSS
Markup
Moo UI documented extension
Reference

Empty is a Moo-owned static component. Its surface uses Bootstrap's shared border, radius and theme tokens; utility overrides follow the Bootstrap border documentation.

Its visual structure is informed by the shadcn/ui Empty reference.

Settings

Theme
Choose how Moo UI looks on this device.
Sidebar
Choose how the sidebar sits on the page.
Theme Builder
Tune catalog tokens and chart colors for this browser.
Base color
Theme color
Chart color
Heading font
Body font
Radius
Direction
Choose the reading direction. RTL flips the layout live.
Reset

Restore the default appearance.