Skip to content

Releases: nuxt/ui

v2.14.0

22 Feb 11:09
Compare
Choose a tag to compare

Read our updated documentation on https://ui.nuxt.com.

🚀 Features

🐛 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

Full Changelog: v2.13.0...v2.14.0

v2.13.0

30 Jan 11:25
Compare
Choose a tag to compare

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.

CleanShot 2024-01-29 at 21 15 00@2x

HorizontalNavigation component

Much like the VerticalNavigation, the HorizontalNavigation component comes in handy when you need to display a list of horizontal links.

CleanShot 2024-01-29 at 21 14 41@2x

🎨 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>

Release v2.13

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 as isActive (b76e761)
  • Select: consistent placeholder with input and textarea (2cb41db), closes #1276
  • Slideover: handle translate in RTL mode (#1259) (ea58c88)

👋 New Contributors

Full Changelog: v2.12.3...v2.13.0

v2.12.3

18 Jan 16:41
Compare
Choose a tag to compare

🐛 Bug Fixes

  • link: import type from #vue-router (79ec3fd), closes #1253

Full Changelog: v2.12.2...v2.12.3

v2.12.2

18 Jan 14:39
Compare
Choose a tag to compare

🐛 Bug Fixes

  • link: improve nuxt link rel type (05e90aa)

Full Changelog: v2.12.1...v2.12.2

v2.12.1

18 Jan 14:05
Compare
Choose a tag to compare

🐛 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

Full Changelog: v2.12.0...v2.12.1

v2.12.0

09 Jan 17:16
Compare
Choose a tag to compare

Read our updated documentation on https://ui.nuxt.com.

✨ Highlights

Like the SelectMenu, it allows you to create an autocomplete input with real-time suggestions.

🚀 Features

  • Breadcrumb: handle labelClass and merge iconClass (f623ec1)
  • Dropdown: handle labelClass and merge iconClass (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 merge iconClass (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 in usingInput (#1159) (648eec3)
  • VerticalNavigation: improve accessibility (#948) (29e64ca)

👋 New Contributors

Full Changelog: v2.11.1...v2.12.0

v2.11.1

11 Dec 11:17
Compare
Choose a tag to compare

🐛 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 of object (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

23 Nov 10:18
Compare
Choose a tag to compare

Read our updated documentation on https://ui.nuxt.com.

✨ Highlights

🛠️ Components

CleanShot 2023-11-23 at 11 31 32@2x

  • 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:

CleanShot 2023-11-23 at 11 31 22@2x

⌨️ 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:

CleanShot 2023-11-17 at 18.45.21@2x.png
CleanShot 2023-11-17 at 18.45.37@2x.png

🪄 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 and help size (a1b38c4)
  • Chip: new component (#886) (d4f1b5e)
  • FormGroup: add eager validation (#992) (d39e2de)
  • Icon: switch to nuxt-icon with dynamic 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 with custom 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 when to 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 to 3.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...
Read more

v2.10.0

31 Oct 09:56
Compare
Choose a tag to compare

Read our updated documentation on https://ui.nuxt.com.

✨ Highlights

CleanShot 2023-10-31 at 10 45 03@2x

CleanShot 2023-10-31 at 10 46 22@2x

CleanShot 2023-10-31 at 10 44 23@2x

CleanShot 2023-10-31 at 10 43 33@2x

🚀 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 and 2xl 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 of ULink (#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


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

02 Oct 15:47
Compare
Choose a tag to compare

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

    CleanShot 2023-09-20 at 17 56 39@2x
  • 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 the ui 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 for app.config & move config to components & type props (#692) (34d2f57)
  • module: remove lodash-es (#648) (d6476d1)
  • Table: add ability to custom style for td and tr (#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 and max 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 with tabindex="-1" (cbb2f28)

👋 New Contributors

Full Changelog: v2.8.1...v2.9.0