-
-
-
+
diff --git a/docs/app/components/home/HomeContributors.vue b/docs/app/components/home/HomeContributors.vue
new file mode 100644
index 00000000..6389d0fa
--- /dev/null
+++ b/docs/app/components/home/HomeContributors.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/app/composables/useLinks.ts b/docs/app/composables/useLinks.ts
index 390b20da..fe5fcbb4 100644
--- a/docs/app/composables/useLinks.ts
+++ b/docs/app/composables/useLinks.ts
@@ -12,23 +12,17 @@ export function useLinks() {
to: '/components',
active: route.path === '/components',
children: [{
- label: 'Layout',
- to: '/components#layout',
- description: 'Container, grid, divider and responsive layout.',
- icon: 'i-lucide-layout',
- active: route.fullPath === '/components#layout'
+ label: 'Element',
+ to: '/components#element',
+ description: 'Button, badge, icon, alert, and small UI elements.',
+ icon: 'i-lucide-mouse-pointer',
+ active: route.fullPath === '/components#element'
}, {
label: 'Form',
to: '/components#form',
description: 'Input, select, checkbox, radio and form validation.',
icon: 'i-lucide-text-cursor-input',
active: route.fullPath === '/components#form'
- }, {
- label: 'Element',
- to: '/components#element',
- description: 'Button, badge, icon, alert, and small UI elements.',
- icon: 'i-lucide-mouse-pointer',
- active: route.fullPath === '/components#element'
}, {
label: 'Data',
to: '/components#data',
@@ -47,6 +41,12 @@ export function useLinks() {
description: 'Modal, tooltip, dialog and popover.',
icon: 'i-lucide-layers',
active: route.fullPath === '/components#overlay'
+ }, {
+ label: 'Layout',
+ to: '/components#layout',
+ description: 'Container, grid, divider and responsive layout.',
+ icon: 'i-lucide-layout',
+ active: route.fullPath === '/components#layout'
}]
}, {
label: 'Pro',
diff --git a/docs/app/layouts/default.vue b/docs/app/layouts/default.vue
index 56a8b72d..ba4672f5 100644
--- a/docs/app/layouts/default.vue
+++ b/docs/app/layouts/default.vue
@@ -1,5 +1,3 @@
-
-
-
+
diff --git a/docs/app/pages/.index.yml b/docs/app/pages/.index.yml
new file mode 100644
index 00000000..ac32c881
--- /dev/null
+++ b/docs/app/pages/.index.yml
@@ -0,0 +1,172 @@
+title: The Intuitive Vue UI Library
+description: Create beautiful, responsive & accessible web apps quickly with Vue or Nuxt. Nuxt UI is an open-source UI library of 50+ customizable components built with Tailwind CSS and Reka UI.
+hero:
+ title: The Intuitive Vue UI Library
+ description: Create beautiful, responsive & accessible web apps quickly with Vue or Nuxt. Nuxt UI is an open-source UI library of 50+ customizable components built with Tailwind CSS and Reka UI.
+ links:
+ - label: Get started
+ to: /getting-started/installation
+ - label: Explore components
+ to: /components
+ variant: outline
+ color: neutral
+ trailingIcon: i-lucide-arrow-right
+ features:
+ - icon: i-logos-tailwindcss-icon
+ title: Styled with Tailwind CSS v4
+ description: Beautifully styled by default, overwrite any style you want.
+ - icon: i-custom-reka-ui
+ title: Accessible with Reka UI
+ description: Robust accessibility out of the box.
+ - icon: i-logos-typescript-icon
+ title: Type-safe with TypeScript
+ description: Auto-complete and type safety for all components.
+features:
+ - title: Build for the modern web
+ description: Powered by Tailwind CSS v4 and Reka UI for top performance and accessibility.
+ icon: i-lucide-rocket
+ to: /getting-started
+ - title: Flexible design system
+ description: Beautiful by default and easily customizable with design tokens to your brand.
+ icon: i-lucide-swatch-book
+ to: /getting-started/theme#design-system
+ - title: Internationalization (i18n)
+ description: Nuxt UI is translated into 30+ languages, works well with i18n and multi-directional support (LTR/RTL).
+ icon: i-lucide-globe
+ to: /getting-started/i18n/nuxt
+ - title: Easy font customization
+ description: Performance-optimized fonts with first-class @nuxt/fonts integration.
+ icon: i-lucide-a-large-small
+ to: /getting-started/fonts
+ - title: Large icons sets
+ description: Access to over 200,000 customizable icons from Iconify, seamlessly integrated with Iconify.
+ icon: i-lucide-smile
+ to: /getting-started/icons
+ - title: Light & Dark
+ description: Dark mode-ready components, seamless integration with @nuxtjs/color-mode.
+ icon: i-lucide-sun-moon
+ to: /getting-started/color-mode/nuxt
+design_system:
+ title: Flexible design system
+ description: Build your next project faster with Nuxt UI's comprehensive design system. Featuring semantic color aliases, comprehensive design tokens, and automatic light/dark mode support for accessible components out of the box.
+ links:
+ - label: Learn more
+ to: /getting-started/theme#design-system
+ variant: outline
+ color: neutral
+ trailingIcon: i-lucide-arrow-right
+ features:
+ - title: Color aliases via AppConfig
+ description: Configure 7 semantic color aliases (primary, secondary, success, info, warning, error, neutral) at runtime through AppConfig without rebuilding your application
+ icon: i-lucide-palette
+ - title: Comprehensive design tokens
+ description: Extensive set of neutral palette tokens for text, backgrounds, and borders with automatic light/dark mode support via CSS variables like --ui-text, --ui-bg, --ui-border
+ icon: i-lucide-component
+ - title: Global style variables
+ description: Customize global styling with --ui-radius for consistent border rounding and --ui-container for layout widths across your entire application
+ icon: i-lucide-ruler
+ code: |
+ ::code-group
+
+ ```ts [app.config.ts]
+ export default defineAppConfig({
+ ui: {
+ colors: {
+ primary: 'indigo',
+ secondary: 'pink',
+ success: 'green',
+ info: 'blue',
+ warning: 'orange',
+ error: 'red',
+ neutral: 'zinc'
+ }
+ }
+ })
+
+
+ ```
+
+ ```css [main.css]
+ @import "tailwindcss" theme(static);
+ @import "@nuxt/ui";
+
+ :root {
+ --ui-radius: var(--radius-sm);
+ --ui-container: 90rem;
+ --ui-bg: var(--ui-color-neutral-50);
+ --ui-text: var(--ui-color-neutral-900);
+ }
+ .dark {
+ --ui-bg: var(--ui-color-neutral-950);
+ --ui-border: var(--ui-color-neutral-900);
+ }
+ ```
+
+ ::
+component_customization:
+ title: Powerful component customization
+ description: Nuxt UI leverages [Tailwind Variants](https://www.tailwind-variants.org/) to provide a powerful, maintainable system for managing component styles and intelligently merging Tailwind CSS classes without conflicts.
+ links:
+ - label: Learn more
+ to: /getting-started/theme#customize-theme
+ variant: outline
+ color: neutral
+ trailingIcon: i-lucide-arrow-right
+ features:
+ - title: Powerful slot and variant system
+ description: Customize component parts with slots and apply different styles based on props, creating consistent UI patterns with granular control over styling
+ icon: i-lucide-layout-grid
+ - title: Global theme with AppConfig
+ description: Configure component styles project-wide with a centralized AppConfig that maintains consistency across your application without rebuilding
+ icon: i-lucide-settings-2
+ - title: Per-component customization
+ description: Fine-tune individual components with the ui prop for slot-specific styling and class prop for root element overrides, providing maximum flexibility
+ icon: i-lucide-component
+ code: |
+ ::code-group
+
+ ```ts [app.config.ts]
+ export default defineAppConfig({
+ ui: {
+ button: {
+ slots: {
+ base: 'group font-bold',
+ trailingIcon: 'group-data-[state=open]:rotate-180 transition-transform duration-200'
+ },
+ defaultVariants: {
+ color: 'neutral',
+ variant: 'subtle'
+ }
+ }
+ }
+ })
+ ```
+
+ ```vue [Collapsible.vue]
+
+
+
+
+
+ ```
+
+ ::
+community:
+ title: Nuxt UI open-source community
+ description: Join our thriving community to contribute code, report issues, suggest features, or help with documentation. Every contribution makes Nuxt UI better for everyone.
+ links:
+ - label: Star on GitHub
+ color: neutral
+ variant: outline
+ to: https://github.com/nuxt/ui
+ target: _blank
+ icon: i-lucide-star
diff --git a/docs/app/pages/components.vue b/docs/app/pages/components.vue
index b2d426e2..2d6d8be4 100644
--- a/docs/app/pages/components.vue
+++ b/docs/app/pages/components.vue
@@ -15,7 +15,7 @@ useSeoMeta({
ogImage: joinURL(url, '/og-image.png')
})
-const { data: components } = await useAsyncData('components', () => {
+const { data: components } = await useAsyncData('all-components', () => {
return queryCollection('content')
.where('path', 'LIKE', '/components/%')
.where('extension', '=', 'md')
@@ -31,17 +31,13 @@ const componentsPerCategory = computed(() => {
})
const categories = [{
- id: 'layout',
- title: 'Layout',
- description: 'Structural components for organizing content, including containers, grids, dividers, and responsive layout systems.'
+ id: 'element',
+ title: 'Element',
+ description: 'Core UI building blocks like buttons, badges, icons, avatars, and other fundamental interface elements.'
}, {
id: 'form',
title: 'Form',
description: 'Interactive form elements including inputs, selects, checkboxes, radio buttons, and advanced form validation components.'
-}, {
- id: 'element',
- title: 'Element',
- description: 'Core UI building blocks like buttons, badges, icons, avatars, and other fundamental interface elements.'
}, {
id: 'data',
title: 'Data',
@@ -54,6 +50,10 @@ const categories = [{
id: 'overlay',
title: 'Overlay',
description: 'Floating UI elements like modals, dialogs, tooltips, popovers, and other components that overlay the main content.'
+}, {
+ id: 'layout',
+ title: 'Layout',
+ description: 'Structural components for organizing content, including containers, grids, dividers, and responsive layout systems.'
}]
const { y } = useWindowScroll()
@@ -81,7 +81,10 @@ onMounted(() => {
orientation="vertical"
:ui="{ title: 'text-balance', container: 'relative' }"
>
-
+
+
+
+
{
Build beautiful UI with {{ components!.length }}+ powerful components
+
{
size="xl"
/>
-
-
+
+
-
+
+
diff --git a/docs/app/pages/index.vue b/docs/app/pages/index.vue
new file mode 100644
index 00000000..9a82a363
--- /dev/null
+++ b/docs/app/pages/index.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+ The Intuitive Vue UI Library
+
+
+ {{ page.hero.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ feature.title }}
+
+
+
+ {{ feature.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ format(module?.stats?.downloads ?? 0) }}+
+
+ monthly downloads
+
+
+
+
+ {{ format(module?.stats?.stars ?? 0) }}+
+
+ GitHub stars
+
+
+
+
+ 175+
+
+ Contributors
+
+
+
+
+
+
+
+
+
+
+ Build faster with Nuxt UI Pro .
+
+
+ A collection of premium Vue components, composables and utils built on top of Nuxt UI. Focused on structure and layout, these responsive components are designed to be the perfect building blocks for your next idea .
+
+
+
+ Discover Nuxt UI Pro
+
+
+ Explore templates
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/app/pages/pro/.content/templates.yml b/docs/app/pages/pro/.content/templates.yml
index 0c2d6a69..eddf7c67 100644
--- a/docs/app/pages/pro/.content/templates.yml
+++ b/docs/app/pages/pro/.content/templates.yml
@@ -30,7 +30,7 @@ templates:
- title: Resizable multi-column layout
icon: i-lucide-columns-3
links:
- - label: Live Preview
+ - label: Preview
to: https://dashboard-template.nuxt.dev
target: _blank
leadingIcon: i-logos-nuxt-icon
@@ -42,7 +42,7 @@ templates:
icon: i-simple-icons-github
color: neutral
variant: outline
- - label: Live Preview
+ - label: Preview
to: https://vue-dashboard-template.nuxt.dev
target: _blank
leadingIcon: i-logos-vue
@@ -68,7 +68,7 @@ templates:
- title: Authentication pages (login, register)
icon: i-lucide-user-round-check
links:
- - label: Live Preview
+ - label: Preview
to: https://saas-template.nuxt.dev
target: _blank
leadingIcon: i-logos-nuxt-icon
@@ -94,7 +94,7 @@ templates:
- title: Write content in YAML
icon: i-simple-icons-yaml
links:
- - label: Live Preview
+ - label: Preview
to: https://landing-template.nuxt.dev
target: _blank
leadingIcon: i-logos-nuxt-icon
@@ -120,7 +120,7 @@ templates:
- title: Full-text search out of the box
icon: i-lucide-search
links:
- - label: Live Preview
+ - label: Preview
to: https://docs-template.nuxt.dev
target: _blank
leadingIcon: i-logos-nuxt-icon
@@ -144,7 +144,7 @@ templates:
- title: Nuxt 4 Compatibility Enabled
icon: i-simple-icons-nuxtdotjs
links:
- - label: Live Preview
+ - label: Preview
to: https://ui-pro-starter.nuxt.dev
target: _blank
leadingIcon: i-logos-nuxt-icon
@@ -156,7 +156,7 @@ templates:
variant: outline
icon: i-simple-icons-github
color: neutral
- - label: Live Preview
+ - label: Preview
to: https://ui-pro-starter-vue.nuxt.dev
target: _blank
leadingIcon: i-logos-vue
diff --git a/docs/app/pages/pro/activate.vue b/docs/app/pages/pro/activate.vue
index d0b9b2fb..6d1ab316 100644
--- a/docs/app/pages/pro/activate.vue
+++ b/docs/app/pages/pro/activate.vue
@@ -70,14 +70,12 @@ onMounted(() => {
-
-
-
-
+
+
-
-
+
+
{
-
-
- If you purchased a license with multiple seats, activate the license key for each member of your team.
-
-
-
+
+
+
+
+ If you purchased a license with multiple seats, activate the license key for each member of your team.
+
+
diff --git a/docs/app/pages/pro/index.vue b/docs/app/pages/pro/index.vue
index 45278c13..b0e9dd72 100644
--- a/docs/app/pages/pro/index.vue
+++ b/docs/app/pages/pro/index.vue
@@ -26,15 +26,14 @@ useSeoMeta({
}"
>
-
+
-
-
-
-
+
+
+
@@ -84,7 +83,7 @@ useSeoMeta({
>
-
+
@@ -120,10 +119,10 @@ useSeoMeta({
class="rounded-none border-t border-(--ui-border) bg-gradient-to-b from-(--ui-bg-muted) to-(--ui-bg)"
>
-
+
-
+
+
-
-
-
+
+
-
-
+
+
-
-
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
+
diff --git a/docs/nuxt.config.ts b/docs/nuxt.config.ts
index 8b3bdc76..afdea9be 100644
--- a/docs/nuxt.config.ts
+++ b/docs/nuxt.config.ts
@@ -85,7 +85,6 @@ export default defineNuxtConfig({
},
routeRules: {
- '/': { redirect: '/getting-started', prerender: false },
'/getting-started/installation': { redirect: '/getting-started/installation/nuxt', prerender: false },
'/getting-started/icons': { redirect: '/getting-started/icons/nuxt', prerender: false },
'/getting-started/color-mode': { redirect: '/getting-started/color-mode/nuxt', prerender: false },
diff --git a/src/runtime/components/Avatar.vue b/src/runtime/components/Avatar.vue
index 35860c6a..5e8d794c 100644
--- a/src/runtime/components/Avatar.vue
+++ b/src/runtime/components/Avatar.vue
@@ -29,6 +29,7 @@ export interface AvatarProps {
*/
size?: AvatarVariants['size']
class?: any
+ style?: any
ui?: Partial
}
@@ -83,7 +84,7 @@ function onError() {
-
+