Raccourci clavier : Ctrl + K
Commencer

État vide

VEmptyState indique qu’il n’y a encore rien à afficher et propose quoi faire.

Utilisation

vue

No invoices yet

Invoices you create or import appear here.
<script setup lang="ts">
import { VButton, VEmptyState } from 'vectis-ui'
import { description } from 'vectis-ui/icons'
</script>

<template>
  <VEmptyState
    :icon="description"
    title="No invoices yet"
    description="Invoices you create or import appear here."
  >
    <template #actions>
      <VButton>Create an invoice</VButton>
      <VButton variant="outline" tone="neutral">Import</VButton>
    </template>
  </VEmptyState>
</template>

Exemples

Tailles

size ajuste la pastille, les espacements et le titre : sm pour un panneau ou une liste, lg pour une page entière.

vue

Nothing in this folder

The scale follows the space it fills.

No messages

The scale follows the space it fills.

Your workspace is empty

The scale follows the space it fills.
<script setup lang="ts">
import { VEmptyState } from 'vectis-ui'
import type { EmptyStateSize } from 'vectis-ui'
import { inbox } from 'vectis-ui/icons'

const SIZES: { size: EmptyStateSize; title: string }[] = [
  { size: 'sm', title: 'Nothing in this folder' },
  { size: 'md', title: 'No messages' },
  { size: 'lg', title: 'Your workspace is empty' },
]
</script>

<template>
  <div class="stack">
    <VEmptyState
      v-for="item in SIZES"
      :key="item.size"
      class="frame"
      :size="item.size"
      :icon="inbox"
      :title="item.title"
      description="The scale follows the space it fills."
    />
  </div>
</template>

<style scoped>
.stack {
  display: grid;
  gap: var(--vectis-space-4);
}

.frame {
  border: 1px dashed var(--vectis-color-border);
  border-radius: var(--vectis-radius-surface);
}
</style>

Contenu et niveau de titre

Le slot par défaut remplace description par un texte contenant des liens. headingLevel rend le titre en titre de section sans changer son apparence.

vue

You are all caught up

New mentions and replies show up here. Choose what you hear about in your notification settings.
<script setup lang="ts">
import { VEmptyState } from 'vectis-ui'
import { notifications } from 'vectis-ui/icons'
</script>

<template>
  <VEmptyState :icon="notifications" title="You are all caught up" :heading-level="2">
    New mentions and replies show up here. Choose what you hear about in your
    <a href="#content">notification settings</a>.
  </VEmptyState>
</template>

Dans les tableaux et les combobox

VDataTable et VCombobox affichent un petit état vide titré par leur emptyText. Leur slot empty le remplace, par exemple par un état vide avec des actions.

vue
NameStatus

No orders

NameStatus

No orders yet

Orders placed by your customers appear here.
<script setup lang="ts">
import { ref } from 'vue'
import { VButton, VCombobox, VDataTable, VEmptyState } from 'vectis-ui'
import { inbox } from 'vectis-ui/icons'

const COLUMNS = [
  { key: 'name', label: 'Name' },
  { key: 'status', label: 'Status' },
]

const OPTIONS = [
  { value: 'fr', label: 'France' },
  { value: 'de', label: 'Germany' },
]

const country = ref('')
</script>

<template>
  <div class="stack">
    <VDataTable :columns="COLUMNS" :rows="[]" empty-text="No orders" />

    <VDataTable :columns="COLUMNS" :rows="[]">
      <template #empty>
        <VEmptyState
          size="sm"
          :icon="inbox"
          title="No orders yet"
          description="Orders placed by your customers appear here."
        >
          <template #actions>
            <VButton size="sm">Create an order</VButton>
          </template>
        </VEmptyState>
      </template>
    </VDataTable>

    <VCombobox
      v-model="country"
      class="combobox"
      :options="OPTIONS"
      label="Country"
      empty-text="No country found"
    />
  </div>
</template>

<style scoped>
.stack {
  display: grid;
  gap: var(--vectis-space-6);
}

.combobox {
  max-inline-size: 18rem;
}
</style>

API

Props

PropTypeDéfaut
titlestringaucune
Ce qui est vide, en quelques mots.
descriptionstringaucune
Pourquoi, ou que faire ensuite. Remplacée par le slot par défaut.
iconIconSourceaucune
Icône dessinée dans une pastille ronde. Remplacée par le slot media.
sizeEmptyStateSize'sm' | 'md' | 'lg''md'
Échelle du bloc.
headingLevelEmptyStateHeadingLevel1 | 2 | 3 | 4 | 5 | 6aucune
Rend le titre en h1 à h6. Sans elle, le titre est un paragraphe.

Slots

SlotType
default{}
Description avec mise en forme ou liens.
media{}
Illustration qui remplace la pastille d’icône.
actions{}
Boutons ou liens pour sortir de l’état vide.

Types

Types utilisés dans les tables d’API. Importez les types exportés depuis vectis-ui.

export interface BuiltinIcon {
  name: string
  paths: readonly [string] | readonly [string, string]
}
export type IconRender =
  | { path: string; viewBox?: string }
  | { component: Component; props?: Record<string, unknown> }
  | { src: string }
  | { text: string; class?: string }
  | { class: string }
export type IconSource = string | BuiltinIcon | IconRender

Variables CSS

TokenValeur
--vectis-control-size-empty-state-media-sm2.5rem
--vectis-control-size-empty-state-media-md3rem
--vectis-control-size-empty-state-media-lg4rem
--vectis-control-size-empty-state-text-max28rem