Releases ​

Every version published to npm, newest first. The same notes are on GitHub Releases.

0.26 ​

v0.26.20 ​

2026-10-27 · GitHub

  • Add deferred and previewData props to WSelectSingle, WSelect, WSelectAsync and WSelectAsyncSingle — 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
  • Fix WNavItem 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

  • Fix WDropdownAdaptive 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

  • Fix WList 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

  • Fix WInfiniteList 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

  • Fix WList 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

  • Lay out WList 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 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

  • Add WQueryStatus — mounted once next to WNotify, 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 — 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 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

  • Add WPageError — 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

  • Add an error state to WInfiniteList and WList — 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

  • 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

  • Fix WSelectAsync 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 placeholder while its unclickable menu is open, and drop the extra bottom margin on mobile
  • Show the placeholder in WInput when unclickable — the input also keeps its width and the mobile text-base size

v0.26.9 ​

2026-10-20 · GitHub

  • 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

v0.26.7 ​

2026-10-19 · GitHub

  • Fix WUniform confimGetter cancel: the field drops its unsaved draft (an async WInput 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 filter button until the field is hovered, unless the filter is active
  • Fix WTabs 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

  • 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

  • Add toggle slot to WButtonMore to open the menu from another button, such as WButtonInput — 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, WButtonInput and WCheckbox 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

  • Fix WInfiniteList 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 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 counter skeleton overlapping the title

v0.26.3 ​

2026-10-15 · GitHub

  • Fix WTabs 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

  • Fix WDragContainer 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

  • 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 breaking ​

2026-10-14 · GitHub

  • Add paginated mode to WInputOptions — 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, and "Duplicate keys" warnings in WInfiniteList when rows share a valueGetter value

0.25 ​

v0.25.2 ​

2026-10-14 · GitHub

  • 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

v0.25.1 ​

2026-10-13 · GitHub

  • Add soft and icon props to WChip — 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 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

  • Add to prop to WTabsItem and WButtonTab — tabs become route links that replace the history entry, and the current route decides which tab is open
  • Add route titles: WHeaderBar 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 also shows the title the open page registers
  • Fix WNotify 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 clipping long text — it now wraps instead of being cut off

0.24 ​

v0.24.0 breaking ​

2026-10-10 · GitHub

  • Add filters to the WList selection bar — put WListFilter 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 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, and iconClass to WInfoCard
  • 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

  • Fix WUniform 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 breaking ​

2026-10-07 · GitHub

  • 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 reads dates typed in the locale's order

0.22 ​

v0.22.1 ​

2026-10-06 · GitHub

  • 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 detecting changes in nested object values
  • Open the WButtonDropdown 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 footer in its dropdown

v0.22.0 breaking ​

2026-10-06 · GitHub

  • Breaking: Overlays now lay out their own content — a WModalWrapper, 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 — list bulk actions that do not fit the bar move into More
  • Ask before closing a modal whose WUniform 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 to put the step title and buttons in the frame — WModalStepper is deprecated in their favour
  • Show toasts at the top edge on phones for every WNotify 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

  • Add horizontalAlign to WNotifyCenterButton 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, and center its empty state
  • Hide the WButtonAction tooltip while the button is active

v0.21.2 ​

2026-10-05 · GitHub

  • Fix WNavItemExpand 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

  • Keep WNotify 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 breaking ​

2026-10-05 · GitHub

  • Add WNotifyCenter and WNotifyCenterButton — 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 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, 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 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

  • Fix async WUniform 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 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 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 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 refetching its chips on select and unselect, keep light primaries such as yellow readable in borders and focus rings (border-tone-line), match WButtonGroup radius and padding to WButton, and ship the docs as Markdown with an llms.txt index in the package

v0.20.5 ​

2026-10-01 · GitHub

  • Fix the line-number gutter background in multiline WInput — it now matches the input background, including one set with w-input-bg-*

v0.20.4 ​

2026-10-01 · GitHub

  • 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

  • Add semanticType prop to WMenuItem and WButtonMoreItem — 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

  • 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

  • Fix WButton 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 breaking ​

2026-10-01 · GitHub

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

  • Fix goto in WInfiniteList 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 and the selects built on it being taller than the editable field — switching to readonly no longer shifts the layout
  • Restyle WProgressBar and WProgressStriped, with the percentage readable over the fill and role="progressbar" for screen readers; WSlider's thumb now grows on hover like WSliderRange's; set --w-chart-heatmap-bg to match WChartHeatmap'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

  • Update WSpinner 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

  • Add loading to WButtonAction — a shimmer runs over the button while its action is in progress — and close its tooltip on click; add semanticType to WCounter, label to WCheckbox and WButtonSelectionAction, and use textFilter of WActionsBar as the filter panel heading; list rows, toolbar buttons and WExpansionItem now expose their names and expanded state to screen readers
  • Fix WSlider filling from the wrong position with a non-zero min, ignoring semanticType and snapping off-step, and WSliderRange rendering without color unless set — it now defaults to primary; WFilePicker no longer accepts drops while readonly and keeps only the first dropped file without multiple
  • Fix WInfiniteList template ref exposing nothing — resetPage, goto, refetchAll, isFetching and isRefetchingAll now work — and refetching the wrong pages after an item changes; fix WModalImport hiding its progress bar and counting finished requests as aborted, WPage continuation pages bumping the section number, and WRouterLink 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, semanticType and noBg from WSliderRange, title from WDatePickerSingle and WListFilter, small from WCounter, showPoints from WChartLine; deprecate searchVisible on WListFilter; make watermark optional on WPage

v0.19.1 ​

2026-09-27 · GitHub

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

v0.19.0 breaking ​

2026-09-27 · GitHub

  • Fix WInput paste button rejecting clipboard text within maxLength and accepting text over it
  • Fix WSelectAsync showing at most 8 chips whatever prefixMax is — it now defaults to 8 and loads that many; WSelectAsyncSingle now emits focus and blur
  • Breaking: replace selectOnClose with searchModel on all selects, and drop unused props and events — light and maxHeight from WTooltip, mandatory and savedText from WToggle and form fields, top, bottom, parentElement and innerClass from WInputSuggest, WInputDate and WSelect, useFirstDefault from WSelectAsync, keypress:backspace from WInput and update:model-value from WSelectAsyncList
  • 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

  • Add disabledItems prop to WButtonGroup, href/target/rel props to WButtonAction (with tag="a") and a right slot to WHeaderBar
  • Fix WInputAsync refusing every save after one invalid value, and WToggle with an array of validate functions always reporting an error
  • Fix WInfiniteList 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 and WTabs render on the server — WList now reads its saved config on mount; useIsMobile breakpoints now match tailwind sm (640px) and xl (1280px), WNavBar and WActionsBar respect --left-margin/--right-margin, and textarea line styles ship in the tailwind base

v0.18.2 ​

2026-09-25 · GitHub

  • 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

  • Add role="list" to WList 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 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 breaking ​

2026-09-23 · GitHub

0.17 ​

v0.17.1 ​

2026-09-23 · GitHub

  • Fix WButtonGroup height — the group and its skeleton now size from --w-button-height (matching other buttons) instead of --w-input-height

v0.17.0 breaking ​

2026-09-23 · GitHub

  • Breaking: Restyle WButtonGroup 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 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 header reserving extra empty space on the right when tabs are not wrapped

0.16 ​

v0.16.7 ​

2026-09-21 · GitHub

  • Add count prop to WButtonTab and to tab items in WTabs — 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 in this mode autofocuses and scrolls its options inside the local filter popup
  • Fix the local filter picker in WList 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

  • Fix WTooltip content not updating when the slot's data changes while the tooltip is open
  • Fix WList 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

  • 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

  • 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

  • Add a rel prop to WLink — forwarded to the rendered a or router-link, so noopener noreferrer can be set on external links
  • Add a rel prop to WButton — applied when the button renders as a link, via either href or to

v0.16.2 ​

2026-09-16 · GitHub

  • Allow clearing the date in WInputDate — 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 and WDatePickerSingle 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

  • Fix target being ignored on WLink when to is set — it was only forwarded to plain <a> links, so router links always opened in the same tab
  • Fix WChip 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 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 breaking ​

2026-09-09 · GitHub

  • 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, WInfiniteList and WSelectAsyncList 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 dropdowns

0.15 ​

v0.15.6 ​

2026-09-01 · GitHub

  • Add placeholderEmpty prop to WSelect and WSelectAsync — 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

  • Fix update:count in WList emitting undefined before the list has loaded — the count is now emitted only when the list actually reports one
  • Fix WChip 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

  • Fix WTabs 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 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

  • Render WNavItemExpand 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, 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

v0.15.1 ​

2026-08-11 · GitHub

  • Fix WSelectAsync 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 breaking ​

2026-08-10 · GitHub

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

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

v0.14.3 ​

2026-08-08 · GitHub

  • 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, WSelectAsyncList and WFilePicker now use overflow-x-auto / overflow-y-auto instead

v0.14.2 ​

2026-08-08 · GitHub

  • Fix enter/leave transitions in WTabs, WCheckbox and WButtonTab 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 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 icon from 1.25em to 1.125em so it sits better inside its hover circle

v0.14.1 ​

2026-08-08 · GitHub

  • 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 — 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 breaking ​

2026-08-07 · GitHub

  • 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

  • Fix z-index stacking in WModal — 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 while a new request is in flight — the dropdown no longer flashes empty when the search text or query params change
  • Fix WInputSuggest 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

  • Add contentVisibility prop to WList — 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

  • Add WDropdownAdaptive — renders as WDropdownMenu on desktop and WBottomSheet on mobile, with a closeOnClickOutside prop and a header slot for the sheet title; WInputSuggest, 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 — 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

  • Move the export action in WList 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 so it can render as a link, matching the other buttons

v0.13.6 ​

2026-07-23 · GitHub

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

v0.13.5 ​

2026-07-21 · GitHub

  • Stop refocusing the input after clicking the clear button in WInput
  • 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 and expose focused in its scope

v0.13.4 ​

2026-07-21 · GitHub

  • Restore spacing between tab header and content in WTabs for non-side mode (mb-4 on the header, replacing the removed container gap-4)

v0.13.3 ​

2026-07-21 · GitHub

  • Fix update:current-title in WTabs 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

v0.13.2 ​

2026-07-20 · GitHub

  • Add default slot to WButtonMoreItem for custom label content, text prop is now optional

v0.13.1 ​

2026-07-18 · GitHub

  • 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 breaking ​

2026-07-18 · GitHub

  • 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

  • Disable redundant eslint rules
  • Fix arrow rule config

v0.12.61 ​

2026-07-15 · GitHub

  • Fix tabs transition position

v0.12.60 ​

2026-07-11 · GitHub

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

v0.12.59 ​

2026-07-02 · GitHub

  • Add no mode setting for WList

v0.12.58 ​

2026-07-02 · GitHub

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

v0.12.57 ​

2026-06-28 · GitHub

  • Add page size to params

v0.12.56 ​

2026-06-27 · GitHub

  • Fix list padding between pages

v0.12.55 ​

2026-06-23 · GitHub

  • Fix tabs stepper intermediate submit

v0.12.54 ​

2026-06-21 · GitHub

  • Add stepper intermediate submit support

v0.12.53 ​

2026-06-19 · GitHub

  • Audit fix

v0.12.52 ​

2026-06-07 · GitHub

  • Fix button icons size