Important
Two behavior changes worth checking before you upgrade:
- A click on the target no longer closes a hover-opened QMenu/QBtnDropdown while it is still animating into view. A single move-and-click gesture can no longer dismiss what it just opened; once the menu is fully shown, clicking toggles it closed exactly as before.
- Three language packs now report a standards-compliant
isoName:kur-CKBreportsckb,mmreportsmyandsr-CYRreportssr-Cyrl. The old import paths keep working as deprecated aliases for the whole of Quasar v2, but code comparing$q.lang.isoNameagainst the old values needs updating.
New
- feat(QFab): open on hover -> new
hover,hover-delayandhover-hide-delayprops, the same contract QMenu and QBtnDropdown got in v2.26. The pointer can cross the gap between the main button and the actions without closing them (150ms grace period by default), touch devices keep tap-toggling, keyboard interaction is untouched, and focus is never moved - feat(QTd/QTh): new
col-nameprop -> a QTd or QTh wrapped in your own component inside QTable's#bodyslot can finally say which column it belongs to. The cells used to resolve their column from the vnodekey, which Vue never forwards through$attrs, so a wrapped cell rendered nothing. Existingkey="..."usage keeps working;col-nametakes precedence (#17830) - feat(ui/lang): canonical names for three language packs -> import
quasar/lang/ckb,quasar/lang/myandquasar/lang/sr-Cyrlfor Central Kurdish, Burmese and Serbian Cyrillic.kur-CKB,mmandsr-CYRremain available as deprecated aliases
Fixes
- fix(QMenu): ignore a click on the target while hover is animating the menu into view -> moving the pointer onto a
hovermenu's target and clicking it in one gesture closed the menu the hover had just opened. Also applies to QBtnDropdown (#18524) - fix(QSelect): keep long selected values inside the parent -> a nowrap value made the field grow past its container instead of truncating (#18015). Based on PR #18525 by Timur Arbaev
- fix(QTable): honor the
keyset on the griditemslot content -> the mapped rows reached Vue as keyless Fragments, so removing a row recreated every card after it instead of moving the surviving instances (#18045) - fix(QScrollArea): put the vertical thumb on the left side in RTL -> the bar moved to the left edge while the thumb stayed glued to the right one, because its inline
rightinset could not be flipped by the RTL stylesheet (#17943) - fix(ui): make overlay content clickable over
.q-electron-dragregions in Electron -> menus, dialogs, notifications and tooltips overlapping a draggable title bar lost the overlapping area to window dragging. An explicit drag class on the content itself still wins, and dialogs keep letting you drag the window (#17285) - fix(use-mask): don't read a fill char that satisfies its own token as data -> with
fill-mask="0"and reverse filling, the unmasked value grew by one fill char per keystroke ("0.01" became "00.01", "000.10", ...), which is the docs' own "Price with 2 decimals" example (#18523) - fix(use-mask): keep the fill padding out of the unmasked value -> with
unmasked-valueand forward filling, a typed "1" over###-##withfill-mask="0"was reported as "10000"; with maskAA-AAandfill-mask="A", "X" became "XAAA" (#18523) - fix(use-mask): follow the data, not the render, when placing the caret -> when the fill char is itself a valid data char, "06" arrived as "60" and, on masks with a leading literal, "09" arrived as "90" (#18523)
- fix(use-mask): unmask masks that mix token types -> under
reverse-fill-mask, every mask mixing letters and digits silently rendered nothing for ordinary values ("ab12" overAA-##), including values the control had just rendered itself (#18523) - fix(use-mask): drop a right-aligned separator nothing filled -> "057" over
AA-##rendered "-57", which unmasked back to "57", so what the field displayed was not a value it could read again (#18523) - fix(ui/lang): repair strings across 51 language packs -> stray quotes and characters, leading/trailing/doubled spaces, broken interpolation, Cyrillic text inside the Latin
srpack, Simplified characters insidezh-TW, untranslated English left in translated packs, and year-range plural/agreement errors in some 40 languages (#18522). Ukrainian was corrected first in PR #18522 by Ihor Diachenko
Other
- docs(popup offset): the
offsetprop of the position engine does not translate the popup, it inflates the anchor box, somiddle/centerorigins are offset-invariant by construction. That is why QTooltip's horizontal offset reads as broken on its defaultanchor="bottom middle". Documented on the API of QMenu, QTooltip, QBtnDropdown, QPopupEdit and QSelect, with the direction each offset component expands in, plus the note that QMenu'scoverdrops the offset entirely (#18212) - The language-pack build validator now checks string values, not only pack shape:
validateStringArraywas declared with four parameters and called with three, so its loop never ran. Every string, array entry and formatter result is now checked for padding, doubled spaces and control characters, and formatters are probed across the counts that select their plural branches
Donations
Quasar Framework is an open-source MIT-licensed project made possible due to the generous contributions by sponsors and backers. If Quasar is useful in your workflow and you want to support ongoing maintenance, please consider the following: