Releases: nuxt/ui
v2.14.0
Read our updated documentation on https://ui.nuxt.com.
🚀 Features
- Carousel: expose methods to allow autoplay (41ecd2a), closes #1300
- Divider: handle
size
prop (#1307) (cbeede6) - Form: use nuxt
useId
to bind input labels (#1211) (27c71fa) - Input: handle type
file
(946a39c), closes #563 - Modal: open programmatically (#1319) (6f29c62)
- Table: display progress bar when
loading
(#1362) (3fe3521) - Tabs: add
unmount
prop asfalse
by default (843a978), closes #663 - Textarea: add
maxrows
prop to restrict autoresize (#1302) (f643e7b)
🐛 Bug Fixes
- Alert: remove
required
title to prevent warning when using slot (e545b6f) - Card: prevent
body
padding without default slot (f682905) - components: hydration attribute mismatch with vue
3.4
(#1199) (10db144) - Form: improve
validate
path type (#1370) (5266591) - Form: return false when silent validation fails (#1371) (d4b6147)
- Link: check
disabled
prop before navigating (#1321) (ac42ec1) - Meter: missing import of
Icon
component (f8b296f), closes #1328 - module: prevent tailwind warn with
bun
(bb40c31), closes #809 - module: put back
all
option in icons plugin (412cd75), closes #1237 - Notification: remove
required
title to prevent warning when using slot (aa2b1ca) - Progress: prevent
NaN
percent display when indeterminate (a55a08a) - RadioGroup: pass
help
prop to radio children (5a5b284), closes #1313 - utils: prevent merge of
popper
key (9f35297), closes #1393
👋 New Contributors
- @JakeIsMeh made their first contribution in #1297
- @pedraal made their first contribution in #1302
- @solamichealolawale made their first contribution in #1321
- @noook made their first contribution in #1319
- @rvdriest made their first contribution in #1340
- @dalirnet made their first contribution in #1370
Full Changelog: v2.13.0...v2.14.0
v2.13.0
Read our updated documentation on https://ui.nuxt.com.
✨ Highlights
Carousel component
The Carousel
component allows you to display images or content in a scrollable area and comes with drag to scroll support, navigation buttons, indicators, etc.
HorizontalNavigation component
Much like the VerticalNavigation, the HorizontalNavigation
component comes in handy when you need to display a list of horizontal links.
🎨 Design consistency
We've updated the Breadcrumb
, CommandPalette
, Dropdown
, InputMenu
, SelectMenu
and VerticalNavigation
components config to be consistent with the Button
default sm
size.
If you take a look at this example with many components, you can see that everything is now perfectly aligned and has the same size:
<template>
<UContainer class="min-h-screen flex items-center">
<div class="w-80 space-y-2">
<UCommandPalette :groups="[{ key: 'links', commands: links }]" :searchable="false" class="-mx-2" />
<UVerticalNavigation :links="links" />
<UHorizontalNavigation :links="links" />
<UInput :icon="selected.icon" :options="links" :placeholder="selected.label" />
<UInputMenu v-model="selected" :icon="selected.icon" :options="links" />
<USelect :icon="selected.icon" :options="links" :placeholder="selected.label" />
<USelectMenu v-model="selected" :icon="selected.icon" :options="links" />
<UDropdown :items="[links]" :popper="{ placement: 'bottom-start' }" class="w-full">
<UButton color="white" :icon="selected.icon" :label="selected.label" class="w-full" />
</UDropdown>
<UBreadcrumb :links="links" class="ml-2.5" />
<UAccordion :items="links" color="gray" variant="ghost" />
</div>
</UContainer>
</template>
<script setup>
const links = [{
label: 'Installation',
icon: 'i-heroicons-home',
to: '/getting-started/installation'
}, {
label: 'Vertical Navigation',
icon: 'i-heroicons-chart-bar',
to: '/navigation/vertical-navigation'
}, {
label: 'Command Palette',
icon: 'i-heroicons-command-line',
to: '/navigation/command-palette'
}]
const selected = ref(links[0])
</script>
It is not shown by the screenshot but labels and icons inside the Dropdown
/ InputMenu
/ SelectMenu
menus now also match.
Here's the list of commits if you want to know exactly what changed:
There are still some improvements left to reflect the
size
prop on the actual menus as mentioned in #446.
📖 Docs revamp
Since the first release of @nuxt/ui
and the launch of @nuxt/ui-pro
, more and more components have been added to the docs. There are now at least 90+ components if you combine the two packages.
To ease the navigation between all these components, we removed all the categories like Elements
, Forms
, Landing
, etc. for both @nuxt/ui
and @nuxt/ui-pro
to group everything under Components
. This should remove a lot of clicks to find the component you're looking for.
We also removed the Pro
popover in the header to access Nuxt UI Pro, you can now use the Docs
and Pro
links instead to switch between the two or use the top left dropdown to switch between @nuxt/ui
, @nuxt/ui-edge
and @nuxt/ui-pro
packages.
The Nuxt UI Pro landing page has been merged at the bottom of https://ui.nuxt.com, and new Pricing and Templates pages are now available in the header.
🚀 Features
- Carousel: new component (#927) (f37b043)
- Dropdown: default delay from config (c4a1c04)
- Form: handle multiple paths in
validate
(#1273) (20ac4b3) - HorizontalNavigation: new component (#1279) (b8007ba)
- InputMenu: handle
nullable
prop when clearing input (5e49fb8) - Modal/Slideover: emit
close-prevented
event (#1207) (6faf15b) - module: add option to disable global css styles (#1266) (f96eb5e)
- Popover: default delay from config (7f5711b)
- Tooltip: default delay from config (3400b56)
- VerticalNavigation: use
Badge
component for consistency (3e81eee)
🐛 Bug Fixes
- Breadrumb: handle truncate (5d3a962)
- Link: propagate
active
prop to slot asisActive
(b76e761) - Select: consistent placeholder with input and textarea (2cb41db), closes #1276
- Slideover: handle translate in RTL mode (#1259) (ea58c88)
👋 New Contributors
- @Youhan made their first contribution in #1207
- @FADL285 made their first contribution in #1259
- @Gobler made their first contribution in #927
- @cernymatej made their first contribution in #1266
- @AnthonySendra made their first contribution in #1273
Full Changelog: v2.12.3...v2.13.0
v2.12.3
🐛 Bug Fixes
Full Changelog: v2.12.2...v2.12.3
v2.12.2
v2.12.1
🐛 Bug Fixes
- Button: inherit nuxt link props without breaking
nuxt-component-meta
(d3e19dc), closes #578 - InputMenu: take
option-attribute
into account to display label (1a93791) - Link: prevent
type
bind on<a>
(b0df864) - SelectMenu: take
option-attribute
into account to display label (b9fe74b), closes #1151 - Tooltip: typo in kbd component (4405d32)
👋 New Contributors
- @Speelwolf made their first contribution in #1235
Full Changelog: v2.12.0...v2.12.1
v2.12.0
Read our updated documentation on https://ui.nuxt.com.
✨ Highlights
- New
InputMenu
component
Like the SelectMenu
, it allows you to create an autocomplete input with real-time suggestions.
🚀 Features
- Breadcrumb: handle
labelClass
and mergeiconClass
(f623ec1) - Dropdown: handle
labelClass
and mergeiconClass
(1c9835d), closes #716 - Dropdown: handle manual mode (3844714), closes #1143
- Form: expose
submit
function (#1186) (4a25a12) - InputMenu: new component (#1095) (6d8d82a)
- Pagination: add
disabled
prop (0976833), closes #1189 - SelectMenu: add
empty
slot when no options (5d1919a), closes #1089 - SelectMenu: allow control of search query (f735db0), closes #1174
- SelectMenu: allow creating option despite search (#1080) (0fdc8f7)
- Table: add
sort-mode
prop (56e0c9a), closes #1149 - Table: add custom sort function to columns (#1075) (4f3af6c)
- VerticalNavigation: ability to add dividers (#963) (ffd20b3)
- VerticalNavigation: handle
labelClass
and mergeiconClass
(a79f7c0)
🐛 Bug Fixes
- Alert: always pass a function to actions click events (5d78111), closes #1197
- Card: remove
overflow-hidden
on wrapper (4124406), closes #806 #1034 - config: prevent class merge of
avatar
size (b22bd70) - Dropdown: improve placement with
hover
mode (c6aa421), closes #1179 - Dropdown: merge item
class
(7151b7b), closes #1157 - Form: invalid errors when using
clear
by path (#1165) (97a3975) - Form: memory leak (#1185) (ea2a24b)
- forms: dont disable inputs and selects on
loading
(3258167), closes #1117 - Link: handle
active
override when value is false (83631cc) - Popover: allow manual mode without blocking normal behaviour (3334e2a)
- Popover: improve placement with
hover
mode (bc00f9c), closes #781 - RadioGroup: pass
option.disabled
to children (0c8ab9d), closes #1109 - Table: display nothing instead of error when key is missing (00d0fd5), closes #1173
- Table: respect sort prop updates from parent component (#1208) (c6841d0)
- Toggle: add missing
change
event (4c84839), closes #1113 - useShortcuts: include
contenteditable="plaintext-only"
elements inusingInput
(#1159) (648eec3) - VerticalNavigation: improve accessibility (#948) (29e64ca)
👋 New Contributors
- @jchrobakk made their first contribution in #1141
- @slugcat-dev made their first contribution in #1159
- @nathanjcollins made their first contribution in #1145
- @neilmispelaar made their first contribution in #948
- @akintoluvic made their first contribution in #1181
- @Ragura made their first contribution in #1075
- @ivantopo made their first contribution in #1208
Full Changelog: v2.11.1...v2.12.0
v2.11.1
🐛 Bug Fixes
- Breadcrumb: handle divider in rtl (#1049) (e53cdea)
- CommandPalette: missing right padding on input with close button (ad33b26)
- components: move remaining classes to config (#1039) (e408eab)
- module: prevent class merging on
default
children (f07968a), closes #1076 - Notification: handle dynamic backgrounds (#1063) (1f0f618)
- RadioGroup: props reactivity issues (#1065) (7196d81)
- types: favor
Record<string, any>>
instead ofobject
(4d72a75) - types: improve with strict mode (#1041) (4a9b66a)
- types: workaround for
popper
weak type (5718dfd), closes #644
👋 New Contributors
- @emechpi made their first contribution in #1063
Full Changelog: v2.11.0...v2.11.1
v2.11.0
Read our updated documentation on https://ui.nuxt.com.
✨ Highlights
🛠️ Components
- New
Breadcrumb
component
- New
Chip
component
This component behave exactly like the chip
prop on the Avatar
and is meant to replace it in the next major version. The advantage of having a specific component for this is to be able to use on any component:
⌨️ App Config types
We've introduced prop types with validators in https://github.com/nuxt/ui/releases/tag/v2.9.0 to enable autocomplete. Initially, this feature was compatible only with the default configuration of @nuxt/ui
. Now, autocomplete functionality extends to custom values specified in your app.config.ts
. As an illustration, consider the following definition in app.config.ts
:
export default defineAppConfig({
ui: {
button: {
color: {
custom: {
subtle: '...'
}
}
}
}
})
Autocomplete will now function for the color
and variant
props of the Button
and include your custom values:
🪄 Dynamic Icons
The Icon
component now has a dynamic
prop that will use nuxt-icon instead of the default behaviour with egoist/tailwindcss-icons.
This can be quite useful when using dynamic class names or for icons coming from a database for example.
This behaviour can be changed globally in your app.config.ts
through ui.icons.dynamic
:
export default defineAppConfig({
ui: {
primary: 'green',
gray: 'slate',
icons: {
dynamic: true
}
}
})
🎨 Custom Icons
The ui.icons
option in your nuxt.config.ts
can now be an object to completely override the @egoist/tailwindcss-icons
plugin, this can be quite useful if you want to use a custom icon collection for example:
import { getIconCollections } from '@egoist/tailwindcss-icons'
export default defineNuxtConfig({
ui: {
icons: {
// might solve stretch bug on generate, see https://github.com/egoist/tailwindcss-icons/issues/23
extraProperties: {
'-webkit-mask-size': 'contain',
'-webkit-mask-position': 'center'
},
collections: {
foo: {
icons: {
'arrow-left': {
// svg body
body: '<path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M10.5 19.5L3 12m0 0l7.5-7.5M3 12h18" />',
// svg width and height, optional
width: 24,
height: 24
}
}
},
...getIconCollections(['heroicons', 'simple-icons'])
}
}
}
})
🛟 Tailwind CSS bundle
There is an open issue #877 to reduce the final bundle size as Tailwind CSS generate classes for all the components at the moment. As a first step to solve this, we've splitted the config of each component into separate files in #930 so you can have at least the option to exclude files manually in your tailwind.config.ts
:
import { resolve } from 'pathe'
import type { Config } from 'tailwindcss'
export default <Partial<Config>>{
content: {
files: [
'!' + resolve('node_modules/@nuxt/ui/dist/runtime/ui.config/data/table.mjs'),
'!' + resolve('node_modules/@nuxt/ui/dist/runtime/ui.config/overlays/modal.mjs')
]
}
}
🚀 Features
- Breadcrumb: new component (#506) (a35bfc7)
- Checkbox: config
label
,required
andhelp
size (a1b38c4) - Chip: new component (#886) (d4f1b5e)
- FormGroup: add eager validation (#992) (d39e2de)
- Icon: switch to
nuxt-icon
withdynamic
prop or app config (#862) (c601fc6) - module: allow options override of
@egoist/tailwindcss-icons
plugin (#1013) (ec58948) - Notification: customize default timeout (#1003) (83c3be7)
- Popover: ability to add overlay (#1014) (06d4510)
- SelectMenu: allows to clear search query on close (#968) (11ccbbb)
- Textarea: add default slot for complex usages (55697e6), closes #971
- Toggle: add
size
prop (#950) (3c71bf3) - types: support custom values from
app.config.ts
(#863) (7339324)
🐛 Bug Fixes
- Alert: improve config options (91511b9), closes #760
- Alert: prevent
gap
when no close button or action (9a1a1b8), closes #831 - ButtonGroup: handle components with children (#999) (f4be95d)
- CommandPalette: activate first option after async search (#981) (a975939)
- defineShortcuts: support minus
-
key (#962) (de38afd) - Dropdown: pass event to
click
function (60fa2be) - Dropdown: use
NuxtLink
withcustom
prop to close on select (f323379), closes #899 - FormGroup: hydration mismatch on inputId (#942) (a3046aa)
- FormGroup: remove inputId if the input is a fieldset (#914) (e81d5cf)
- Input/Textarea: add
v-model
modifiers (#856) (68f6956) - Link: handle
active
state whento
prop is not provided (6cc77a3), closes #988 - Link: reactivity issue with
active
prop (15a40f5), closes nuxt/nuxt.com#1432 - module:
boolean
types and bump nuxt to3.8.2
(#1006) (ca62ce1) - module: use correct alias for
#ui-colors
(#913) (c84438f) - Notification: improve config options (7cb987d)
- Notification: prevent
gap
when no close button or action (ded6a7f) - Notifications: teleport to
body
(#909) (8451f4d) - Progress: percentage calculation (#939) (c55871b)
- Radio: prevent
help
text from inlining with label (#894) (a2d70f0) - **SelectMe...
v2.10.0
Read our updated documentation on https://ui.nuxt.com.
✨ Highlights
- New
Divider
component
- New
RadioGroup
component
- New
Progress
component
- New
Meter/MeterGroup
components
🚀 Features
- CommandPalette: handle
filter
attribute in groups (#871) (8ba2a79) - Divider: new component (#757) (eb9ce6a)
- Form: handle
@error
event (#718) (e16379f) - Input/Textarea: allow specifying autofocus delay for page transitions (#816) (8bfd359)
- Meter: new component (#827) (abbcc37)
- Pagination: add first and last page buttons (#842) (c5ce997)
- Popover: manual mode & horizontal offset (#781) (92b8618)
- Dropdown/SelectMenu/ContextMenu/Popover/Tooltip:
arrow
option &popper
docs (#875) (f785ecd) - Progress: new component (#697) (2c5559b)
- RadioGroup: configurable label size (#881) (5a2644b)
- RadioGroup: new component (#730) (23d5dc7)
- Range: add
2xs
,xs
,xl
and2xl
sizes to match progress component (3cb3914), closes #673 - Table: add
v-model:sort
prop (#803) (9f4d88e)
🐛 Bug Fixes
- Accordion: toggle correct element when keyboard press (#805) (96296c3)
- Dropdown: use
NuxtLink
instead ofULink
(#882) (c37ad8b) - FormGroup: ensure size exists in config (#695) (f5f3388)
- Modal: remove padding on mobile with
fullscreen
enabled (550ac10), closes #811 - Notification: add roles for accessibility (#724) (40f3b16)
- Table: enable sorting for nested column keys (#835) (b4f7b03)
- Table: prevent
@select
event call when selecting all rows (#838) (51f4d54) - Tabs: truncate buttons content (ddbb431), closes #796
- types: handle sub-objects in
app.config.ts
(button colors) (7be2af7), closes #858
👋 New Contributors
- @claytonchew made their first contribution in #788
- @albertcito made their first contribution in #718
- @nilsso made their first contribution in #781
- @acidjazz made their first contribution in #816
- @DarkGhostHunter made their first contribution in #803
- @MuhammadM1998 made their first contribution in #724
- @mwohlan made their first contribution in #835
- @maxsteinwand made their first contribution in #842
- @brycecammo made their first contribution in #859
- @connerblanton made their first contribution in #868
A huge thank you to everyone who contributed to make this release, this is truly an awesome community ❤️
Full Changelog: v2.9.0...v2.10.0
v2.9.0
Read our updated documentation on https://ui.nuxt.com
✨ Highlights
This release focuses on performance and DX:
-
Props having a validator are now typed to provide autocomplete
-
Lodash has been completely removed from
@nuxt/ui
-
Overall bundle size has been greatly reduced by only loading the config of the components used
-
app.config.ts
now also uses tailwind-merge like theui
prop to smartly merge classes
Like #509 in https://github.com/nuxt/ui/releases/tag/v2.8.0, breaking changes might occur but it's highly unlikely as you'd already rewrite the entire config line anyway. You can still go back to the old behaviour by setting the strategy to override
either in the app.config.ts
for the config or specifically in the ui
prop.
Everything is explained in #692, I'd recommend reading it.
🚀 Features
- FormGroup: add slots (#714) (2fc9385)
- Link: add
active
prop to override default behaviour (#732) (8257a11) - Link: add
as
prop (#535) (e404912) - module: use
tailwind-merge
forapp.config
& move config to components & type props (#692) (34d2f57) - module: remove
lodash-es
(#648) (d6476d1) - Table: add ability to custom style for
td
andtr
(#741) (874447c)
🐛 Bug Fixes
- Accordion: close other items in circular order (#735) (6887f73)
- FormGroup: use explicit label instead of implicit label (#638) (681f0e5)
- Pagination: handle
max > 5
andmax
equal total pages (#728) (a071e4b) - Range: fix track pseudo-elements for mozilla (#636) (8955595)
- SelectMenu: handle numbers (0544a01), closes #574
- Table: add missing classes in
app.config.ts
(a603ea5), closes #655 - Table: select all rows without select listener (#652) (83d609d)
- Tabs: add visible focus indicator on active tabs (#690) (be734fc)
- Tabs: allow custom keys in
TabItem
(#671) (15e418e) - Tabs: prevent focus of
TabPanel
withtabindex="-1"
(cbb2f28)
👋 New Contributors
- @farnabaz made their first contribution in #664
- @Sma11X made their first contribution in #652
- @iBobik made their first contribution in #671
- @Flowko made their first contribution in #648
- @HigherOrderLogic made their first contribution in #690
- @Levy-from-Odessa made their first contribution in #714
Full Changelog: v2.8.1...v2.9.0