github quasarframework/quasar quasar-v2.27.0

4 hours ago

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-CKB reports ckb, mm reports my and sr-CYR reports sr-Cyrl. The old import paths keep working as deprecated aliases for the whole of Quasar v2, but code comparing $q.lang.isoName against the old values needs updating.

New

  • feat(QFab): open on hover -> new hover, hover-delay and hover-hide-delay props, 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-name prop -> a QTd or QTh wrapped in your own component inside QTable's #body slot can finally say which column it belongs to. The cells used to resolve their column from the vnode key, which Vue never forwards through $attrs, so a wrapped cell rendered nothing. Existing key="..." usage keeps working; col-name takes precedence (#17830)
  • feat(ui/lang): canonical names for three language packs -> import quasar/lang/ckb, quasar/lang/my and quasar/lang/sr-Cyrl for Central Kurdish, Burmese and Serbian Cyrillic. kur-CKB, mm and sr-CYR remain 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 hover menu'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 key set on the grid item slot 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 right inset could not be flipped by the RTL stylesheet (#17943)
  • fix(ui): make overlay content clickable over .q-electron-drag regions 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-value and forward filling, a typed "1" over ###-## with fill-mask="0" was reported as "10000"; with mask AA-AA and fill-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" over AA-##), 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 sr pack, Simplified characters inside zh-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 offset prop of the position engine does not translate the popup, it inflates the anchor box, so middle/center origins are offset-invariant by construction. That is why QTooltip's horizontal offset reads as broken on its default anchor="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's cover drops the offset entirely (#18212)
  • The language-pack build validator now checks string values, not only pack shape: validateStringArray was 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:

Don't miss a new quasar release

NewReleases is sending notifications on new releases.