Skip to content

Releases: nuxt/ui

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

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

v2.8.1

09 Sep 12:01
Compare
Choose a tag to compare

🐛 Bug Fixes

  • Form: fix getValibotError to avoid importing safeParseAsync (#640) (e8daf7f)
  • Form: fix valibot imports (#617) (1a7eb27)
  • Pagination: page numbers not clickable (#624) (c1e0654)

👋 New Contributors

Full Changelog: v2.8.0...v2.8.1

v2.8.0

07 Sep 13:49
Compare
Choose a tag to compare

✨ Highlights

NuxtLabs UI is now Nuxt UI, this rebranding involves the transfer of the repository from nuxtlabs to nuxt GitHub organization. Both packages are now @nuxt/ui and @nuxt/ui-edge, previous @nuxthq ones will be deprecated.

The documentation has also been moved to https://ui.nuxt.com and got itself a brand new landing page.

nuxtlabs-ui-to-nuxt-ui.mp4

🚨 Breaking Changes

  • use tailwind-merge for class merging (#509)

Everything is explained in the PR description, I'd strongly recommend reading it.

🚀 Features

  • Avatar: add icon prop as fallback (df3b202)
  • Avatar: handle icon default from app.config.ts (55daed0)
  • ButtonGroup: add orientation prop (#603) (b3bc6e2)
  • Form: add valibot support (#615) (ab5153a)
  • Form: improve form control and input validation trigger (#487) (6d7973f)
  • Modal: add fullscreen prop (#523) (7e2bebd)
  • module: add DEFAULT shade to primary color (#493) (c6056ed)
  • module: use tailwind-merge for class merging (#509) (8880bdc)
  • Table: support nested keys in columns (#503) (858886a)
  • Tabs: control selected index (#490) (aaf09ad)

🐛 Bug Fixes

  • Alert: fix wrong type of actions (#507) (b243e8c)
  • AvatarGroup: add justify-end to wrapper to prevent right align (e578b0d)
  • AvatarGroup: pass default size to max avatar (e49c673)
  • Badge: allow label as number (7c157ce)
  • Button: add missing prop types (#508) (a8a1c15)
  • Form: use safeParseAsync for zod (#497) (8b19b18)
  • Popover: handle hover mode with padding like dropdown (dc951ff)
  • Radio: put back id for label selection (9b3a22e)
  • SelectMenu: invalid gap values (998314e)
  • Table: empty state is displayed if null (#517) (44ba758)
  • Table: missing component imports (#608) (d936316)
  • Tabs: recompute marker position when v-model changes (#524) (fdce429)
  • Tooltip: hide on touch devices (#580) (f1ed007)

Full Changelog: v2.7.0...v2.8.0

v2.7.0

01 Aug 13:01
Compare
Choose a tag to compare

✨ Highlights



  • New Tabs component


  • New Form component

Validate form data using schema libraries such as Yup, Zod, Joi or your own validation logic. It works seamlessly with the FormGroup component to automatically display error messages around form elements.

  • Badge component has new variants and colors

CleanShot 2023-08-01 at 16 01 54@2xCleanShot 2023-08-01 at 16 01 59@2xCleanShot 2023-08-01 at 16 02 04@2xCleanShot 2023-08-01 at 16 02 10@2xCleanShot 2023-08-01 at 16 03 10@2xCleanShot 2023-08-01 at 16 01 50@2x

  • Link component is now documented

Wrapper around <NuxtLink> using the Vue Router custom prop that provides a few extra features

🚨 Breaking Changes

  • Link: renamed from LinkCustom and add exact-query / exact-hash props
  • Badge: add colors and variants (solid has changed)
  • SelectMenu: ui prop is now ui-menu and ui-select is now ui (#432)

🚀 Features

  • Alert: new component (#449) (ab2abae)
  • Badge: add colors and variants (solid has changed) (05503e5)
  • Badge: rename outline to subtle + add soft variants (5bd5dc2)
  • CommandPalette: bind active and selected to scoped slot (#441) (b0440f8)
  • FormGroup: add size prop and theme options (#391) (d2a8a07)
  • Form: new component (#439) (a3aba1a)
  • Link: rename from LinkCustom and add exact-query / exact-hash props (cefe5a7)
  • Notification: support html with title and description slots (#431) (df455db)
  • Range: increase narrowed surface (#459) (3b183ac)
  • SelectMenu: add value-attribute prop (#429) (959c968)
  • Tabs: new component (#450) (8298b62)
  • ui: apply primary bg on ::selection (09d0ea2)

🐛 Bug Fixes

  • FormGroup: required star display (3dd0492)
  • FormGroup: err when no prop defined (93aebe6)
  • FormGroup: set size default to null (c59595f)
  • Form: return state on validate (#472) (248b0a6)
  • LinkCustom: exact prop wasn't working (82e152b), closes #417
  • LinkCustom: improve prop binding and prevent error with externals (914d156)
  • Link: handle disabled prop (396aae7), closes #473
  • module: ensure red color is safelisted for form elements (208acca), closes #423 #373
  • module: omit colors defined as strings (927b63f)
  • module: safelist all colors for toast.add (2cd6208), closes #375 #440
  • module: smart safelisting for components in snake case (e25be11), closes #461
  • Popover: hover mode (#453) (10890e6)
  • SelectMenu: invert ui and ui-select props (#432) (7cccbcf)
  • Table: hide data when loading state is active (#460) (2b3dc8d)

👋 New Contributors

Full Changelog: v2.6.0...v2.7.0

v2.6.0

18 Jul 15:08
Compare
Choose a tag to compare

✨ Highlights

🚨 Breaking Changes

Avatar

  • class will no longer apply on the wrapper but on the img so use :ui="{ wrapper: '...' }" instead because of the v-bind="$attrs" on the img tag

🚀 Features

  • Accordion: new component (#301) (e50f377)
  • Avatar: bind component attributes to img element (#421) (773a23f)
  • SelectMenu: handle async search (#426) (5f8fe85)
  • Modal: add prevent-close prop (2cc5c0d), closes #303
  • Slideover: add prevent-close prop (d15e816)
  • Table: add select event for the entire row (#353) (d292706)
  • Table: allow columns class customization (5dffa86), closes #366

🐛 Bug Fixes

  • ButtonGroup: err when no props on buttons (80a9738), closes #360
  • Button: missing disabled state on some variants (41a5238)
  • Modal: disabling transition prop had no effect (db34665)
  • Range: disabled thumb opacity (c92dc98)
  • Range: progress style (#385) (a79c165)
  • SelectMenu: missing appear on transition (cbe2b1b), closes #400
  • Table: fixed row deletion bug on deselect (#425) (46b444a)

👋 New Contributors

Full Changelog: v2.5.0...v2.6.0