+
+
+
diff --git a/docs/content/docs/2.components/empty.md b/docs/content/docs/2.components/empty.md
new file mode 100644
index 0000000000..4d68cc3e86
--- /dev/null
+++ b/docs/content/docs/2.components/empty.md
@@ -0,0 +1,199 @@
+---
+title: Empty
+description: 'A component to display an empty state.'
+category: data
+links:
+ - label: GitHub
+ icon: i-simple-icons-github
+ to: https://github.com/nuxt/ui/blob/v4/src/runtime/components/Empty.vue
+navigation.badge: Soon
+---
+
+## Usage
+
+::code-preview
+
+:::u-empty
+---
+icon: i-lucide-file
+title: No projects found
+description: It looks like you haven't added any projects. Create one to get started.
+actions:
+ - icon: i-lucide-plus
+ label: Create new
+ - icon: i-lucide-refresh-cw
+ label: Refresh
+ color: neutral
+ variant: subtle
+---
+:::
+
+::
+
+### Title
+
+Use the `title` prop to set the title of the empty state.
+
+::component-code
+---
+props:
+ title: No projects found
+---
+::
+
+### Description
+
+Use the `description` prop to set the description of the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - title
+props:
+ title: No projects found
+ description: It looks like you haven't added any projects. Create one to get started.
+---
+::
+
+### Icon
+
+Use the `icon` prop to set the icon of the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - title
+ - description
+props:
+ icon: i-lucide-file
+ title: No projects found
+ description: It looks like you haven't added any projects. Create one to get started.
+---
+::
+
+### Avatar
+
+Use the `avatar` prop to set the avatar of the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - icon
+ - title
+ - description
+props:
+ avatar.src: 'https://github.com/nuxt.png'
+ title: No projects found
+ description: It looks like you haven't added any projects. Create one to get started.
+---
+::
+
+### Actions
+
+Use the `actions` prop to add some [Button](/docs/components/button) actions to the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - icon
+ - title
+ - description
+ - actions
+props:
+ icon: i-lucide-file
+ title: No projects found
+ description: It looks like you haven't added any projects. Create one to get started.
+ actions:
+ - icon: i-lucide-plus
+ label: Create new
+ - icon: i-lucide-refresh-cw
+ label: Refresh
+ color: neutral
+ variant: subtle
+---
+::
+
+### Variant
+
+Use the `variant` prop to change the variant of the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - icon
+ - title
+ - description
+ - actions
+props:
+ variant: naked
+ icon: i-lucide-bell
+ title: No notifications
+ description: You're all caught up. New notifications will appear here.
+ actions:
+ - icon: i-lucide-refresh-cw
+ label: Refresh
+ color: neutral
+ variant: subtle
+---
+::
+
+### Size
+
+Use the `size` prop to change the size of the empty state.
+
+::component-code
+---
+prettier: true
+ignore:
+ - icon
+ - title
+ - description
+ - actions
+props:
+ size: xl
+ icon: i-lucide-bell
+ title: No notifications
+ description: You're all caught up. New notifications will appear here.
+ actions:
+ - icon: i-lucide-refresh-cw
+ label: Refresh
+ color: neutral
+ variant: subtle
+---
+::
+
+## Examples
+
+### With slots
+
+Use the available slots to create a more complex empty state.
+
+::component-example
+---
+collapse: true
+name: 'empty-slots-example'
+---
+::
+
+## API
+
+### Props
+
+:component-props
+
+### Slots
+
+:component-slots
+
+## Theme
+
+:component-theme
+
+## Changelog
+
+:component-changelog
diff --git a/docs/content/docs/2.components/form.md b/docs/content/docs/2.components/form.md
index 7f361980ee..626fd5dbf3 100644
--- a/docs/content/docs/2.components/form.md
+++ b/docs/content/docs/2.components/form.md
@@ -159,7 +159,7 @@ props:
Use the `nested` prop to nest multiple Form components and link their validation functions. In this case, validating the parent form will automatically validate all the other forms inside it.
-Nested forms directly inherit their parent's state, so you don’t need to define a separate state for them. You can use the `name` prop to target a nested attribute within the parent's state.
+Nested forms directly inherit their parent's state, so you don't need to define a separate state for them. You can use the `name` prop to target a nested attribute within the parent's state.
It can be used to dynamically add fields based on user's input:
diff --git a/docs/public/components/dark/empty.png b/docs/public/components/dark/empty.png
new file mode 100644
index 0000000000..058aab93ec
Binary files /dev/null and b/docs/public/components/dark/empty.png differ
diff --git a/docs/public/components/light/empty.png b/docs/public/components/light/empty.png
new file mode 100644
index 0000000000..776bc0e90a
Binary files /dev/null and b/docs/public/components/light/empty.png differ
diff --git a/package.json b/package.json
index b4ff50e1ce..9950f4b3f7 100644
--- a/package.json
+++ b/package.json
@@ -106,8 +106,8 @@
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"typecheck": "vue-tsc --noEmit && nuxt typecheck playgrounds/nuxt && nuxt typecheck docs && cd playgrounds/vue && vue-tsc --noEmit",
- "test": "vitest",
- "test:vue": "vitest -c vitest.vue.config.ts",
+ "test": "TZ=UTC vitest",
+ "test:vue": "TZ=UTC vitest -c vitest.vue.config.ts",
"release": "release-it"
},
"dependencies": {
diff --git a/playgrounds/nuxt/app/composables/useNavigation.ts b/playgrounds/nuxt/app/composables/useNavigation.ts
index b09aed56e9..6248b38e9c 100644
--- a/playgrounds/nuxt/app/composables/useNavigation.ts
+++ b/playgrounds/nuxt/app/composables/useNavigation.ts
@@ -27,6 +27,7 @@ const components = [
'context-menu',
'drawer',
'dropdown-menu',
+ 'empty',
'error',
'field-group',
'file-upload',
diff --git a/playgrounds/nuxt/app/pages/components/empty.vue b/playgrounds/nuxt/app/pages/components/empty.vue
new file mode 100644
index 0000000000..128fe26b05
--- /dev/null
+++ b/playgrounds/nuxt/app/pages/components/empty.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/runtime/components/Empty.vue b/src/runtime/components/Empty.vue
new file mode 100644
index 0000000000..fde3dea1a1
--- /dev/null
+++ b/src/runtime/components/Empty.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+