
Vibe Coding a Collaborative Editor with Comment Support with Nuxt UI and Jazz
VueSchool
A new Splitter component lets you build layouts with resizable panels separated by draggable handles, with min/max sizes, collapsible panels, nesting and vertical orientation:
<script setup lang="ts">
import type { SplitterItem } from '@nuxt/ui'
const items: SplitterItem[] = [
{ slot: 'sidebar', minSize: 15, maxSize: 40, defaultSize: 25 },
{ slot: 'main', defaultSize: 75 }
]
</script>
<template>
<USplitter id="layout" :items="items" class="h-96">
<template #sidebar>
Sidebar
</template>
<template #main>
Main
</template>
</USplitter>
</template>
[!TIP]
Set theidprop when rendering on the server so ids match on hydration, andauto-save-idto persist the layout tolocalStorage.
A new ProgressGroup component displays multiple values as segments of a single progress bar, with a legend listing each item. Items take any theme color or a CSS color, and the status prop shows the total:
<script setup lang="ts">
import type { ProgressGroupItem } from '@nuxt/ui'
const items: ProgressGroupItem[] = [
{ label: 'System', value: 24, color: 'neutral', icon: 'i-lucide-cog' },
{ label: 'Apps', value: 8, color: 'error', icon: 'i-lucide-app-window' },
{ label: 'Multimedia', value: 42, color: 'success', icon: 'i-lucide-film' }
]
</script>
<template>
<UProgressGroup :items="items" :max="128" status />
</template>
Animations and movement transitions now all run on --ease-out, exits included. Override the token in your @theme to retime the whole library, see the Motion section:
@theme {
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
}
[!NOTE]
prefers-reduced-motionnow covers overlays too, they fade in place, and movement transitions like theTabsindicator stop.
The @nuxt/ui/vite plugin now supports experimental.componentDetection like the Nuxt module. It scans your source and only generates the theme CSS for the components you use:
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
ui({
experimental: {
componentDetection: true
}
})
]
})
[!NOTE]
Pass an array of component names instead to include components rendered with<component :is>that can't be detected.
icon in items (#6726) (07f3fe8)experimental.componentDetection (#6731) (3a568b5)scrollable (#6786) (5afbd5c)base in applyUnstyled (#6825) (3e89ea7)class from props with the component class (#6842) (731ff26)prefers-reduced-motion (#6742) (735b264)Full Changelog: https://github.com/nuxt/ui/compare/v4.10.0...v4.11.0
