---
url: https://rsmple.github.io/eco-vue-js/releases.md
description: >-
  Release notes for every eco-vue-js version, newest first — what changed in
  each component and what breaks on upgrade.
---

# Releases

Every version published to npm, newest first. The same notes are on [GitHub Releases](https://github.com/rsmple/eco-vue-js/releases).

## 0.26

### v0.26.20

2026-10-27 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.20)

* Add `deferred` and `previewData` props to [WSelectSingle](/components/select), [WSelect](/components/select), [WSelectAsync](/components/select) and [WSelectAsyncSingle](/components/select) — a deferred `seamless` select renders as a lightweight field until it is clicked or focused, so lists with many select cells render much faster; `previewData` supplies the selected options for its chips without loading the options
* Fix WSelectAsync and WSelectAsyncSingle requiring `valueGetter` — it defaults to the option's `id`, and leaving it out no longer logs a warning per field
* Speed up rendering of [WInputAsync](/components/input)
* Fix [WNavItem](/components/nav-bar) title for a route whose child record shares its path — the title registered on the parent record is now used

### v0.26.19

2026-10-26 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.19)

* Fix [WDropdownAdaptive](/components/dropdown-menu) not updating its open content when the parent changes its slots — content added or removed behind a `v-if` while the dropdown, dialog or bottom sheet is open now shows up

### v0.26.18

2026-10-25 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.18)

* Fix [WList](/components/list) sort menu listing fields whose `field` getter returns `undefined` for the current query params — only fields that resolve to a sortable key are offered now

### v0.26.17

2026-10-25 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.17)

* Fix [WInfiniteList](/components/infinite-list) adding pages one after another on very long lists (about a million rows and up) — the spacers now shrink to fit under the browser's element height limit, so the scrollbar moves through the list faster than the rows scroll

### v0.26.16

2026-10-24 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.16)

* Fix [WList](/components/list) table header and rows not stretching to the full width of the list when no column is flexible — an empty filler column now takes the leftover space
* Fix WList header cells picking up the field's `cssClass` — header cells now only get `cssClassHeader`
* Fix WList header settings content being clipped

### v0.26.15

2026-10-24 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.15)

* Lay out [WList](/components/list) table columns on one shared grid sized by the field meta `width` (`10rem` by default, `minmax(…fr)` and `var(--…)` allowed), so header and cells always line up and rows stop re-rendering while the list opens — nested fields span their own columns, and `componentItem` lines of nested arrays now fill the row instead of one cell
* Add `w-list-align-top-*` to set how far the checkbox and row menu sit from the top with `align-top`, so they line up with the first line of the cells
* Fix grouped WList: the group heading spans the whole row and sticks under the toolbar, grid rows run on across pages, and cards no longer jump while pages above load or are dropped — [WInfiniteList](/components/infinite-list) `pageClass` now styles one element holding all pages, with a new `pageStyle` beside it
* Fix long dropdown menus without a tip overflowing the screen — they now scroll within the height left

### v0.26.14

2026-10-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.14)

* Add [WQueryStatus](/components/query-status) — mounted once next to [WNotify](/components/notify), it watches the queries on screen and shows one message with Retry when some fail to load because the server is unreachable or answers 5xx, 408 or 429; while the server is down every skeleton stops and greys out
* Add [WQueryBoundary](/components/query-boundary) — wraps a card with the queries it shows; when one fails without data its skeletons stop and grey out, with its own message only for failures WQueryStatus doesn't show, such as a 403
* Keep failed list pages and [WPageError](/components/page-error) out of the WQueryStatus message, so a failure is told once
* Add the `partialLoadError` text ("Some data failed to load") and `getLoadErrorMessage`, `findFailedQueries` and `useHandledQueryError` in `utils/queryClient`

### v0.26.13

2026-10-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.13)

* Add [WPageError](/components/page-error) — wraps a page that shows one item and replaces it while its query has an error: the status, the server's `detail` and Back, plus Retry when the server was unreachable or answered 5xx; its texts (`errorTitle`, `pageNotFound`, `serverError`, `serverUnavailable`, `back`, `retry`) translate with `setTexts`
* Add `watchServerRecovery` to `utils/queryClient` — while the server is unreachable it sends a cheap probe request with a growing delay (and at once when the tab is shown or the browser comes back online), then refetches the failed queries once the server answers; vue-query's `refetchOnReconnect` only follows the browser's own connection
* Add `useAvailable()` to ApiClientInstance — false after a network failure or a 502/503/504, true again on the server's next answer

### v0.26.12

2026-10-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.12)

* Add an error state to [WInfiniteList](/components/infinite-list) and [WList](/components/list) — a page that failed to load with nothing cached shows the server's `detail` (or "Server is unavailable") and a Retry button instead of endless skeletons; replace it with the new `error` slot, and translate it with the `loadError`, `serverUnavailable` and `retry` texts
* Add `ApiErrorUnavailable` — requests reject with it when the server can't be reached or a gateway answers 502/503/504, instead of a bare `TypeError` that error handlers ignored
* Fix ApiClientInstance logging users out when the session refresh fails because the server is down, and requests hanging forever when the refresh failed or the refresh endpoint answered 401 — every request now settles, and a request retried after a 401 rejects when the retry fails
* Add `defaultQueryRetry` and `isRetryableError` to `utils/queryClient` — retries network errors, 5xx, 408 and 429 only, never 404 or other 4xx; use it as the `QueryClient` default

### v0.26.11

2026-10-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.11)

* Add `trail` to `useRouteTitle` — extra breadcrumb levels after a page that are not routes, such as the active filter of a list (`Pipelines / In progress`); the last one is the current title and shows its own `suffix`

### v0.26.10

2026-10-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.10)

* Fix [WSelectAsync](/components/select) showing stale options when `useQueryFnOptions` or `useQueryFnPrefix` changes — the option list and selected prefix now query again with the new function, including while the menu is open
* Fix queries from `createDefaultQuery` failing when called outside component setup — the resolved query client is now used
* Hide the [WInputSuggest](/components/input) placeholder while its unclickable menu is open, and drop the extra bottom margin on mobile
* Show the placeholder in [WInput](/components/input) when `unclickable` — the input also keeps its width and the mobile `text-base` size

### v0.26.9

2026-10-20 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.9)

* Add `maxSizeKb` to `WInput` to set the largest file `allowDropFile` accepts by drop or picker
* Raise the default `WInput` dropped-file limit from 10 KB to 100 KB

### v0.26.8

2026-10-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.8)

* Add `replace`, `target` and `rel` props to [WButtonMoreItem](/components/dropdown-menu) and [WMenuItem](/components/dropdown-menu) — open a menu link in a new tab or replace the current history entry, same as [WButton](/components/button)

### v0.26.7

2026-10-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.7)

* Fix [WUniform](/components/form) `confimGetter` cancel: the field drops its unsaved draft (an async [WInput](/components/input) shows the saved value again) and the update promise resolves instead of rejecting, so cancelling no longer reaches the app `errorHandler`
* Expose `cancel` on WInput — discards the unsaved async value
* Hide the [WFieldWrapper](/components/field-wrapper) filter button until the field is hovered, unless the filter is active
* Fix [WTabs](/components/tabs) switching from a horizontally scrolled tab — the scroll offset is reset so it no longer shifts the next tab during the transition

### v0.26.6

2026-10-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.6)

* Add `expirationCookie` option to ApiClientInstance — apps sharing an origin can each point at their own session-expiry cookie (defaults to `exp`), so one app logging out or refreshing no longer clears or stalls the other's session

### v0.26.5

2026-10-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.5)

* Add `toggle` slot to [WButtonMore](/components/dropdown-menu) to open the menu from another button, such as [WButtonInput](/components/button) — the slot gets `toggle`, `active` and `attrs` to wire up the click, highlight and `aria-expanded`
* Add `active` prop to WButtonInput to highlight it, such as while its menu is open
* Fix the hover and press ripple on [WButton](/components/button), WButtonInput and [WCheckbox](/components/checkbox) stopping inside the border — it now covers the border and its corners match the element's rounding
* Add `w-ripple-border` utility for custom `w-ripple` elements with a border — `w-ripple-border` for 1px, `w-ripple-border-2` or `w-ripple-border-(--var)` for others

### v0.26.4

2026-10-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.4)

* Fix [WInfiniteList](/components/infinite-list) not loading the next pages after a fast scroll, and size its spacers and skeletons by the real item count — a short last page no longer leaves blank space or shrinks the scrollbar estimate
* Fix the [WTabs](/components/tabs) bar on phones adding the page inset inside a box that sets `--w-frame-padding` — it now takes that padding instead
* Fix menus and confirms opened from above the modals, such as a full-screen login, rendering underneath their opener
* Fix the [WNavItem](/components/nav-bar) counter skeleton overlapping the title

### v0.26.3

2026-10-15 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.3)

* Fix [WTabs](/components/tabs) scrolling the page down when switching tabs while it isn't at the very top — the page now stays where it was

### v0.26.2

2026-10-14 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.2)

* Fix [WDragContainer](/components/drag-container) reordering when `list` holds equal values (the same string twice, or the same object) — dragging one of them no longer moves the wrong item or loses track of it

### v0.26.1

2026-10-14 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.1)

* Change IconDanger, IconSuccess and IconWarn to an outline style — existing usages will render as outlines
* Add IconDangerSolid, IconSuccessSolid and IconWarnSolid filled variants — use these to keep the previous filled look
* Notifications keep their filled icons by using the new solid variants

### v0.26.0&#x20;

2026-10-14 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.26.0)

* Add paginated mode to [WInputOptions](/components/input) — pass `useQueryFnOptions` + `queryParamsOptions` (and `searchField`, default `search`) instead of `options` to get server-side suggestions with infinite scroll
* Add `draft` mode to WInputOptions — typing only drives suggestions; the value changes on Enter, a picked suggestion or the "Apply:" row (`applyPrefix`), and the typed text is dropped when the menu closes
* **Breaking**: WInputOptions `#option` slot and `optionComponent` now use the select option types — `option` may be `undefined` on skeleton rows
* Fix Enter not selecting the cursor option in [WSelectAsync](/components/select), and "Duplicate keys" warnings in [WInfiniteList](/components/infinite-list) when rows share a `valueGetter` value

## 0.25

### v0.25.2

2026-10-14 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.25.2)

* Lighten the default `primary` and status colors (`negative`, `positive`, `warning`, `info`) in the Tailwind base theme — status fills now sit lighter than the primary, so badges and alerts no longer outweigh the content beside them, while white text on them stays readable
* Use `text-accent` instead of `text-description` for idle and disabled items in [WMenuItem](/components/dropdown-menu)

### v0.25.1

2026-10-13 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.25.1)

* Add `soft` and `icon` props to [WChip](/components/chip) — `soft` renders a rounded pill with a tinted background and colored text, with classes set via `setSemanticTypeChipSoftMap`; `icon` shows an icon before the label
* Fix [WButtonCopy](/components/button) changing the line height when placed inside text — it now takes up one line of the surrounding text and has a larger click area
* Add `noInline` prop to WButtonCopy to lay it out as a regular block instead

### v0.25.0

2026-10-10 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.25.0)

* Add `to` prop to [WTabsItem](/components/tabs) and [WButtonTab](/components/tabs) — tabs become route links that replace the history entry, and the current route decides which tab is open
* Add route titles: [WHeaderBar](/components/header-bar) without a `title` shows a breadcrumb of the current route, pages report data-driven titles with `useRouteTitle`, and `useDocumentTitle` keeps the browser tab title in sync — [WNavItem](/components/nav-bar) also shows the title the open page registers
* Fix [WNotify](/components/notify) toast position to respect safe-area insets, and keep pending toasts on screen until they finish — the result shows and closes after 5 seconds like any other toast
* Fix [WLink](/components/links) clipping long text — it now wraps instead of being cut off

## 0.24

### v0.24.0&#x20;

2026-10-10 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.24.0)

* Add filters to the [WList](/components/list) selection bar — put [WListFilter](/components/list) in the new `filter` slot. Chips that do not fit fold into a "more" chip, `pinned` keeps chosen filters always shown, and a filter's `meta.summary` names the picked values on its chip
* **Breaking**: [WInput](/components/input) emits `''` when cleared or emptied, also when the model was `undefined` — set `clearValue` to `undefined` or `null` to keep emitting that
* Add the `isPlaceholderItem` query option to show an item already cached by a list while its own query loads, a `divider` prop and count badges to [WTabs](/components/tabs), and `iconClass` to [WInfoCard](/components/info-card)
* Fix WTabs not updating when tabs change without changing their number, and list every sortable field in the WList sort menu, with a badge counting the sorted ones

## 0.23

### v0.23.1

2026-10-07 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.23.1)

* Fix [WUniform](/components/form) resetting its model when `queryParams` change before the new item has loaded — a create whose result carries the new id (stepper forms that save on a step) no longer erases the form; the loaded item replaces the model once it arrives
* Update dependencies with audit fixes

### v0.23.0&#x20;

2026-10-07 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.23.0)

* **Breaking**: `dateFormat` shows the month name (`07 Oct 2026`) and `datetimeFormat` puts the date first with the locale's separator (`07 Oct 2026, 14:30:05`) — dates no longer read differently across locales
* **Breaking**: date, time and duration formatters take options instead of flags — `dateFormatShort` → `dateFormat(d, {year: 'auto'})`, `timeFormatShort` → `timeFormat(d, {seconds: false})`, `durationHumanize(s, full, round)` → `durationFormat(s, {style, round})`, `parseDate` → `parseDateQuery`
* Add `setLocale` — dates, times, durations and numbers format in the app's locale, and durations show `10 mths` / `10 mins` instead of the ambiguous `10 M` / `10 m`
* Add `noData`, `dateFrom`, `dateTo` and `noDate` texts and localize the "Today" label in charts; [WInputDate](/components/input) reads dates typed in the locale's order

## 0.22

### v0.22.1

2026-10-06 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.22.1)

* Add `replace` option to `useOverlay().open` — the new dropdown takes the place of the one it was opened from, at its anchor, and keeps its `onClose` until it closes too
* Fix lazily loaded overlay content flashing an empty frame — the overlay now shows once the component has loaded, keeping the one it replaces until then
* Fix dropdowns closing when a press inside, such as dragging a slider, is released outside; fix bottom sheets not closing on swipe when shown without a backdrop; fix [WUniform](/components/form) detecting changes in nested object values
* Open the [WButtonDropdown](/components/dropdown-menu) menu with the overlay manager — a bottom sheet on phones; widen filter dropdowns to fit their fields, line up embedded select options with the field, and pin the [WNotifyCenter](/components/notify) footer in its dropdown

### v0.22.0&#x20;

2026-10-06 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.22.0)

* **Breaking**: Overlays now lay out their own content — a [WModalWrapper](/components/modal), filter or menu opened as a modal, dropdown or bottom sheet gets its title, buttons and padding from the frame. Remove `sm-not:px---inner-margin` from content and give edge-to-edge parts such as lists `w-frame-bleed`
* **Breaking**: Drop `embedded` from filter `meta` — filters show their `header` as a title and size to their content. Drop `moreToggleClass` from [WButtonSelection](/components/list) — list bulk actions that do not fit the bar move into More
* Ask before closing a modal whose [WUniform](/components/form) with `api-method` has unsaved changes, and keep it open while it saves — `useLayerChanges` and `useLayerBusy` do the same for other content. Add `setTexts` to translate the built-in texts
* Add `stepperControls`, `submitting` and `disabledNext` to [WTabs](/components/tabs) to put the step title and buttons in the frame — [WModalStepper](/components/modal) is deprecated in their favour
* Show toasts at the top edge on phones for every [WNotify](/components/notify) `position`, clear of a modal's buttons
* Fix WUniform date fields not reporting changes or losing their value after a save, keep unsaved changes when the loaded model updates, and check the current step's fields before the WTabs stepper moves on

## 0.21

### v0.21.3

2026-10-05 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.21.3)

* Add `horizontalAlign` to [WNotifyCenterButton](/components/notify) and `useNotifyCenter` — `HorizontalAlign.LEFT_INNER` grows the center left from a bell at the right end of the header, `HorizontalAlign.LEFT_CENTER` opens it beside a bell in a side rail
* Open overlay dropdowns with `align` set to `LEFT_CENTER` or `RIGHT_CENTER` beside the anchor, with a tip pointing at it — near the top or bottom of the screen the box shifts while the tip stays on the anchor
* Animate notifications into and out of [WNotifyCenter](/components/notify), and center its empty state
* Hide the [WButtonAction](/components/actions-bar) tooltip while the button is `active`

### v0.21.2

2026-10-05 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.21.2)

* Fix [WNavItemExpand](/components/nav-bar) not opening its dropdown on hover on server-rendered pages, such as a VitePress site
* Export `NotifyType`, `NotifyChannel` and the notify types (`NotifyConfig`, `NotifyContentEmits`, `NotifyGroup`, `NotifyItem`, `NotifyPatch`) from `eco-vue-js/dist/utils/Notify`
* Add `eco-vue-js/dist/utils/NotifyCenter` with `useNotifyCenter`, `closeNotifyCenter`, `isNotifyCenterOpen` and the pending and action counts — no more imports from component internals

### v0.21.1

2026-10-05 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.21.1)

* Keep [WNotify](/components/notify) toasts on screen while the pointer is over them — their timers pause and resume with the time they had left
* Fix WNotify groups merging repeated members into one — every member now adds to the list, newest first; a group's toast stays up for 5 seconds after its latest member and leaves all at once, and a long member list scrolls
* Fix a notify added by the same click that closes the notify center never showing its toast
* Fix `set` writing to the wrong level when an intermediate object already exists, `numberFormatter`/`percentFormatter` leaving every comma after the first in large numbers, and `w-border-svg-stroke-*` ignoring bare numbers — `w-border-svg-stroke-2` is now 2px

### v0.21.0&#x20;

2026-10-05 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.21.0)

* Add [WNotifyCenter](/components/notify) and [WNotifyCenterButton](/components/notify) — a history of notifications split into action and activity channels, with groups and custom `component` content; `Notify.process` shows a spinner until `Notify.update` settles it, `Notify.*` now returns the notification id, and [WNotify](/components/notify) gets a `position` prop
* Add anchored confirms — pass `anchor` to `Modal.addConfirm` (or open it with `useOverlay` from a menu item) to show the confirm as a dropdown next to the element, a bottom sheet on phones, instead of a modal; bulk actions get `clearSelection` so the selection resets after a confirm from the More menu
* Open [WButtonMore](/components/dropdown-menu), the list's sort, export, settings and filter menus, and input and select menus through one overlay manager — only one menu is open at a time, nested menus open over their parent, dropdowns are centered on their anchor with a tip, and Escape closes input menus; selects scroll to the selected option on open (`cursorSelected` also puts the cursor on it)
* **Breaking**: [WDropdownAdaptive](/components/dropdown-menu) now opens through the overlay manager — `top`, `bottom`, `updateAlign`, `emitUpdate`, `dropdownClass`, `closeOnClickOutside`, the `update:rect` emit and `updateDropdown` are gone; use `horizontalAlign`, `frameClass` and `closeOnClick`, and `close` now fires on any outside click, Escape or swipe

## 0.20

### v0.20.6

2026-10-03 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.6)

* Fix async [WUniform](/components/form) blocking every save on one invalid field — valid changed fields now save while the invalid one shows its error and waits, a change made during a save is sent when it finishes, and no "Form contains invalid data" notification pops up; validation also no longer scrolls to a field that is already in view
* Add [WDropdownTip](/components/dropdown) and the `surface-raised` and `shadow` roles — dropdowns and menus sit on a raised surface with a layered `shadow-md` (adjust with `--w-shadow-lift`), [WList](/components/list) filter dropdowns get a pointer tip, and tooltips follow the page theme instead of always being dark
* Drop the `w-checkbox-color-*` and `w-date-picker-day-*` utilities — checked [WCheckbox](/components/checkbox) and selected calendar days now pick black or white text by contrast (`text-tone-on`), so remove them from your `@apply` or the Tailwind build fails
* Add a Clear button to the WList sort menu, stop [WSelectAsync](/components/select) refetching its chips on select and unselect, keep light primaries such as yellow readable in borders and focus rings (`border-tone-line`), match [WButtonGroup](/components/button-group) radius and padding to [WButton](/components/button), and ship the docs as Markdown with an `llms.txt` index in the package

### v0.20.5

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.5)

* Fix the line-number gutter background in multiline [WInput](/components/input) — it now matches the input background, including one set with `w-input-bg-*`

### v0.20.4

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.4)

* Fix `@import "eco-vue-js/tailwind-base/markdown.css"` and `css/markdown/blocks.css` failing to resolve in Vite and ESLint — every stylesheet under `tailwind-base` is now exported, not only `base.css`

### v0.20.3

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.3)

* Add `semanticType` prop to [WMenuItem](/components/dropdown-menu) and [WButtonMoreItem](/components/dropdown-menu) — `negative`, `positive`, `warning` and `info` color the item text at rest, so a red "Delete" no longer needs a `tone-*!` override
* Add markdown styles to the Tailwind base — `@import "eco-vue-js/tailwind-base/markdown.css"` styles rendered markdown in `.w-markdown` with color roles, and `css/markdown/blocks.css` adds GitBook hints, colored text and expandable sections
* Fix `h4` in markdown rendering larger than `h3` in small-text containers, and the code block copy button turning invisible on hover in light mode

### v0.20.2

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.2)

* Add the `surface-subtle` color role (`bg-surface-subtle`) — a fainter layer than `surface-muted` for striped rows, empty chart cells and panels inside a card; themes set it with `--role-surface-subtle` and `--role-surface-subtle-dark`
* Make the default `primary-light` and `primary-darkest` shades softer
* Map `bg-X-light dark:bg-X-darkest` to `tone-X bg-tone-soft` and gray-50 pairs to `bg-surface-subtle` in the color roles codemod
* Fix the color roles codemod collapsing indentation and line breaks in multi-line class strings

### v0.20.1

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.1)

* Fix [WButton](/components/button) and other semantic-type borders rendering in the text color (white on filled buttons) in apps — the kit's semantic type classes are now picked up by Tailwind, so `border-tone-fill` is generated

### v0.20.0&#x20;

2026-10-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.20.0)

* Add color roles: components paint with roles (`text-accent`, `bg-surface`, `border-line`, …) and tones (`tone-negative text-tone`, `surface-fill`) instead of `dark:` pairs, and an app sets any role as `--role-*` in its `@theme` — also adds a `data-*` palette for categories, `gradient-*` roles, and the `npx eco-vue-color-roles` codemod for an app's own `dark:` pairs; see the Theming guide
* **Breaking**: retune default colors for contrast — darker violet primary, deeper status colors, zinc `gray-*`, darker `text-description` in light mode; `-dark` colors now default to their light value, and text on fills and tone text are derived from the fill so they stay readable in any theme
* **Breaking**: drop the `severity-*` and `score-*` colors from the theme — define them in the app
* Fix side padding of [WButton](/components/button) and input options with very large or very small radii — it now stays between `0.5rem` and half the height

## 0.19

### v0.19.4

2026-09-30 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.19.4)

* Fix `goto` in [WInfiniteList](/components/infinite-list) landing on the wrong rows for a page that is not rendered, and ignoring the item index — it now scrolls to the item itself, once its page has loaded
* Fix readonly [WInput](/components/input) and the selects built on it being taller than the editable field — switching to readonly no longer shifts the layout
* Restyle [WProgressBar](/components/progress) and [WProgressStriped](/components/progress), with the percentage readable over the fill and `role="progressbar"` for screen readers; [WSlider](/components/slider)'s thumb now grows on hover like [WSliderRange](/components/slider)'s; set `--w-chart-heatmap-bg` to match [WChartHeatmap](/components/charts)'s fade to a background other than the default
* Accept string ids in list selections (`id__in`, `id__not_in`), and drop the unused WFilterWrapper and `useQueryUpdater`

### v0.19.3

2026-09-30 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.19.3)

* Update [WSpinner](/components/spinner) to match regular icons — 24×24 viewbox with a 1.5 stroke, and 20px by default instead of 2rem; size it with `square-*`
* Add `IconSpinner`, an animated spinner usable anywhere a regular icon is
* Drop the `w-spinner-size-*` utility and the `spinner-dash-small` animation — use `square-*` and `animate-spinner-dash` instead

### v0.19.2

2026-09-29 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.19.2)

* Add `loading` to [WButtonAction](/components/actions-bar) — a shimmer runs over the button while its action is in progress — and close its tooltip on click; add `semanticType` to [WCounter](/components/counter), `label` to [WCheckbox](/components/checkbox) and [WButtonSelectionAction](/components/list), and use `textFilter` of [WActionsBar](/components/actions-bar) as the filter panel heading; list rows, toolbar buttons and [WExpansionItem](/components/expansion) now expose their names and expanded state to screen readers
* Fix [WSlider](/components/slider) filling from the wrong position with a non-zero `min`, ignoring `semanticType` and snapping off-step, and [WSliderRange](/components/slider) rendering without color unless set — it now defaults to primary; [WFilePicker](/components/file-picker) no longer accepts drops while readonly and keeps only the first dropped file without `multiple`
* Fix [WInfiniteList](/components/infinite-list) template ref exposing nothing — `resetPage`, `goto`, `refetchAll`, `isFetching` and `isRefetchingAll` now work — and refetching the wrong pages after an item changes; fix [WModalImport](/components/modal) hiding its progress bar and counting finished requests as aborted, [WPage](/components/report-pages) continuation pages bumping the section number, and [WRouterLink](/components/links) failing without vue-router or `to` — it now renders a plain link
* Drop unused props — `headerTopIgnore`, `lastChild` and `count` from WInfiniteList, `bottom` from WActionsBar, `update:search` from [WHeaderBar](/components/header-bar), `semanticType` and `noBg` from WSliderRange, `title` from [WDatePickerSingle](/components/date-picker) and [WListFilter](/components/list), `small` from WCounter, `showPoints` from [WChartLine](/components/charts); deprecate `searchVisible` on WListFilter; make `watermark` optional on WPage

### v0.19.1

2026-09-27 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.19.1)

* Emit `update:has-changes` from [WTabs](/components/tabs) when any tab has unsaved changes, render the `suffix` slot of [WTabsItem](/components/tabs) and disable the tab button of a disabled WTabsItem
* Fix the text color of [WChip](/components/chip), [WDropdownMenu](/components/dropdown-menu) ignoring `bottom` and [WButtonGroup](/components/button-group) not inheriting readonly and skeleton states from a parent; [WCheckboxGroupMultiple](/components/checkbox) now supports `subgrid` and `embedded` like [WCheckboxGroup](/components/checkbox)
* Add the `w-drag-item-overlay-*` utility to set the drag overlay color in [WDragContainer](/components/drag-container)
* Drop unused props — `top`, `bottom`, `parentElement` and `dropdownClass` from [WButtonDropdown](/components/dropdown-menu), `innerClass` from WDropdownMenu, `divided` from WTabsItem and `noPadding` from [WListCardField](/components/list)

### v0.19.0&#x20;

2026-09-27 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.19.0)

* Fix [WInput](/components/input) paste button rejecting clipboard text within `maxLength` and accepting text over it
* Fix [WSelectAsync](/components/select) showing at most 8 chips whatever `prefixMax` is — it now defaults to 8 and loads that many; [WSelectAsyncSingle](/components/select) now emits `focus` and `blur`
* **Breaking**: replace `selectOnClose` with `searchModel` on all selects, and drop unused props and events — `light` and `maxHeight` from [WTooltip](/components/tooltip), `mandatory` and `savedText` from [WToggle](/components/toggle) and form fields, `top`, `bottom`, `parentElement` and `innerClass` from [WInputSuggest](/components/input), [WInputDate](/components/input) and [WSelect](/components/select), `useFirstDefault` from WSelectAsync, `keypress:backspace` from WInput and `update:model-value` from [WSelectAsyncList](/components/select)
* Describe props, events and slots of WToggle, WTooltip, WInput and WSelect in the docs, and add a releases page

## 0.18

### v0.18.3

2026-09-26 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.18.3)

* Add `disabledItems` prop to [WButtonGroup](/components/button-group), `href`/`target`/`rel` props to [WButtonAction](/components/actions-bar) (with `tag="a"`) and a `right` slot to [WHeaderBar](/components/header-bar)
* Fix [WInputAsync](/components/input) refusing every save after one invalid value, and [WToggle](/components/toggle) with an array of `validate` functions always reporting an error
* Fix [WInfiniteList](/components/infinite-list) waiting for a scroll when a loaded page is too short to fill the viewport — the next page now loads right away; list headers inside their own scroll container now stick to its top instead of under the page header
* Make [WList](/components/list) and [WTabs](/components/tabs) render on the server — WList now reads its saved config on mount; `useIsMobile` breakpoints now match tailwind `sm` (640px) and `xl` (1280px), [WNavBar](/components/nav-bar) and [WActionsBar](/components/actions-bar) respect `--left-margin`/`--right-margin`, and textarea line styles ship in the tailwind base

### v0.18.2

2026-09-25 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.18.2)

* Icon-only buttons (`WButtonAction`, `WButtonSelectionAction`) expose their tooltip text as `aria-label`, so they have an accessible name
* Select dropdowns use `listbox`/`option` roles, with `aria-selected` and `aria-disabled` on options
* `WModalWrapper` renders as `role="dialog"` with `aria-modal`, and its title is an `h2` that labels the dialog
* Rich/textarea `WInput` (contenteditable) is labelled by its field title
* `WNavBar` renders a `<nav>` landmark
* `WInput` `autofocus` no longer steals focus when the user has already moved into another field within the autofocus delay

### v0.18.1

2026-09-24 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.18.1)

* Add `role="list"` to [WList](/components/list) and `role="listitem"` to its loaded rows — rows are reachable by `getByRole('listitem')` in tests and announced as a list by screen readers; skeleton rows get no role
* Render the [WHeaderBar](/components/header-bar) title as an `h1` instead of a `div` — same classes, so it looks the same, but the page title is now the page heading

### v0.18.0&#x20;

2026-09-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.18.0)

* Add `clearValue` prop to [WSelectSingle](/components/select) and [WSelectAsyncSingle](/components/select) — choose what clearing emits (`null` by default, or `undefined` / `''`), and the `update:model-value` type follows it
* **Breaking**: drop the unused `emptyValue` prop from [WFieldWrapper](/components/field-wrapper), [WInput](/components/input), [WButtonGroup](/components/button-group) and the select components

## 0.17

### v0.17.1

2026-09-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.17.1)

* Fix [WButtonGroup](/components/button-group) height — the group and its skeleton now size from `--w-button-height` (matching other buttons) instead of `--w-input-height`

### v0.17.0&#x20;

2026-09-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.17.0)

* **Breaking**: Restyle [WButtonGroup](/components/button-group) as a segmented control — options now sit on a shared tinted track with the selected one raised, instead of a row of joined WButtons. Button-only props are no longer accepted (`outline`, `borderComponent`, `noBorderComponent`, `download`, `autofocus`, link props); `semanticType`, `loading`, `tooltipText` and the field-wrapper props still work
* Fix WButtonGroup accepting clicks while `loading`, and show a proper field-height skeleton when `skeleton` is set
* Fix [WSkeleton](/components/skeleton) default sizing — skeletons now take up a full line height instead of collapsing to `1em`, so they no longer shift surrounding text when content loads
* Fix [WTabs](/components/tabs) header reserving extra empty space on the right when tabs are not wrapped

## 0.16

### v0.16.7

2026-09-21 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.7)

* Add `count` prop to [WButtonTab](/components/tabs) and to tab items in [WTabs](/components/tabs) — the count is shown formatted in parentheses after the tab title
* Add `embedded` prop to field components and `embedded` to filter `meta` — renders the field without a title or bottom margin and with its options inline. [WInputSuggest](/components/input) in this mode autofocuses and scrolls its options inside the local filter popup
* Fix the local filter picker in [WList](/components/list) offering the wrong filters or missing some when earlier filters are disabled or hidden. Filter toggle buttons are now outlined and highlighted while open
* Fix the WTabs header overflowing into the page's side margin on mobile

### v0.16.6

2026-09-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.6)

* Fix [WTooltip](/components/tooltip) content not updating when the slot's data changes while the tooltip is open
* Fix [WList](/components/list) header padding flickering on mount, and collapse card rows that are left holding only areas spanning into other rows (e.g. the select checkbox beside a hidden field)
* Add a `short` argument to `datetimeFormat` and show the year in `dateFormatShort` for dates outside the current year — `datetimeFormat` now renders `time - date` instead of `date time`
* Allow any `fr` value in `GridCol` (e.g. `2fr`) — `fr` is no longer accepted as the `minmax()` minimum, which CSS treats as invalid

### v0.16.5

2026-09-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.5)

* Add `eslint-plugin-template-security` to the recommended eslint config — all its rules run as `error` on `.ts`, `.tsx`, `.js` and `.vue` files (and `.astro` with the `astro` option), so lint now reports template security issues such as unsafe `v-html`, `javascript:` URLs and `target` links without `rel="noopener"`

### v0.16.4

2026-09-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.4)

* Fix `update` in `createRestModelApi` item-scope actions not updating models with string ids — cached items are now matched by string ids as well as numeric ones
* Export `isQueryModelId` for checking a value against `QueryModelId` (a positive integer or a non-empty string)

### v0.16.3

2026-09-17 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.3)

* Add a `rel` prop to [WLink](/components/links) — forwarded to the rendered `a` or router-link, so `noopener noreferrer` can be set on external links
* Add a `rel` prop to [WButton](/components/button) — applied when the button renders as a link, via either `href` or `to`

### v0.16.2

2026-09-16 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.2)

* Allow clearing the date in [WInputDate](/components/input) — emptying the input now emits `update:model-value` with `undefined` instead of silently restoring the previous date
* Disable the month and year arrows in [WDatePicker](/components/date-picker) and [WDatePickerSingle](/components/date-picker) once `minDate` or `maxDate` is reached — navigation no longer runs past the allowed range, and the calendar opens inside it
* Fix `maxDate` being ignored in WDatePicker and WDatePickerSingle whenever `minDate` was also set — days, weeks and months after `maxDate` are now disabled

### v0.16.1

2026-09-12 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.1)

* Fix `target` being ignored on [WLink](/components/links) when `to` is set — it was only forwarded to plain `<a>` links, so router links always opened in the same tab
* Fix [WChip](/components/chip) ignoring the semantic type background — chips now use the chip color map and respond to `setSemanticTypeChipMap`, instead of always rendering on a gray background
* Fix [WList](/components/list) card layout leaving empty gaps for hidden fields — rows and columns whose areas are all hidden are now dropped from the card grid

### v0.16.0&#x20;

2026-09-09 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.16.0)

* **Breaking**: `useDefaultQuery` is replaced by `createDefaultQuery(modelKey, scope, name, queryFn, isQueryParams?, options?)` — a query is declared once and returns a ready `use` function carrying `config`, `setData`, `setItem` and `removeItem`, keyed as `[modelKey, scope, params, name]`, and a query without params is now called with `undefined` as its first argument
* Add `createRestModelApi` for declaring every query of a model in one config — each entry picks a scope (`single`, `item`, `list`, `paginated`) and gets its own `use` function, plus optional actions that receive `update`/`set`/`invalidate` and roll the cache back automatically when the request rejects
* **Breaking**: the global `QueryOptions`, `UseQueryEmpty`, `UseQueryWithParams` and `UseQueryPaginated` types are removed — `UseQueryDefault<Data, QueryParams>` replaces all four, and the `queryOptions` prop of [WList](/components/list), [WInfiniteList](/components/infinite-list) and [WSelectAsyncList](/components/select) now takes `DefaultQueryOptions<Data>`
* Editing an item in WList or WInfiniteList now updates it in every cached query of that model instead of only the page it was rendered on — the paginated response is no longer rewritten by index
* Fix option content overflowing its cell in [WSelect](/components/select) dropdowns

## 0.15

### v0.15.6

2026-09-01 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.6)

* Add `placeholderEmpty` prop to [WSelect](/components/select) and [WSelectAsync](/components/select) — a separate placeholder shown while nothing is selected, falling back to `placeholder` when not set
* Keep the WSelect placeholder visible while the field is focused instead of clearing it as soon as the input takes focus
* Fix tooltips interfering with the pointer — the tooltip dropdown container no longer captures pointer events, so hovering across it can no longer close or destabilise it

### v0.15.5

2026-08-31 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.5)

* Fix `update:count` in [WList](/components/list) emitting `undefined` before the list has loaded — the count is now emitted only when the list actually reports one
* Fix [WChip](/components/chip) wrapping its label onto several lines — chips now size to their content on a single line
* Update dependencies

### v0.15.4

2026-08-30 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.4)

* Fix [WTabs](/components/tabs) not switching to a tab whose error only appears after validation — the watcher now tracks the error state of the tab items themselves, not just the `hasError` prop, and stays put only while the current tab is one of the invalid ones
* Fix the require-save check in WTabs firing on the wrong tab — moving forward now submits when any tab being skipped over is marked `requireSave`, instead of looking at the tab you are leaving
* Drop the `enableStatus` prop from WTabs — tab status (changes, value, error) is now always tracked, so remove the prop from call sites
* Fix the [WButtonTab](/components/tabs) active underline always using the primary color when `indicator` was not set — it now follows the button's text color

### v0.15.3

2026-08-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.3)

* Render [WNavItemExpand](/components/nav-bar) as a plain nav item when its default slot is empty — no more empty dropdown wrapper around items that have no children
* Add an `indicator` prop to [WTabs](/components/tabs), forwarded to the tab titles — the indicator is now controlled explicitly instead of being inferred from `stepper`
* Fix WTabs container layout — the grid is applied consistently, and the side column template no longer applies in `flat` mode
* Fix spacing of the clear button in select option prefixes

### v0.15.2

2026-08-15 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.2)

* Fix [WInfiniteList](/components/infinite-list) requesting a wrong page when the list is empty
* Add `isVisible` to [WNavItemExpand](/components/nav-bar) exposed props

### v0.15.1

2026-08-11 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.1)

* Fix [WSelectAsync](/components/select) requesting the first page of options twice — its internal lookup query now uses the same page size as the dropdown list, so both share one cached response

### v0.15.0&#x20;

2026-08-10 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.15.0)

* **Breaking**: the `WListCard` export is gone — the row and card rendering of a list item are now one internal component, so any direct import of `eco-vue-js/dist/components/List/WListCard.vue` must be dropped ([WList](/components/list) itself is unaffected)
* Fix the click action on a list item resolving incorrectly — the row now picks exactly one behaviour (select, `hasAction`, `cardTo` link, or expansion toggle), so a list with `alwaysSelect` but selection disabled no longer renders a dead action, and a `cardTo` returning `undefined` for an item falls back to opening its expansion
* Fix WList not reserving the menu column when only `toMarkdown` is passed — `--w-list-right` now accounts for it, so those lists stop overlapping the more button
* Fix [WButton](/components/button) dropping its `class` while in the skeleton state — the class now lands on the skeleton too

## 0.14

### v0.14.4

2026-08-09 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.14.4)

* Fix [WListHeaderItem](/components/list) making a column sortable when it has no field to sort by — such columns now render as a plain header
* Fix [WList](/components/list) not picking up changes to `configKey` and `defaultConfigMap` — the list config now updates when either prop changes

### v0.14.3

2026-08-08 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.14.3)

* Fix `w-hover-circle` stretching into an ellipse on non-square targets — the overlay is now sized from its height and centred with `inset` / `margin: auto` instead of stretching to full width
* Fix the resizer not picking up dark styles — the dark rule was nested inside the `::-webkit-resizer` selector where it never matched, and is now a top-level rule that honours the `.light` opt-out
* Drop the `overflow-x-overlay` and `overflow-y-overlay` utilities — `overflow: overlay` is not supported by browsers; [WButtonDropdown](/components/dropdown-menu), [WSelectAsyncList](/components/select) and [WFilePicker](/components/file-picker) now use `overflow-x-auto` / `overflow-y-auto` instead

### v0.14.2

2026-08-08 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.14.2)

* Fix enter/leave transitions in [WTabs](/components/tabs), [WCheckbox](/components/checkbox) and [WButtonTab](/components/tabs) not animating movement or scaling — Tailwind v4 emits `scale` and `translate` as their own CSS properties, so listing `transform` in the transition never applied to them
* Fix [WNotify](/components/notify) cards not sliding in, for the same reason — the transition now lists `translate`
* Fix the `w-hover-circle` overlay stretching into an ellipse on non-square targets — it is now sized by height with `aspect-ratio: 1 / 1` and centred, instead of filling the box
* Shrink the [WButtonMore](/components/dropdown-menu) icon from `1.25em` to `1.125em` so it sits better inside its hover circle

### v0.14.1

2026-08-08 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.14.1)

* Fix `w-*` utilities that silently emitted no CSS after the Tailwind v4 migration — the theme, variants and utilities are now defined in CSS (`@theme`/`@utility`/`@custom-variant`) instead of JS plugins reading v3 theme scales
* Fix the hover circle opacity on [WCheckbox](/components/checkbox) — it used `w-hover-circle-opacity-0.08`, which produced nothing under v4; opacity utilities now take an integer percentage (`w-hover-circle-opacity-8`)
* Update the README Tailwind setup — no config file or preset is needed, just `@import "eco-vue-js/tailwind-base/base.css"` after `@import "tailwindcss"`

### v0.14.0&#x20;

2026-08-07 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.14.0)

* **Breaking**: the kit now targets Tailwind CSS v4 — consumers must upgrade `tailwindcss` to v4 and migrate their own setup before bumping
* **Breaking**: `tailwind-base` is consumed as CSS, not as a JS preset — drop it from `tailwind.config` and add `@import "eco-vue-js/tailwind-base/base.css"` to your stylesheet, which pulls in the theme and every `w-` plugin
* **Breaking**: theme colors are flattened to single-level keys — utility class names are unchanged (`bg-severity-critical-bg`, `text-black-default` still work), but plugin lookups move from `theme('colors.black.default')` to `theme('colors.black-default')`
* **Breaking**: the eslint Tailwind config now runs eslint-plugin-tailwindcss v4 and resolves the theme from CSS — pass `cssConfigPath` to `recommended()` if your stylesheet is not at `src/assets/styles/styles.css`. `classnames-order` is off for now so that consumer upgrades diff only what actually changed — v4 sorts classes differently and enabling it would touch almost every file; it comes back on in the next release
* Drop the bundled container-queries plugin — Tailwind v4 ships `@container` support natively

## 0.13

### v0.13.10

2026-08-03 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.10)

* Fix z-index stacking in [WModal](/components/modal) — each open modal now reserves two layers, so floating content inside a modal no longer collides with the modal stacked above it
* Keep the previous options visible in [WSelectAsync](/components/select) while a new request is in flight — the dropdown no longer flashes empty when the search text or query params change
* Fix [WInputSuggest](/components/input) dropdown spacing — drop the extra top margin that was applied when the list opened upward next to an error message or `maxLength` counter

### v0.13.9

2026-08-03 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.9)

* Add `contentVisibility` prop to [WList](/components/list) — rows opt into `content-visibility: auto` so offscreen rows skip layout and paint
* Skeleton rows now render plain placeholder cells instead of mounting every field component — set `customSkeleton` on a list field that draws a skeleton of its own to keep it mounted
* Fix nested list fields ignoring the configured column order — ordering is now applied recursively, and the sort runs once per list instead of once per row

### v0.13.8

2026-08-02 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.8)

* Add [WDropdownAdaptive](/components/dropdown-menu) — renders as [WDropdownMenu](/components/dropdown-menu) on desktop and [WBottomSheet](/components/bottom-sheet) on mobile, with a `closeOnClickOutside` prop and a `header` slot for the sheet title; [WInputSuggest](/components/input), the list table settings and the filter picker now use it
* Rework the local list filter — filters render as inline dropdowns in a single row instead of a collapsible side-tab panel, and picking a filter opens it right away
* Add `selectOnly` and `disableSelect` props to [WList](/components/list) — `selectOnly` hides the select-all checkbox and disables shift-range selecting while keeping row selection, `disableSelect` turns selection off entirely
* Pass the row `index` as a second argument to WList `formFieldGetter` and expose `uniformScope` to list menu items

### v0.13.7

2026-07-25 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.7)

* Move the export action in [WList](/components/list) into the bulk actions group — it no longer shows alongside list actions when nothing is selected
* Add `to`, `href`, `tag`, `target` and `replace` props to [WButtonSelectionAction](/components/list) so it can render as a link, matching the other buttons

### v0.13.6

2026-07-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.6)

* Fix ContentEditable allowing backspace/delete to strip the line container and corrupt the editor structure

### v0.13.5

2026-07-21 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.5)

* Stop refocusing the input after clicking the clear button in [WInput](/components/input)
* Remove the `min-w-40` minimum width from the input field when a `prefix` slot is present in WInput
* Forward the `before` slot in [WInputSuggest](/components/input) and expose `focused` in its scope

### v0.13.4

2026-07-21 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.4)

* Restore spacing between tab header and content in [WTabs](/components/tabs) for non-side mode (`mb-4` on the header, replacing the removed container `gap-4`)

### v0.13.3

2026-07-21 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.3)

* Fix `update:current-title` in [WTabs](/components/tabs) not emitting the initial title when the header is hidden (`no-header`) — the title is now watched directly instead of relying on tab activation
* Move header/content `gap-4` in WTabs to side mode only
* Add `submitText` and `disableMinHeight` props to [WModalStepper](/components/modal)

### v0.13.2

2026-07-20 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.2)

* Add default slot to [WButtonMoreItem](/components/dropdown-menu) for custom label content, `text` prop is now optional

### v0.13.1

2026-07-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.1)

* Fix eslint config module resolution: use `import-x/resolver-next` with `createTypeScriptImportResolver` — consumers no longer need `eslint-import-resolver-typescript` as a direct devDependency

### v0.13.0&#x20;

2026-07-18 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.13.0)

* **Breaking**: eslint config now uses eslint-plugin-import-x — rule namespace changed from `import/` to `import-x/`
* Support ESLint 10
* Fix toRef prop typing for vue >=3.5.40 generic components

## 0.12

### v0.12.62

2026-07-17 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.62)

* Disable redundant eslint rules
* Fix arrow rule config

### v0.12.61

2026-07-15 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.61)

* Fix tabs transition position

### v0.12.60

2026-07-11 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.60)

* Fix select prefix slot
* Fix button group props
* Fix input styles

### v0.12.59

2026-07-02 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.59)

* Add no mode setting for [WList](/components/list)

### v0.12.58

2026-07-02 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.58)

* Add input border class prop
* Add prefix prop for select async single

### v0.12.57

2026-06-28 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.57)

* Add page size to params

### v0.12.56

2026-06-27 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.56)

* Fix list padding between pages

### v0.12.55

2026-06-23 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.55)

* Fix tabs stepper intermediate submit

### v0.12.54

2026-06-21 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.54)

* Add stepper intermediate submit support

### v0.12.53

2026-06-19 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.53)

* Audit fix

### v0.12.52

2026-06-07 · [GitHub](https://github.com/rsmple/eco-vue-js/releases/tag/v0.12.52)

* Fix button icons size
