quasar 2.17.7 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/dist/api/QBtnDropdown.json +1 -1
  2. package/dist/api/QDialog.json +1 -1
  3. package/dist/api/QMenu.json +1 -1
  4. package/dist/api/QSelect.json +1 -1
  5. package/dist/api/QTable.json +1 -1
  6. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  7. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  12. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  13. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  42. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  44. package/dist/icon-set/themify.umd.prod.js +1 -1
  45. package/dist/lang/ar-TN.umd.prod.js +2 -2
  46. package/dist/lang/ar.umd.prod.js +2 -2
  47. package/dist/lang/az-Latn.umd.prod.js +2 -2
  48. package/dist/lang/bg.umd.prod.js +2 -2
  49. package/dist/lang/bn.umd.prod.js +2 -2
  50. package/dist/lang/bs-BA.umd.prod.js +2 -2
  51. package/dist/lang/ca.umd.prod.js +2 -2
  52. package/dist/lang/cs.umd.prod.js +2 -2
  53. package/dist/lang/da.umd.prod.js +2 -2
  54. package/dist/lang/de-CH.umd.prod.js +2 -2
  55. package/dist/lang/de-DE.umd.prod.js +2 -2
  56. package/dist/lang/de.umd.prod.js +2 -2
  57. package/dist/lang/el.umd.prod.js +2 -2
  58. package/dist/lang/en-GB.umd.prod.js +2 -2
  59. package/dist/lang/en-US.umd.prod.js +2 -2
  60. package/dist/lang/eo.umd.prod.js +2 -2
  61. package/dist/lang/es.umd.prod.js +2 -2
  62. package/dist/lang/et.umd.prod.js +2 -2
  63. package/dist/lang/eu.umd.prod.js +2 -2
  64. package/dist/lang/fa-IR.umd.prod.js +2 -2
  65. package/dist/lang/fa.umd.prod.js +2 -2
  66. package/dist/lang/fi.umd.prod.js +2 -2
  67. package/dist/lang/fr.umd.prod.js +2 -2
  68. package/dist/lang/gn.umd.prod.js +2 -2
  69. package/dist/lang/he.umd.prod.js +2 -2
  70. package/dist/lang/hi.umd.prod.js +2 -2
  71. package/dist/lang/hr.umd.prod.js +2 -2
  72. package/dist/lang/hu.umd.prod.js +2 -2
  73. package/dist/lang/id.umd.prod.js +2 -2
  74. package/dist/lang/is.umd.prod.js +2 -2
  75. package/dist/lang/it.umd.prod.js +2 -2
  76. package/dist/lang/ja.umd.prod.js +2 -2
  77. package/dist/lang/kk.umd.prod.js +2 -2
  78. package/dist/lang/km.umd.prod.js +2 -2
  79. package/dist/lang/ko-KR.umd.prod.js +2 -2
  80. package/dist/lang/kur-CKB.umd.prod.js +2 -2
  81. package/dist/lang/lt.umd.prod.js +2 -2
  82. package/dist/lang/lu.umd.prod.js +2 -2
  83. package/dist/lang/lv.umd.prod.js +2 -2
  84. package/dist/lang/mk.umd.prod.js +2 -2
  85. package/dist/lang/ml.umd.prod.js +2 -2
  86. package/dist/lang/mm.umd.prod.js +2 -2
  87. package/dist/lang/ms-MY.umd.prod.js +2 -2
  88. package/dist/lang/ms.umd.prod.js +2 -2
  89. package/dist/lang/my.umd.prod.js +2 -2
  90. package/dist/lang/nb-NO.umd.prod.js +2 -2
  91. package/dist/lang/nl.umd.prod.js +2 -2
  92. package/dist/lang/pl.umd.prod.js +2 -2
  93. package/dist/lang/pt-BR.umd.prod.js +2 -2
  94. package/dist/lang/pt.umd.prod.js +2 -2
  95. package/dist/lang/ro.umd.prod.js +2 -2
  96. package/dist/lang/ru.umd.prod.js +2 -2
  97. package/dist/lang/sk.umd.prod.js +2 -2
  98. package/dist/lang/sl.umd.prod.js +2 -2
  99. package/dist/lang/sm.umd.prod.js +2 -2
  100. package/dist/lang/sr-CYR.umd.prod.js +2 -2
  101. package/dist/lang/sr.umd.prod.js +2 -2
  102. package/dist/lang/sv.umd.prod.js +2 -2
  103. package/dist/lang/ta.umd.prod.js +2 -2
  104. package/dist/lang/th.umd.prod.js +2 -2
  105. package/dist/lang/tl.umd.prod.js +2 -2
  106. package/dist/lang/tr.umd.prod.js +2 -2
  107. package/dist/lang/ug.umd.prod.js +2 -2
  108. package/dist/lang/uk.umd.prod.js +2 -2
  109. package/dist/lang/ur-PK.umd.prod.js +7 -0
  110. package/dist/lang/uz-Cyrl.umd.prod.js +2 -2
  111. package/dist/lang/uz-Latn.umd.prod.js +2 -2
  112. package/dist/lang/vi.umd.prod.js +2 -2
  113. package/dist/lang/zh-CN.umd.prod.js +2 -2
  114. package/dist/lang/zh-TW.umd.prod.js +2 -2
  115. package/dist/quasar.client.js +251 -175
  116. package/dist/quasar.css +8 -5
  117. package/dist/quasar.prod.css +1 -1
  118. package/dist/quasar.rtl.css +14 -6
  119. package/dist/quasar.rtl.prod.css +1 -1
  120. package/dist/quasar.sass +8 -5
  121. package/dist/quasar.server.prod.cjs +15 -15
  122. package/dist/quasar.server.prod.js +10 -10
  123. package/dist/quasar.umd.js +251 -175
  124. package/dist/quasar.umd.prod.js +17 -17
  125. package/dist/types/index.d.ts +52 -3
  126. package/dist/vetur/quasar-attributes.json +1 -1
  127. package/dist/vetur/quasar-tags.json +1 -1
  128. package/dist/web-types/web-types.json +1 -1
  129. package/lang/ar-TN.js +14 -1
  130. package/lang/ar.js +14 -1
  131. package/lang/az-Latn.js +14 -1
  132. package/lang/bg.js +14 -1
  133. package/lang/bn.js +14 -1
  134. package/lang/bs-BA.js +14 -1
  135. package/lang/ca.js +14 -1
  136. package/lang/cs.js +14 -1
  137. package/lang/da.js +14 -1
  138. package/lang/de-CH.js +14 -1
  139. package/lang/de-DE.js +14 -1
  140. package/lang/de.js +14 -1
  141. package/lang/el.js +14 -1
  142. package/lang/en-GB.js +14 -1
  143. package/lang/en-US.js +14 -1
  144. package/lang/eo.js +14 -1
  145. package/lang/es.js +14 -1
  146. package/lang/et.js +14 -1
  147. package/lang/eu.js +14 -1
  148. package/lang/fa-IR.js +14 -1
  149. package/lang/fa.js +14 -1
  150. package/lang/fi.js +14 -1
  151. package/lang/fr.js +14 -1
  152. package/lang/gn.js +14 -1
  153. package/lang/he.js +14 -1
  154. package/lang/hi.js +14 -1
  155. package/lang/hr.js +14 -1
  156. package/lang/hu.js +14 -1
  157. package/lang/id.js +14 -1
  158. package/lang/index.json +1 -1
  159. package/lang/is.js +14 -1
  160. package/lang/it.js +14 -1
  161. package/lang/ja.js +14 -1
  162. package/lang/kk.js +14 -1
  163. package/lang/km.js +14 -1
  164. package/lang/ko-KR.js +14 -1
  165. package/lang/kur-CKB.js +14 -1
  166. package/lang/lt.js +14 -1
  167. package/lang/lu.js +14 -1
  168. package/lang/lv.js +14 -1
  169. package/lang/mk.js +14 -1
  170. package/lang/ml.js +14 -1
  171. package/lang/mm.js +14 -1
  172. package/lang/ms-MY.js +14 -1
  173. package/lang/ms.js +14 -1
  174. package/lang/my.js +14 -1
  175. package/lang/nb-NO.js +14 -1
  176. package/lang/nl.js +14 -1
  177. package/lang/pl.js +14 -1
  178. package/lang/pt-BR.js +14 -1
  179. package/lang/pt.js +14 -1
  180. package/lang/ro.js +14 -1
  181. package/lang/ru.js +14 -1
  182. package/lang/sk.js +14 -1
  183. package/lang/sl.js +14 -1
  184. package/lang/sm.js +14 -1
  185. package/lang/sr-CYR.js +14 -1
  186. package/lang/sr.js +14 -1
  187. package/lang/sv.js +14 -1
  188. package/lang/ta.js +14 -1
  189. package/lang/th.js +14 -1
  190. package/lang/tl.js +14 -1
  191. package/lang/tr.js +14 -1
  192. package/lang/ug.js +8 -1
  193. package/lang/uk.js +14 -1
  194. package/lang/ur-PK.js +118 -0
  195. package/lang/uz-Cyrl.js +14 -1
  196. package/lang/uz-Latn.js +14 -1
  197. package/lang/vi.js +14 -1
  198. package/lang/zh-CN.js +14 -1
  199. package/lang/zh-TW.js +14 -1
  200. package/package.json +4 -4
  201. package/src/components/breadcrumbs/QBreadcrumbs.js +2 -2
  202. package/src/components/btn/QBtn.js +7 -8
  203. package/src/components/btn-dropdown/QBtnDropdown.js +10 -4
  204. package/src/components/btn-dropdown/QBtnDropdown.json +21 -0
  205. package/src/components/chip/QChip.sass +8 -4
  206. package/src/components/color/QColor.js +1 -1
  207. package/src/components/date/QDate.js +6 -1
  208. package/src/components/dialog/QDialog.js +2 -2
  209. package/src/components/dialog/QDialog.json +1 -1
  210. package/src/components/drawer/QDrawer.js +3 -5
  211. package/src/components/editor/QEditor.js +1 -1
  212. package/src/components/editor/editor-caret.js +1 -1
  213. package/src/components/editor/editor-utils.js +2 -2
  214. package/src/components/expansion-item/QExpansionItem.js +6 -3
  215. package/src/components/fab/QFab.js +2 -2
  216. package/src/components/form/QForm.js +2 -2
  217. package/src/components/form/QFormChildMixin.js +6 -4
  218. package/src/components/icon/QIcon.js +2 -2
  219. package/src/components/infinite-scroll/QInfiniteScroll.js +2 -4
  220. package/src/components/input/QInput.js +3 -3
  221. package/src/components/item/QItem.js +1 -1
  222. package/src/components/menu/QMenu.js +8 -5
  223. package/src/components/menu/QMenu.json +8 -1
  224. package/src/components/pagination/QPagination.js +8 -4
  225. package/src/components/parallax/QParallax.js +1 -1
  226. package/src/components/popup-edit/QPopupEdit.js +2 -2
  227. package/src/components/pull-to-refresh/QPullToRefresh.js +1 -1
  228. package/src/components/rating/QRating.sass +1 -1
  229. package/src/components/resize-observer/QResizeObserver.js +1 -1
  230. package/src/components/scroll-observer/QScrollObserver.js +2 -2
  231. package/src/components/select/QSelect.js +9 -6
  232. package/src/components/select/QSelect.json +1 -1
  233. package/src/components/slide-transition/QSlideTransition.js +2 -2
  234. package/src/components/stepper/StepHeader.js +1 -1
  235. package/src/components/table/QTable.js +77 -36
  236. package/src/components/table/QTable.json +98 -0
  237. package/src/components/table/QTr.js +4 -1
  238. package/src/components/table/table-sort.js +1 -1
  239. package/src/components/tabs/QTabs.js +2 -2
  240. package/src/components/tabs/use-tab.js +4 -4
  241. package/src/components/time/QTime.js +1 -1
  242. package/src/components/tree/QTree.js +2 -3
  243. package/src/components/virtual-scroll/use-virtual-scroll.js +3 -3
  244. package/src/composables/private.use-field/use-field.js +5 -5
  245. package/src/composables/private.use-file/use-file.js +6 -3
  246. package/src/composables/private.use-model-toggle/use-model-toggle.js +2 -2
  247. package/src/composables/private.use-refocus-target/use-refocus-target.js +6 -5
  248. package/src/composables/private.use-validate/use-validate.js +1 -1
  249. package/src/directives/intersection/Intersection.js +2 -2
  250. package/src/directives/morph/Morph.js +2 -2
  251. package/src/directives/mutation/Mutation.js +2 -2
  252. package/src/directives/touch-hold/TouchHold.js +2 -2
  253. package/src/directives/touch-pan/TouchPan.js +2 -2
  254. package/src/directives/touch-repeat/TouchRepeat.js +3 -3
  255. package/src/directives/touch-swipe/TouchSwipe.js +3 -3
  256. package/src/plugins/lang/Lang.test.js +28 -2
  257. package/src/plugins/loading/Loading.js +1 -1
  258. package/src/plugins/notify/Notify.js +1 -1
  259. package/src/plugins/private.body/Body.js +1 -1
  260. package/src/plugins/private.history/History.js +1 -1
  261. package/src/plugins/screen/Screen.js +1 -1
  262. package/src/utils/morph/morph.js +13 -10
  263. package/src/utils/open-url/open-url.js +3 -3
  264. package/src/utils/private.dialog/create-dialog.js +2 -2
  265. package/src/utils/private.portal/portal.js +1 -1
  266. package/src/components/date/__tests__/QDate.cy.js +0 -189
  267. package/src/components/date/__tests__/use-datetime.cy.js +0 -83
  268. package/src/components/editor/__tests__/QEditor.cy.js +0 -195
  269. package/src/components/field/__tests__/QField.cy.js +0 -156
  270. package/src/components/input/__tests__/QInput.cy.js +0 -786
  271. package/src/components/input/__tests__/use-mask.cy.js +0 -124
  272. package/src/components/menu/__tests__/QMenu.cy.js +0 -634
  273. package/src/components/menu/__tests__/WrapperOne.vue +0 -51
  274. package/src/components/menu/__tests__/WrapperTwo.vue +0 -38
  275. package/src/components/select/__tests__/QSelect.cy.js +0 -2018
  276. package/src/components/table/__tests__/QTable.cy.js +0 -635
  277. package/src/components/table/__tests__/QTd.cy.js +0 -35
  278. package/src/components/table/__tests__/QTh.cy.js +0 -27
  279. package/src/components/table/__tests__/QTr.cy.js +0 -27
  280. package/src/components/tabs/__tests__/QTab.cy.js +0 -79
  281. package/src/components/tabs/__tests__/QTabs.cy.js +0 -147
  282. package/src/components/uploader/__tests__/QUploader.cy.js +0 -191
  283. package/src/composables/__tests__/FieldWrapper.vue +0 -54
  284. package/src/composables/__tests__/use-anchor.cy.js +0 -98
  285. package/src/composables/__tests__/use-field.cy.js +0 -547
  286. package/src/composables/__tests__/use-file.cy.js +0 -69
  287. package/src/composables/__tests__/use-fullscreen.cy.js +0 -37
  288. package/src/composables/__tests__/use-model-toggle.cy.js +0 -350
  289. package/src/composables/__tests__/use-portal.cy.js +0 -4
  290. package/src/composables/__tests__/use-router-link.cy.js +0 -55
  291. package/src/composables/__tests__/use-validate.cy.js +0 -257
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Quasar Framework v2.17.7
2
+ * Quasar Framework v2.18.1
3
3
  * (c) 2015-present Razvan Stoenescu
4
4
  * Released under the MIT License.
5
5
  */
@@ -504,7 +504,7 @@ var Screen_default = createReactivePlugin({
504
504
  visualViewport.width * visualViewport.scale + window.innerWidth - scrollingElement.clientWidth,
505
505
  visualViewport.height * visualViewport.scale + window.innerHeight - scrollingElement.clientHeight
506
506
  ];
507
- const classes = $q.config.screen !== void 0 && $q.config.screen.bodyClasses === true;
507
+ const classes = $q.config.screen?.bodyClasses === true;
508
508
  this.__update = (force) => {
509
509
  const [w, h138] = getSize();
510
510
  if (h138 !== this.height) {
@@ -742,7 +742,7 @@ var Body_default = {
742
742
  if (false) {
743
743
  const { $q, ssrContext } = opts;
744
744
  const cls = getBodyClasses($q.platform, $q.config);
745
- if ($q.config.screen !== void 0 && $q.config.screen.bodyClass === true) {
745
+ if ($q.config.screen?.bodyClass === true) {
746
746
  cls.push("screen--xs");
747
747
  }
748
748
  ssrContext._meta.bodyClasses += cls.join(" ");
@@ -802,7 +802,7 @@ var History_default = {
802
802
  const { cordova: cordova2, capacitor } = client.is;
803
803
  if (cordova2 !== true && capacitor !== true) return;
804
804
  const qConf = $q.config[cordova2 === true ? "cordova" : "capacitor"];
805
- if (qConf !== void 0 && qConf.backButton === false) return;
805
+ if (qConf?.backButton === false) return;
806
806
  if (
807
807
  // if we're on Capacitor mode
808
808
  capacitor === true && (window.Capacitor === void 0 || window.Capacitor.Plugins.App === void 0)
@@ -877,7 +877,14 @@ var en_US_default = {
877
877
  firstDayOfWeek: 0,
878
878
  // 0-6, 0 - Sunday, 1 Monday, ...
879
879
  format24h: false,
880
- pluralDay: "days"
880
+ pluralDay: "days",
881
+ prevMonth: "Previous month",
882
+ nextMonth: "Next month",
883
+ prevYear: "Previous year",
884
+ nextYear: "Next year",
885
+ today: "Today",
886
+ prevRangeYears: (range) => `Previous ${range} years`,
887
+ nextRangeYears: (range) => `Next ${range} years`
881
888
  },
882
889
  table: {
883
890
  noData: "No data available",
@@ -889,6 +896,12 @@ var en_US_default = {
889
896
  pagination: (start, end, total) => start + "-" + end + " of " + total,
890
897
  columns: "Columns"
891
898
  },
899
+ pagination: {
900
+ first: "First page",
901
+ prev: "Previous page",
902
+ next: "Next page",
903
+ last: "Last page"
904
+ },
892
905
  editor: {
893
906
  url: "URL",
894
907
  bold: "Bold",
@@ -1392,7 +1405,7 @@ function prepareApp(app2, uiOpts, pluginOpts) {
1392
1405
  }
1393
1406
  var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext) {
1394
1407
  const $q = {
1395
- version: "2.17.7",
1408
+ version: "2.18.1",
1396
1409
  config: opts.config || {}
1397
1410
  };
1398
1411
  Object.assign(ssrContext, {
@@ -1422,7 +1435,7 @@ var install_quasar_default = false ? function(parentApp, opts = {}, ssrContext)
1422
1435
  ssrContext
1423
1436
  });
1424
1437
  } : function(parentApp, opts = {}) {
1425
- const $q = { version: "2.17.7" };
1438
+ const $q = { version: "2.18.1" };
1426
1439
  if (globalConfigIsFrozen === false) {
1427
1440
  if (opts.config !== void 0) {
1428
1441
  Object.assign(globalConfig, opts.config);
@@ -1764,7 +1777,9 @@ var libMap = {
1764
1777
  "ion-logo": ionFn,
1765
1778
  "iconfont ": sameFn,
1766
1779
  "ti-": (i) => `themify-icon ${i}`,
1767
- "bi-": (i) => `bootstrap-icons ${i}`
1780
+ "bi-": (i) => `bootstrap-icons ${i}`,
1781
+ "i-": sameFn
1782
+ // UnoCSS pure icons
1768
1783
  };
1769
1784
  var matMap = {
1770
1785
  o_: "-outlined",
@@ -1884,8 +1899,7 @@ var QIcon_default = createComponent({
1884
1899
  const data = {
1885
1900
  class: classes.value,
1886
1901
  style: sizeStyle.value,
1887
- "aria-hidden": "true",
1888
- role: "presentation"
1902
+ "aria-hidden": "true"
1889
1903
  };
1890
1904
  if (type.value.none === true) {
1891
1905
  return h3(props4.tag, data, hSlot(slots.default));
@@ -2166,9 +2180,9 @@ var QBreadcrumbs_default = createComponent({
2166
2180
  );
2167
2181
  if (vnodes.length === 0) return;
2168
2182
  let els = 1;
2169
- const child = [], len = vnodes.filter((c) => c.type !== void 0 && c.type.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2183
+ const child = [], len = vnodes.filter((c) => c.type?.name === "QBreadcrumbsEl").length, separator = slots.separator !== void 0 ? slots.separator : () => props4.separator;
2170
2184
  vnodes.forEach((comp) => {
2171
- if (comp.type !== void 0 && comp.type.name === "QBreadcrumbsEl") {
2185
+ if (comp.type?.name === "QBreadcrumbsEl") {
2172
2186
  const middle = els < len;
2173
2187
  const disabled = comp.props !== null && disabledValues.includes(comp.props.disable);
2174
2188
  const cls = (middle === true ? "" : " q-breadcrumbs--last") + (disabled !== true && middle === true ? activeClass.value : "");
@@ -2894,11 +2908,11 @@ var QBtn_default = createComponent({
2894
2908
  if (e.defaultPrevented === true) return;
2895
2909
  const el = document.activeElement;
2896
2910
  if (props4.type === "submit" && el !== document.body && rootRef.value.contains(el) === false && el.contains(rootRef.value) === false) {
2897
- rootRef.value.focus();
2911
+ e.qAvoidFocus !== true && rootRef.value.focus();
2898
2912
  const onClickCleanup = () => {
2899
2913
  document.removeEventListener("keydown", stopAndPrevent, true);
2900
2914
  document.removeEventListener("keyup", onClickCleanup, passiveCapture);
2901
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onClickCleanup, passiveCapture);
2915
+ rootRef.value?.removeEventListener("blur", onClickCleanup, passiveCapture);
2902
2916
  };
2903
2917
  document.addEventListener("keydown", stopAndPrevent, true);
2904
2918
  document.addEventListener("keyup", onClickCleanup, passiveCapture);
@@ -2913,7 +2927,7 @@ var QBtn_default = createComponent({
2913
2927
  if (isKeyCode(e, [13, 32]) === true && keyboardTarget !== rootRef.value) {
2914
2928
  keyboardTarget !== null && cleanup();
2915
2929
  if (e.defaultPrevented !== true) {
2916
- rootRef.value.focus();
2930
+ e.qAvoidFocus !== true && rootRef.value.focus();
2917
2931
  keyboardTarget = rootRef.value;
2918
2932
  rootRef.value.classList.add("q-btn--active");
2919
2933
  document.addEventListener("keyup", onPressEnd, true);
@@ -2953,8 +2967,8 @@ var QBtn_default = createComponent({
2953
2967
  }
2954
2968
  function onPressEnd(e) {
2955
2969
  if (rootRef.value === null) return;
2956
- if (e !== void 0 && e.type === "blur" && document.activeElement === rootRef.value) return;
2957
- if (e !== void 0 && e.type === "keyup") {
2970
+ if (e?.type === "blur" && document.activeElement === rootRef.value) return;
2971
+ if (e?.type === "keyup") {
2958
2972
  if (keyboardTarget === rootRef.value && isKeyCode(e, [13, 32]) === true) {
2959
2973
  const evt = new MouseEvent("click", e);
2960
2974
  evt.qKeyEvent = true;
@@ -2987,10 +3001,10 @@ var QBtn_default = createComponent({
2987
3001
  }
2988
3002
  if (keyboardTarget === rootRef.value) {
2989
3003
  document.removeEventListener("keyup", onPressEnd, true);
2990
- rootRef.value !== null && rootRef.value.removeEventListener("blur", onPressEnd, passiveCapture);
3004
+ rootRef.value?.removeEventListener("blur", onPressEnd, passiveCapture);
2991
3005
  keyboardTarget = null;
2992
3006
  }
2993
- rootRef.value !== null && rootRef.value.classList.remove("q-btn--active");
3007
+ rootRef.value?.classList.remove("q-btn--active");
2994
3008
  }
2995
3009
  function onLoadingEvt(evt) {
2996
3010
  stopAndPrevent(evt);
@@ -3370,7 +3384,7 @@ function use_model_toggle_default({
3370
3384
  }
3371
3385
  }
3372
3386
  function show(evt) {
3373
- if (props4.disable === true || evt !== void 0 && evt.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3387
+ if (props4.disable === true || evt?.qAnchorHandled === true || canShow !== void 0 && canShow(evt) !== true) return;
3374
3388
  const listener = props4["onUpdate:modelValue"] !== void 0;
3375
3389
  if (listener === true && true) {
3376
3390
  emit("update:modelValue", true);
@@ -3539,7 +3553,7 @@ function closePortalMenus(proxy, evt) {
3539
3553
  }
3540
3554
  } else if (proxy.__qPortal === true) {
3541
3555
  const parent = getParentProxy(proxy);
3542
- if (parent !== void 0 && parent.$options.name === "QPopupProxy") {
3556
+ if (parent?.$options.name === "QPopupProxy") {
3543
3557
  proxy.hide(evt);
3544
3558
  return parent;
3545
3559
  } else {
@@ -4251,6 +4265,7 @@ var QMenu_default = createComponent({
4251
4265
  persistent: Boolean,
4252
4266
  autoClose: Boolean,
4253
4267
  separateClosePopup: Boolean,
4268
+ noEscDismiss: Boolean,
4254
4269
  noRouteDismiss: Boolean,
4255
4270
  noRefocus: Boolean,
4256
4271
  noFocus: Boolean,
@@ -4400,7 +4415,7 @@ var QMenu_default = createComponent({
4400
4415
  anchorCleanup(true);
4401
4416
  if (refocusTarget !== null && // menu was hidden from code or ESC plugin
4402
4417
  (evt === void 0 || evt.qClickOutside !== true)) {
4403
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4418
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
4404
4419
  refocusTarget = null;
4405
4420
  }
4406
4421
  registerTimeout(() => {
@@ -4444,8 +4459,10 @@ var QMenu_default = createComponent({
4444
4459
  }
4445
4460
  }
4446
4461
  function onEscapeKey(evt) {
4447
- emit("escapeKey");
4448
- hide(evt);
4462
+ if (props4.noEscDismiss !== true) {
4463
+ emit("escapeKey");
4464
+ hide(evt);
4465
+ }
4449
4466
  }
4450
4467
  function updatePosition() {
4451
4468
  setPosition({
@@ -4580,8 +4597,11 @@ var QBtnDropdown_default = createComponent({
4580
4597
  contentStyle: [Array, String, Object],
4581
4598
  cover: Boolean,
4582
4599
  persistent: Boolean,
4600
+ noEscDismiss: Boolean,
4583
4601
  noRouteDismiss: Boolean,
4584
4602
  autoClose: Boolean,
4603
+ noRefocus: Boolean,
4604
+ noFocus: Boolean,
4585
4605
  menuAnchor: {
4586
4606
  type: String,
4587
4607
  default: "bottom end"
@@ -4620,7 +4640,7 @@ var QBtnDropdown_default = createComponent({
4620
4640
  const btnDesignAttr = computed20(() => getBtnDesignAttr(props4));
4621
4641
  const btnProps = computed20(() => passBtnProps(props4));
4622
4642
  watch6(() => props4.modelValue, (val) => {
4623
- menuRef.value !== null && menuRef.value[val ? "show" : "hide"]();
4643
+ menuRef.value?.[val ? "show" : "hide"]();
4624
4644
  });
4625
4645
  watch6(() => props4.split, hide);
4626
4646
  function onBeforeShow(e) {
@@ -4648,13 +4668,13 @@ var QBtnDropdown_default = createComponent({
4648
4668
  emit("click", e);
4649
4669
  }
4650
4670
  function toggle(evt) {
4651
- menuRef.value !== null && menuRef.value.toggle(evt);
4671
+ menuRef.value?.toggle(evt);
4652
4672
  }
4653
4673
  function show(evt) {
4654
- menuRef.value !== null && menuRef.value.show(evt);
4674
+ menuRef.value?.show(evt);
4655
4675
  }
4656
4676
  function hide(evt) {
4657
- menuRef.value !== null && menuRef.value.hide(evt);
4677
+ menuRef.value?.hide(evt);
4658
4678
  }
4659
4679
  Object.assign(proxy, {
4660
4680
  show,
@@ -4680,8 +4700,11 @@ var QBtnDropdown_default = createComponent({
4680
4700
  cover: props4.cover,
4681
4701
  fit: true,
4682
4702
  persistent: props4.persistent,
4703
+ noEscDismiss: props4.noEscDismiss,
4683
4704
  noRouteDismiss: props4.noRouteDismiss,
4684
4705
  autoClose: props4.autoClose,
4706
+ noFocus: props4.noFocus,
4707
+ noRefocus: props4.noRefocus,
4685
4708
  anchor: props4.menuAnchor,
4686
4709
  self: props4.menuSelf,
4687
4710
  offset: props4.menuOffset,
@@ -5138,8 +5161,8 @@ var TouchSwipe_default = createDirective(
5138
5161
  if (ctx.event === void 0) return;
5139
5162
  cleanEvt(ctx, "temp");
5140
5163
  client.is.firefox === true && preventDraggable(el, false);
5141
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
5142
- evt !== void 0 && ctx.event.dir !== false && stopAndPrevent(evt);
5164
+ ctx.styleCleanup?.(true);
5165
+ if (evt !== void 0 && ctx.event.dir !== false) stopAndPrevent(evt);
5143
5166
  ctx.event = void 0;
5144
5167
  }
5145
5168
  };
@@ -5172,7 +5195,7 @@ var TouchSwipe_default = createDirective(
5172
5195
  cleanEvt(ctx, "main");
5173
5196
  cleanEvt(ctx, "temp");
5174
5197
  client.is.firefox === true && preventDraggable(el, false);
5175
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
5198
+ ctx.styleCleanup?.();
5176
5199
  delete el.__qtouchswipe;
5177
5200
  }
5178
5201
  }
@@ -5901,11 +5924,12 @@ function use_refocus_target_default(props4, rootRef) {
5901
5924
  });
5902
5925
  function refocusTarget(e) {
5903
5926
  const root = rootRef.value;
5904
- if (e !== void 0 && e.type.indexOf("key") === 0) {
5905
- if (root !== null && document.activeElement !== root && root.contains(document.activeElement) === true) {
5927
+ if (e?.qAvoidFocus === true) return;
5928
+ if (e?.type.indexOf("key") === 0) {
5929
+ if (document.activeElement !== root && root?.contains(document.activeElement) === true) {
5906
5930
  root.focus();
5907
5931
  }
5908
- } else if (refocusRef.value !== null && (e === void 0 || root !== null && root.contains(e.target) === true)) {
5932
+ } else if (refocusRef.value !== null && (e === void 0 || root?.contains(e.target) === true)) {
5909
5933
  refocusRef.value.focus();
5910
5934
  }
5911
5935
  }
@@ -6659,7 +6683,7 @@ var TouchPan_default = createDirective(
6659
6683
  cleanEvt(ctx, "temp");
6660
6684
  client.is.firefox === true && preventDraggable(el, false);
6661
6685
  if (abort === true) {
6662
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6686
+ ctx.styleCleanup?.();
6663
6687
  if (ctx.event.detected !== true && ctx.initialEvent !== void 0) {
6664
6688
  ctx.initialEvent.target.dispatchEvent(ctx.initialEvent.event);
6665
6689
  }
@@ -6710,7 +6734,7 @@ var TouchPan_default = createDirective(
6710
6734
  cleanEvt(ctx, "main");
6711
6735
  cleanEvt(ctx, "temp");
6712
6736
  client.is.firefox === true && preventDraggable(el, false);
6713
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
6737
+ ctx.styleCleanup?.();
6714
6738
  delete el.__qtouchpan;
6715
6739
  }
6716
6740
  }
@@ -7426,7 +7450,7 @@ var QResizeObserver_default = createComponent({
7426
7450
  }
7427
7451
  }, onObjLoad = function() {
7428
7452
  cleanup();
7429
- if (targetEl && targetEl.contentDocument) {
7453
+ if (targetEl?.contentDocument) {
7430
7454
  curDocView = targetEl.contentDocument.defaultView;
7431
7455
  curDocView.addEventListener("resize", trigger3, listenOpts.passive);
7432
7456
  emitEvent();
@@ -7748,7 +7772,7 @@ var QTabs_default = createComponent({
7748
7772
  }
7749
7773
  function updateActiveRoute() {
7750
7774
  let name2 = null, bestScore = { matchedLen: 0, queryDiff: 9999, hrefLen: 0 };
7751
- const list = tabDataList.filter((tab) => tab.routeData !== void 0 && tab.routeData.hasRouterLink.value === true);
7775
+ const list = tabDataList.filter((tab) => tab.routeData?.hasRouterLink.value === true);
7752
7776
  const { hash: currentHash, query: currentQuery } = proxy.$route;
7753
7777
  const currentQueryLen = Object.keys(currentQuery).length;
7754
7778
  for (const tab of list) {
@@ -7881,7 +7905,7 @@ var QTabs_default = createComponent({
7881
7905
  function cleanup() {
7882
7906
  animateTimer !== null && clearTimeout(animateTimer);
7883
7907
  stopAnimScroll();
7884
- unwatchRoute !== void 0 && unwatchRoute();
7908
+ unwatchRoute?.();
7885
7909
  }
7886
7910
  let hadRouteWatcher, hadActivated;
7887
7911
  onBeforeUnmount12(cleanup);
@@ -7979,11 +8003,11 @@ function use_tab_default(props4, slots, emit, routeData) {
7979
8003
  );
7980
8004
  const tabIndex = computed39(() => props4.disable === true || $tabs.hasFocus.value === true || isActive.value === false && $tabs.hasActiveTab.value === true ? -1 : props4.tabindex || 0);
7981
8005
  function onClick(e, keyboard) {
7982
- if (keyboard !== true && blurTargetRef.value !== null) {
7983
- blurTargetRef.value.focus();
8006
+ if (keyboard !== true && e?.qAvoidFocus !== true) {
8007
+ blurTargetRef.value?.focus();
7984
8008
  }
7985
8009
  if (props4.disable === true) {
7986
- if (routeData !== void 0 && routeData.hasRouterLink.value === true) {
8010
+ if (routeData?.hasRouterLink.value === true) {
7987
8011
  stopAndPrevent(e);
7988
8012
  }
7989
8013
  return;
@@ -8002,7 +8026,7 @@ function use_tab_default(props4, slots, emit, routeData) {
8002
8026
  }).then((softError) => {
8003
8027
  if (reqId === $tabs.avoidRouteWatcher) {
8004
8028
  $tabs.avoidRouteWatcher = false;
8005
- if (hardError === void 0 && (softError === void 0 || softError.message !== void 0 && softError.message.startsWith("Avoided redundant navigation") === true)) {
8029
+ if (hardError === void 0 && (softError === void 0 || softError.message?.startsWith("Avoided redundant navigation") === true)) {
8006
8030
  $tabs.updateModel({ name: props4.name });
8007
8031
  }
8008
8032
  }
@@ -8661,7 +8685,7 @@ var QColor_default = createComponent({
8661
8685
  model.value.v = hsv.v;
8662
8686
  }
8663
8687
  updateModel2(rgb2, change);
8664
- if (evt !== void 0 && change !== true && evt.target.selectionEnd !== void 0) {
8688
+ if (change !== true && evt?.target.selectionEnd !== void 0) {
8665
8689
  const index = evt.target.selectionEnd;
8666
8690
  nextTick5(() => {
8667
8691
  evt.target.setSelectionRange(index, index);
@@ -10727,7 +10751,7 @@ var QDate_default = createComponent({
10727
10751
  }
10728
10752
  function toggleDate(date, monthHash) {
10729
10753
  const month = daysMap.value[monthHash];
10730
- const fn = month !== void 0 && month.includes(date.day) === true ? removeFromModel : addToModel;
10754
+ const fn = month?.includes(date.day) === true ? removeFromModel : addToModel;
10731
10755
  fn(date);
10732
10756
  }
10733
10757
  function getShortDate(date) {
@@ -10896,6 +10920,7 @@ var QDate_default = createComponent({
10896
10920
  props4.todayBtn === true ? h38(QBtn_default, {
10897
10921
  class: "q-date__header-today self-start",
10898
10922
  icon: $q.iconSet.datetime.today,
10923
+ ariaLabel: $q.lang.date.today,
10899
10924
  flat: true,
10900
10925
  size: "sm",
10901
10926
  round: true,
@@ -10916,6 +10941,7 @@ var QDate_default = createComponent({
10916
10941
  size: "sm",
10917
10942
  flat: true,
10918
10943
  icon: dateArrow.value[0],
10944
+ ariaLabel: type === "Years" ? $q.lang.date.prevYear : $q.lang.date.prevMonth,
10919
10945
  tabindex: tabindex.value,
10920
10946
  disable: boundaries.prev === false,
10921
10947
  ...getCache("go-#" + type, { onClick() {
@@ -10950,6 +10976,7 @@ var QDate_default = createComponent({
10950
10976
  size: "sm",
10951
10977
  flat: true,
10952
10978
  icon: dateArrow.value[1],
10979
+ ariaLabel: type === "Years" ? $q.lang.date.nextYear : $q.lang.date.nextMonth,
10953
10980
  tabindex: tabindex.value,
10954
10981
  disable: boundaries.next === false,
10955
10982
  ...getCache("go+#" + type, { onClick() {
@@ -11105,6 +11132,7 @@ var QDate_default = createComponent({
11105
11132
  dense: true,
11106
11133
  flat: true,
11107
11134
  icon: dateArrow.value[0],
11135
+ ariaLabel: $q.lang.date.prevRangeYears(yearsInterval),
11108
11136
  tabindex: tabindex.value,
11109
11137
  disable: isDisabled(start),
11110
11138
  ...getCache("y-", { onClick: () => {
@@ -11123,6 +11151,7 @@ var QDate_default = createComponent({
11123
11151
  dense: true,
11124
11152
  flat: true,
11125
11153
  icon: dateArrow.value[1],
11154
+ ariaLabel: $q.lang.date.nextRangeYears(yearsInterval),
11126
11155
  tabindex: tabindex.value,
11127
11156
  disable: isDisabled(stop2),
11128
11157
  ...getCache("y+", { onClick: () => {
@@ -11499,7 +11528,7 @@ var QDialog_default = createComponent({
11499
11528
  showPortal();
11500
11529
  animating.value = true;
11501
11530
  if (props4.noFocus !== true) {
11502
- document.activeElement !== null && document.activeElement.blur();
11531
+ document.activeElement?.blur();
11503
11532
  registerTick(focus);
11504
11533
  } else {
11505
11534
  removeTick();
@@ -11532,7 +11561,7 @@ var QDialog_default = createComponent({
11532
11561
  animating.value = true;
11533
11562
  hidePortal();
11534
11563
  if (refocusTarget !== null) {
11535
- ((evt && evt.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11564
+ ((evt?.type.indexOf("key") === 0 ? refocusTarget.closest('[tabindex]:not([tabindex^="-"])') : void 0) || refocusTarget).focus();
11536
11565
  refocusTarget = null;
11537
11566
  }
11538
11567
  registerTimeout(() => {
@@ -11762,7 +11791,7 @@ var QDrawer_default = createComponent({
11762
11791
  applyPosition(0);
11763
11792
  if (belowBreakpoint.value === true) {
11764
11793
  const otherInstance = $layout.instances[otherSide.value];
11765
- if (otherInstance !== void 0 && otherInstance.belowBreakpoint === true) {
11794
+ if (otherInstance?.belowBreakpoint === true) {
11766
11795
  otherInstance.hide(false);
11767
11796
  }
11768
11797
  applyBackdrop(1);
@@ -12002,9 +12031,7 @@ var QDrawer_default = createComponent({
12002
12031
  timerMini = setTimeout(() => {
12003
12032
  timerMini = null;
12004
12033
  flagMiniAnimate.value = false;
12005
- if (vm2 && vm2.proxy && vm2.proxy.$el) {
12006
- vm2.proxy.$el.classList.remove("q-drawer--mini-animate");
12007
- }
12034
+ vm2?.proxy?.$el?.classList.remove("q-drawer--mini-animate");
12008
12035
  }, 150);
12009
12036
  }
12010
12037
  function onOpenPan(evt) {
@@ -12102,7 +12129,7 @@ var QDrawer_default = createComponent({
12102
12129
  });
12103
12130
  });
12104
12131
  onBeforeUnmount16(() => {
12105
- layoutTotalWidthWatcher !== void 0 && layoutTotalWidthWatcher();
12132
+ layoutTotalWidthWatcher?.();
12106
12133
  if (timerMini !== null) {
12107
12134
  clearTimeout(timerMini);
12108
12135
  timerMini = null;
@@ -12249,7 +12276,7 @@ var Caret = class {
12249
12276
  }
12250
12277
  get range() {
12251
12278
  const sel = this.selection;
12252
- if (sel !== null && sel.rangeCount) {
12279
+ if (sel?.rangeCount) {
12253
12280
  return sel.getRangeAt(0);
12254
12281
  }
12255
12282
  return this._range;
@@ -12716,7 +12743,7 @@ var QItem_default = createComponent({
12716
12743
  });
12717
12744
  function onClick(e) {
12718
12745
  if (isClickable.value === true) {
12719
- if (blurTargetRef.value !== null) {
12746
+ if (blurTargetRef.value !== null && e.qAvoidFocus !== true) {
12720
12747
  if (e.qKeyEvent !== true && document.activeElement === rootRef.value) {
12721
12748
  blurTargetRef.value.focus();
12722
12749
  } else if (document.activeElement === blurTargetRef.value) {
@@ -12819,7 +12846,7 @@ function getBtn(eVm, btn, clickHandler, active = false) {
12819
12846
  disable: btn.disable ? typeof btn.disable === "function" ? btn.disable(eVm) : true : false,
12820
12847
  size: "sm",
12821
12848
  onClick(e) {
12822
- clickHandler && clickHandler();
12849
+ clickHandler?.();
12823
12850
  run(e, btn, eVm);
12824
12851
  }
12825
12852
  }, () => child);
@@ -12863,7 +12890,7 @@ function getDropdown(eVm, btn) {
12863
12890
  dense: true,
12864
12891
  onClick(e) {
12865
12892
  closeDropdown();
12866
- eVm.contentRef.value !== null && eVm.contentRef.value.focus();
12893
+ e?.qAvoidFocus !== true && eVm.contentRef.value?.focus();
12867
12894
  eVm.caret.restore();
12868
12895
  run(e, btn2, eVm);
12869
12896
  }
@@ -13437,7 +13464,7 @@ var QEditor_default = createComponent({
13437
13464
  }
13438
13465
  function focus() {
13439
13466
  addFocusFn(() => {
13440
- contentRef.value !== null && contentRef.value.focus({ preventScroll: true });
13467
+ contentRef.value?.focus({ preventScroll: true });
13441
13468
  });
13442
13469
  }
13443
13470
  function getContentEl() {
@@ -13558,7 +13585,7 @@ var QSlideTransition_default = createComponent({
13558
13585
  let animating = false, doneFn, element;
13559
13586
  let timer2 = null, timerFallback = null, animListener, lastEvent;
13560
13587
  function cleanup() {
13561
- doneFn && doneFn();
13588
+ doneFn?.();
13562
13589
  doneFn = null;
13563
13590
  animating = false;
13564
13591
  if (timer2 !== null) {
@@ -13569,7 +13596,7 @@ var QSlideTransition_default = createComponent({
13569
13596
  clearTimeout(timerFallback);
13570
13597
  timerFallback = null;
13571
13598
  }
13572
- element !== void 0 && element.removeEventListener("transitionend", animListener);
13599
+ element?.removeEventListener("transitionend", animListener);
13573
13600
  animListener = null;
13574
13601
  }
13575
13602
  function begin(el, height2, done) {
@@ -13795,7 +13822,7 @@ var QExpansionItem_default = createComponent({
13795
13822
  };
13796
13823
  });
13797
13824
  watch18(() => props4.group, (name2) => {
13798
- exitGroup !== void 0 && exitGroup();
13825
+ exitGroup?.();
13799
13826
  name2 !== void 0 && enterGroup();
13800
13827
  });
13801
13828
  function onHeaderClick(e) {
@@ -13806,7 +13833,9 @@ var QExpansionItem_default = createComponent({
13806
13833
  e.keyCode === 13 && toggleIcon(e, true);
13807
13834
  }
13808
13835
  function toggleIcon(e, keyboard) {
13809
- keyboard !== true && blurTargetRef.value !== null && blurTargetRef.value.focus();
13836
+ if (keyboard !== true && e.qAvoidFocus !== true) {
13837
+ blurTargetRef.value?.focus();
13838
+ }
13810
13839
  toggle(e);
13811
13840
  stopAndPrevent(e);
13812
13841
  }
@@ -13963,7 +13992,7 @@ var QExpansionItem_default = createComponent({
13963
13992
  }
13964
13993
  props4.group !== void 0 && enterGroup();
13965
13994
  onBeforeUnmount20(() => {
13966
- exitGroup !== void 0 && exitGroup();
13995
+ exitGroup?.();
13967
13996
  });
13968
13997
  return () => h49("div", { class: classes.value }, [
13969
13998
  h49("div", { class: "q-expansion-item__container relative-position" }, getContent())
@@ -14128,8 +14157,8 @@ var QFab_default = createComponent({
14128
14157
  showing,
14129
14158
  onChildClick(evt) {
14130
14159
  hide(evt);
14131
- if (triggerRef.value !== null) {
14132
- triggerRef.value.$el.focus();
14160
+ if (evt?.qAvoidFocus !== true) {
14161
+ triggerRef.value?.$el.focus();
14133
14162
  }
14134
14163
  }
14135
14164
  });
@@ -14391,7 +14420,7 @@ function use_validate_default(focused, innerLoading) {
14391
14420
  }
14392
14421
  const debouncedValidate = debounce_default(validate, 0);
14393
14422
  onBeforeUnmount22(() => {
14394
- unwatchRules !== void 0 && unwatchRules();
14423
+ unwatchRules?.();
14395
14424
  debouncedValidate.cancel();
14396
14425
  });
14397
14426
  Object.assign(proxy, { resetValidation, validate });
@@ -14581,11 +14610,11 @@ function use_field_default(state) {
14581
14610
  });
14582
14611
  function focusHandler() {
14583
14612
  const el = document.activeElement;
14584
- let target2 = state.targetRef !== void 0 && state.targetRef.value;
14613
+ let target2 = state.targetRef?.value;
14585
14614
  if (target2 && (el === null || el.id !== state.targetUid.value)) {
14586
14615
  target2.hasAttribute("tabindex") === true || (target2 = target2.querySelector("[tabindex]"));
14587
- if (target2 && target2 !== el) {
14588
- target2.focus({ preventScroll: true });
14616
+ if (target2 !== el) {
14617
+ target2?.focus({ preventScroll: true });
14589
14618
  }
14590
14619
  }
14591
14620
  }
@@ -14618,13 +14647,13 @@ function use_field_default(state) {
14618
14647
  state.focused.value = false;
14619
14648
  emit("blur", e);
14620
14649
  }
14621
- then !== void 0 && then();
14650
+ then?.();
14622
14651
  });
14623
14652
  }
14624
14653
  function clearValue(e) {
14625
14654
  stopAndPrevent(e);
14626
14655
  if ($q.platform.is.mobile !== true) {
14627
- const el = state.targetRef !== void 0 && state.targetRef.value || state.rootRef.value;
14656
+ const el = state.targetRef?.value || state.rootRef.value;
14628
14657
  el.focus();
14629
14658
  } else if (state.rootRef.value.contains(document.activeElement) === true) {
14630
14659
  document.activeElement.blur();
@@ -14869,7 +14898,9 @@ function filterFiles(files, rejectedFiles, failedPropValidation, filterFn) {
14869
14898
  return acceptedFiles;
14870
14899
  }
14871
14900
  function stopAndPreventDrag(e) {
14872
- e && e.dataTransfer && (e.dataTransfer.dropEffect = "copy");
14901
+ if (e?.dataTransfer) {
14902
+ e.dataTransfer.dropEffect = "copy";
14903
+ }
14873
14904
  stopAndPrevent(e);
14874
14905
  }
14875
14906
  var useFileProps = {
@@ -14906,11 +14937,11 @@ function use_file_default({
14906
14937
  if (e !== Object(e)) {
14907
14938
  e = { target: null };
14908
14939
  }
14909
- if (e.target !== null && e.target.matches('input[type="file"]') === true) {
14940
+ if (e.target?.matches('input[type="file"]') === true) {
14910
14941
  e.clientX === 0 && e.clientY === 0 && stop(e);
14911
14942
  } else {
14912
14943
  const input = getFileInput();
14913
- input && input !== e.target && input.click(e);
14944
+ if (input !== e.target) input?.click(e);
14914
14945
  }
14915
14946
  }
14916
14947
  }
@@ -15473,7 +15504,7 @@ var QForm_default = createComponent({
15473
15504
  if (index === validateIndex && val === true) {
15474
15505
  if (props4.onSubmit !== void 0) {
15475
15506
  emit("submit", evt);
15476
- } else if (evt !== void 0 && evt.target !== void 0 && typeof evt.target.submit === "function") {
15507
+ } else if (evt?.target !== void 0 && typeof evt.target.submit === "function") {
15477
15508
  evt.target.submit();
15478
15509
  }
15479
15510
  }
@@ -15493,7 +15524,7 @@ var QForm_default = createComponent({
15493
15524
  addFocusFn(() => {
15494
15525
  if (rootRef.value === null) return;
15495
15526
  const target2 = rootRef.value.querySelector("[autofocus][tabindex], [data-autofocus][tabindex]") || rootRef.value.querySelector("[autofocus] [tabindex], [data-autofocus] [tabindex]") || rootRef.value.querySelector("[autofocus], [data-autofocus]") || Array.prototype.find.call(rootRef.value.querySelectorAll("[tabindex]"), (el) => el.tabIndex !== -1);
15496
- target2 !== null && target2 !== void 0 && target2.focus({ preventScroll: true });
15527
+ target2?.focus({ preventScroll: true });
15497
15528
  });
15498
15529
  }
15499
15530
  provide3(formKey, {
@@ -15561,12 +15592,14 @@ var QFormChildMixin_default = {
15561
15592
  }
15562
15593
  },
15563
15594
  mounted() {
15564
- const $form = this.$.provides[formKey];
15565
- $form !== void 0 && this.disable !== true && $form.bindComponent(this);
15595
+ if (this.disable !== true) {
15596
+ this.$.provides[formKey]?.bindComponent(this);
15597
+ }
15566
15598
  },
15567
15599
  beforeUnmount() {
15568
- const $form = this.$.provides[formKey];
15569
- $form !== void 0 && this.disable !== true && $form.unbindComponent(this);
15600
+ if (this.disable !== true) {
15601
+ this.$.provides[formKey]?.unbindComponent(this);
15602
+ }
15570
15603
  }
15571
15604
  };
15572
15605
 
@@ -16044,9 +16077,7 @@ var QInfiniteScroll_default = createComponent({
16044
16077
  isWorking.value = false;
16045
16078
  isFetching.value = false;
16046
16079
  localScrollTarget.removeEventListener("scroll", poll, passive2);
16047
- if (poll !== void 0 && poll.cancel !== void 0) {
16048
- poll.cancel();
16049
- }
16080
+ poll?.cancel?.();
16050
16081
  }
16051
16082
  }
16052
16083
  function updateScrollTarget() {
@@ -16131,7 +16162,7 @@ var QInfiniteScroll_default = createComponent({
16131
16162
  const vm2 = getCurrentInstance47();
16132
16163
  Object.assign(vm2.proxy, {
16133
16164
  poll: () => {
16134
- poll !== void 0 && poll();
16165
+ poll?.();
16135
16166
  },
16136
16167
  trigger: trigger3,
16137
16168
  stop: stop2,
@@ -16742,7 +16773,7 @@ var QInput_default = createComponent({
16742
16773
  });
16743
16774
  }
16744
16775
  function select() {
16745
- inputRef.value !== null && inputRef.value.select();
16776
+ inputRef.value?.select();
16746
16777
  }
16747
16778
  function onPaste(e) {
16748
16779
  if (hasMask.value === true && props4.reverseFillMask !== true) {
@@ -16835,7 +16866,7 @@ var QInput_default = createComponent({
16835
16866
  clearTimeout(emitTimer);
16836
16867
  emitTimer = null;
16837
16868
  }
16838
- emitValueFn !== void 0 && emitValueFn();
16869
+ emitValueFn?.();
16839
16870
  emit("change", e.target.value);
16840
16871
  }
16841
16872
  function onFinishEditing(e) {
@@ -16844,7 +16875,7 @@ var QInput_default = createComponent({
16844
16875
  clearTimeout(emitTimer);
16845
16876
  emitTimer = null;
16846
16877
  }
16847
- emitValueFn !== void 0 && emitValueFn();
16878
+ emitValueFn?.();
16848
16879
  typedNumber = false;
16849
16880
  stopValueWatcher = false;
16850
16881
  delete temp.value;
@@ -16936,7 +16967,7 @@ function update2(el, ctx, value2) {
16936
16967
  }
16937
16968
  if (changed2 === true) {
16938
16969
  ctx.cfg = cfg;
16939
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16970
+ ctx.observer?.unobserve(el);
16940
16971
  ctx.observer = new IntersectionObserver(([entry]) => {
16941
16972
  if (typeof ctx.handler === "function") {
16942
16973
  if (entry.rootBounds === null && document.body.contains(el) === true) {
@@ -16956,7 +16987,7 @@ function update2(el, ctx, value2) {
16956
16987
  function destroy(el) {
16957
16988
  const ctx = el.__qvisible;
16958
16989
  if (ctx !== void 0) {
16959
- ctx.observer !== void 0 && ctx.observer.unobserve(el);
16990
+ ctx.observer?.unobserve(el);
16960
16991
  delete el.__qvisible;
16961
16992
  }
16962
16993
  }
@@ -17315,7 +17346,7 @@ var QScrollObserver_default = createComponent({
17315
17346
  configureScrollTarget();
17316
17347
  });
17317
17348
  function emitEvent() {
17318
- clearTimer !== null && clearTimer();
17349
+ clearTimer?.();
17319
17350
  const top = Math.max(0, getVerticalScrollPosition(localScrollTarget));
17320
17351
  const left = getHorizontalScrollPosition(localScrollTarget);
17321
17352
  const delta = {
@@ -17362,7 +17393,7 @@ var QScrollObserver_default = createComponent({
17362
17393
  configureScrollTarget();
17363
17394
  });
17364
17395
  onBeforeUnmount28(() => {
17365
- clearTimer !== null && clearTimer();
17396
+ clearTimer?.();
17366
17397
  unconfigureScrollTarget();
17367
17398
  });
17368
17399
  Object.assign(proxy, {
@@ -18404,14 +18435,16 @@ var QPagination_default = createComponent({
18404
18435
  getBtn2({
18405
18436
  key: "bls",
18406
18437
  disable: props4.disable || props4.modelValue <= minProp.value,
18407
- icon: icons.value[0]
18438
+ icon: icons.value[0],
18439
+ "aria-label": $q.lang.pagination.first
18408
18440
  }, minProp.value)
18409
18441
  );
18410
18442
  contentEnd.unshift(
18411
18443
  getBtn2({
18412
18444
  key: "ble",
18413
18445
  disable: props4.disable || props4.modelValue >= maxProp.value,
18414
- icon: icons.value[3]
18446
+ icon: icons.value[3],
18447
+ "aria-label": $q.lang.pagination.last
18415
18448
  }, maxProp.value)
18416
18449
  );
18417
18450
  }
@@ -18420,14 +18453,16 @@ var QPagination_default = createComponent({
18420
18453
  getBtn2({
18421
18454
  key: "bdp",
18422
18455
  disable: props4.disable || props4.modelValue <= minProp.value,
18423
- icon: icons.value[1]
18456
+ icon: icons.value[1],
18457
+ "aria-label": $q.lang.pagination.prev
18424
18458
  }, props4.modelValue - 1)
18425
18459
  );
18426
18460
  contentEnd.unshift(
18427
18461
  getBtn2({
18428
18462
  key: "bdn",
18429
18463
  disable: props4.disable || props4.modelValue >= maxProp.value,
18430
- icon: icons.value[2]
18464
+ icon: icons.value[2],
18465
+ "aria-label": $q.lang.pagination.next
18431
18466
  }, props4.modelValue + 1)
18432
18467
  );
18433
18468
  }
@@ -18646,7 +18681,7 @@ var QParallax_default = createComponent({
18646
18681
  });
18647
18682
  onBeforeUnmount30(() => {
18648
18683
  stop2();
18649
- observer !== void 0 && observer.disconnect();
18684
+ observer?.disconnect();
18650
18685
  mediaEl.onload = mediaEl.onloadstart = mediaEl.loadedmetadata = null;
18651
18686
  });
18652
18687
  return () => {
@@ -18837,10 +18872,10 @@ var QPopupEdit_default = createComponent({
18837
18872
  set: set2,
18838
18873
  cancel,
18839
18874
  show(e) {
18840
- menuRef.value !== null && menuRef.value.show(e);
18875
+ menuRef.value?.show(e);
18841
18876
  },
18842
18877
  hide(e) {
18843
- menuRef.value !== null && menuRef.value.hide(e);
18878
+ menuRef.value?.hide(e);
18844
18879
  },
18845
18880
  updatePosition
18846
18881
  });
@@ -19139,7 +19174,7 @@ var QPullToRefresh_default = createComponent({
19139
19174
  timer2 = setTimeout(() => {
19140
19175
  timer2 = null;
19141
19176
  animating.value = false;
19142
- done && done();
19177
+ done?.();
19143
19178
  }, 300);
19144
19179
  }
19145
19180
  function updateScrollTarget() {
@@ -20112,7 +20147,7 @@ var setOverflowAnchor = __QUASAR_SSR__ || window.getComputedStyle(document.body)
20112
20147
  delete el2.dataset.qVsAnchor;
20113
20148
  });
20114
20149
  const el = children[index];
20115
- if (el && el.dataset) {
20150
+ if (el?.dataset) {
20116
20151
  el.dataset.qVsAnchor = "";
20117
20152
  }
20118
20153
  });
@@ -20384,7 +20419,7 @@ function useVirtualScroll({
20384
20419
  if (rangeChanged === true && contentEl !== null && contentEl !== activeElement && contentEl.contains(activeElement) === true) {
20385
20420
  contentEl.addEventListener("focusout", onBlurRefocusFn);
20386
20421
  setTimeout(() => {
20387
- contentEl !== null && contentEl.removeEventListener("focusout", onBlurRefocusFn);
20422
+ contentEl?.removeEventListener("focusout", onBlurRefocusFn);
20388
20423
  });
20389
20424
  }
20390
20425
  setOverflowAnchor(contentEl, toIndex - from);
@@ -20448,7 +20483,7 @@ function useVirtualScroll({
20448
20483
  }
20449
20484
  }
20450
20485
  function onBlurRefocusFn() {
20451
- contentRef.value !== null && contentRef.value !== void 0 && contentRef.value.focus();
20486
+ contentRef.value?.focus();
20452
20487
  }
20453
20488
  function localResetVirtualScroll(toIndex, fullReset) {
20454
20489
  const defaultSize = 1 * virtualScrollItemSizeComputed.value;
@@ -20786,7 +20821,7 @@ var QSelect_default = createComponent({
20786
20821
  () => innerValue.value.map((opt) => getOptionLabel.value(opt)).join(", ")
20787
20822
  );
20788
20823
  const ariaCurrentValue = computed89(() => props4.displayValue !== void 0 ? props4.displayValue : selectedString.value);
20789
- const needsHtmlFn = computed89(() => props4.optionsHtml === true ? () => true : (opt) => opt !== void 0 && opt !== null && opt.html === true);
20824
+ const needsHtmlFn = computed89(() => props4.optionsHtml === true ? () => true : (opt) => opt?.html === true);
20790
20825
  const valueAsHtml = computed89(() => props4.displayValueHtml === true || props4.displayValue === void 0 && (props4.optionsHtml === true || innerValue.value.some(needsHtmlFn.value)));
20791
20826
  const tabindex = computed89(() => state.focused.value === true ? props4.tabindex : -1);
20792
20827
  const comboboxAttrs = computed89(() => {
@@ -20960,13 +20995,15 @@ var QSelect_default = createComponent({
20960
20995
  );
20961
20996
  hidePopup();
20962
20997
  }
20963
- targetRef.value !== null && targetRef.value.focus();
20998
+ targetRef.value?.focus();
20964
20999
  if (innerValue.value.length === 0 || isDeepEqual(getOptionValue.value(innerValue.value[0]), optValue) !== true) {
20965
21000
  emit("update:modelValue", props4.emitValue === true ? optValue : opt);
20966
21001
  }
20967
21002
  return;
20968
21003
  }
20969
- (hasDialog !== true || dialogFieldFocused.value === true) && state.focus();
21004
+ if (hasDialog !== true || dialogFieldFocused.value === true) {
21005
+ state.focus();
21006
+ }
20970
21007
  selectInputText();
20971
21008
  if (innerValue.value.length === 0) {
20972
21009
  const val = props4.emitValue === true ? optValue : opt;
@@ -21171,7 +21208,7 @@ var QSelect_default = createComponent({
21171
21208
  const fn = mode === "toggle" ? toggleOption : add;
21172
21209
  fn(val, mode === "add-unique");
21173
21210
  if (props4.multiple !== true) {
21174
- targetRef.value !== null && targetRef.value.focus();
21211
+ targetRef.value?.focus();
21175
21212
  hidePopup();
21176
21213
  }
21177
21214
  };
@@ -21221,6 +21258,7 @@ var QSelect_default = createComponent({
21221
21258
  }
21222
21259
  return [
21223
21260
  h87("span", {
21261
+ class: "ellipsis",
21224
21262
  [valueAsHtml.value === true ? "innerHTML" : "textContent"]: ariaCurrentValue.value
21225
21263
  })
21226
21264
  ];
@@ -21416,7 +21454,7 @@ var QSelect_default = createComponent({
21416
21454
  }
21417
21455
  function onDialogFieldFocus(e) {
21418
21456
  stop(e);
21419
- targetRef.value !== null && targetRef.value.focus();
21457
+ targetRef.value?.focus();
21420
21458
  dialogFieldFocused.value = true;
21421
21459
  window.scrollTo(window.pageXOffset || window.scrollX || document.body.scrollLeft || 0, 0);
21422
21460
  }
@@ -21645,7 +21683,7 @@ var QSelect_default = createComponent({
21645
21683
  prevent(e);
21646
21684
  if (hasDialog !== true && menu.value === true) {
21647
21685
  closeMenu();
21648
- targetRef.value !== null && targetRef.value.focus();
21686
+ targetRef.value?.focus();
21649
21687
  return;
21650
21688
  }
21651
21689
  showPopup(e);
@@ -22624,7 +22662,7 @@ var StepHeader_default = createComponent({
22624
22662
  });
22625
22663
  const ripple = computed93(() => props4.stepper.headerNav !== true ? false : headerNav.value);
22626
22664
  function onActivate() {
22627
- blurRef.value !== null && blurRef.value.focus();
22665
+ blurRef.value?.focus();
22628
22666
  isActive.value === false && props4.goToPanel(props4.step.name);
22629
22667
  }
22630
22668
  function onKeyup2(e) {
@@ -23127,7 +23165,7 @@ function useTableSort(props4, computedPagination, colList, setPagination) {
23127
23165
  col = col.name;
23128
23166
  } else {
23129
23167
  const def = colList.value.find((def2) => def2.name === col);
23130
- if (def !== void 0 && def.sortOrder) {
23168
+ if (def?.sortOrder) {
23131
23169
  sortOrder = def.sortOrder;
23132
23170
  }
23133
23171
  }
@@ -23562,10 +23600,14 @@ var QTable_default = createComponent({
23562
23600
  tableClass: [String, Array, Object],
23563
23601
  tableHeaderStyle: [String, Array, Object],
23564
23602
  tableHeaderClass: [String, Array, Object],
23603
+ tableRowStyleFn: Function,
23604
+ tableRowClassFn: Function,
23565
23605
  cardContainerClass: [String, Array, Object],
23566
23606
  cardContainerStyle: [String, Array, Object],
23567
23607
  cardStyle: [String, Array, Object],
23568
23608
  cardClass: [String, Array, Object],
23609
+ cardStyleFn: Function,
23610
+ cardClassFn: Function,
23569
23611
  hideBottom: Boolean,
23570
23612
  hideSelectedBanner: Boolean,
23571
23613
  hideNoData: Boolean,
@@ -23601,16 +23643,16 @@ var QTable_default = createComponent({
23601
23643
  const cardDefaultClass = computed102(
23602
23644
  () => " q-table__card" + (isDark.value === true ? " q-table__card--dark q-dark" : "") + (props4.square === true ? " q-table--square" : "") + (props4.flat === true ? " q-table--flat" : "") + (props4.bordered === true ? " q-table--bordered" : "")
23603
23645
  );
23604
- const __containerClass = computed102(
23646
+ const containerClass = computed102(
23605
23647
  () => `q-table__container q-table--${props4.separator}-separator column no-wrap` + (props4.grid === true ? " q-table--grid" : cardDefaultClass.value) + (isDark.value === true ? " q-table--dark" : "") + (props4.dense === true ? " q-table--dense" : "") + (props4.wrapCells === false ? " q-table--no-wrap" : "") + (inFullscreen.value === true ? " fullscreen scroll" : "")
23606
23648
  );
23607
- const containerClass = computed102(
23608
- () => __containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23649
+ const rootContainerClass = computed102(
23650
+ () => containerClass.value + (props4.loading === true ? " q-table--loading" : "")
23609
23651
  );
23610
23652
  watch44(
23611
- () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + __containerClass.value,
23653
+ () => props4.tableStyle + props4.tableClass + props4.tableHeaderStyle + props4.tableHeaderClass + containerClass.value,
23612
23654
  () => {
23613
- hasVirtScroll.value === true && virtScrollRef.value !== null && virtScrollRef.value.reset();
23655
+ hasVirtScroll.value === true && virtScrollRef.value?.reset();
23614
23656
  }
23615
23657
  );
23616
23658
  const {
@@ -23778,13 +23820,23 @@ var QTable_default = createComponent({
23778
23820
  function getTBodyTR(row, bodySlot, pageIndex) {
23779
23821
  const key = getRowKey.value(row), selected = isRowSelected(key);
23780
23822
  if (bodySlot !== void 0) {
23823
+ const cfg = {
23824
+ key,
23825
+ row,
23826
+ pageIndex,
23827
+ __trClass: selected ? "selected" : ""
23828
+ };
23829
+ if (props4.tableRowStyleFn !== void 0) {
23830
+ cfg.__trStyle = props4.tableRowStyleFn(row);
23831
+ }
23832
+ if (props4.tableRowClassFn !== void 0) {
23833
+ const cls = props4.tableRowClassFn(row);
23834
+ if (cls) {
23835
+ cfg.__trClass = `${cls} ${cfg.__trClass}`;
23836
+ }
23837
+ }
23781
23838
  return bodySlot(
23782
- getBodyScope({
23783
- key,
23784
- row,
23785
- pageIndex,
23786
- __trClass: selected ? "selected" : ""
23787
- })
23839
+ getBodyScope(cfg)
23788
23840
  );
23789
23841
  }
23790
23842
  const bodyCell = slots["body-cell"], child = computedCols.value.map((col) => {
@@ -23830,6 +23882,15 @@ var QTable_default = createComponent({
23830
23882
  emit("rowContextmenu", evt, row, pageIndex);
23831
23883
  };
23832
23884
  }
23885
+ if (props4.tableRowStyleFn !== void 0) {
23886
+ data.style = props4.tableRowStyleFn(row);
23887
+ }
23888
+ if (props4.tableRowClassFn !== void 0) {
23889
+ const cls = props4.tableRowClassFn(row);
23890
+ if (cls) {
23891
+ data.class[cls] = true;
23892
+ }
23893
+ }
23833
23894
  return h121("tr", data, child);
23834
23895
  }
23835
23896
  function getTBody() {
@@ -24083,28 +24144,26 @@ var QTable_default = createComponent({
24083
24144
  child.push(
24084
24145
  h121("div", { class: "q-table__separator col" })
24085
24146
  );
24086
- if (hasOpts === true) {
24087
- child.push(
24088
- h121("div", { class: "q-table__control" }, [
24089
- h121("span", { class: "q-table__bottom-item" }, [
24090
- props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24091
- ]),
24092
- h121(QSelect_default, {
24093
- class: "q-table__select inline q-table__bottom-item",
24094
- color: props4.color,
24095
- modelValue: rowsPerPage,
24096
- options: computedRowsPerPageOptions.value,
24097
- displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24098
- dark: isDark.value,
24099
- borderless: true,
24100
- dense: true,
24101
- optionsDense: true,
24102
- optionsCover: true,
24103
- "onUpdate:modelValue": onPagSelection
24104
- })
24105
- ])
24106
- );
24107
- }
24147
+ hasOpts === true && child.push(
24148
+ h121("div", { class: "q-table__control" }, [
24149
+ h121("span", { class: "q-table__bottom-item" }, [
24150
+ props4.rowsPerPageLabel || $q.lang.table.recordsPerPage
24151
+ ]),
24152
+ h121(QSelect_default, {
24153
+ class: "q-table__select inline q-table__bottom-item",
24154
+ color: props4.color,
24155
+ modelValue: rowsPerPage,
24156
+ options: computedRowsPerPageOptions.value,
24157
+ displayValue: rowsPerPage === 0 ? $q.lang.table.allRows : rowsPerPage,
24158
+ dark: isDark.value,
24159
+ borderless: true,
24160
+ dense: true,
24161
+ optionsDense: true,
24162
+ optionsCover: true,
24163
+ "onUpdate:modelValue": onPagSelection
24164
+ })
24165
+ ])
24166
+ );
24108
24167
  if (paginationSlot !== void 0) {
24109
24168
  control = paginationSlot(marginalsScope.value);
24110
24169
  } else {
@@ -24129,6 +24188,7 @@ var QTable_default = createComponent({
24129
24188
  ...btnProps,
24130
24189
  icon: navIcon.value[0],
24131
24190
  disable: isFirstPage.value,
24191
+ ariaLabel: $q.lang.pagination.first,
24132
24192
  onClick: firstPage
24133
24193
  })
24134
24194
  );
@@ -24138,6 +24198,7 @@ var QTable_default = createComponent({
24138
24198
  ...btnProps,
24139
24199
  icon: navIcon.value[1],
24140
24200
  disable: isFirstPage.value,
24201
+ ariaLabel: $q.lang.pagination.prev,
24141
24202
  onClick: prevPage
24142
24203
  }),
24143
24204
  h121(QBtn_default, {
@@ -24145,6 +24206,7 @@ var QTable_default = createComponent({
24145
24206
  ...btnProps,
24146
24207
  icon: navIcon.value[2],
24147
24208
  disable: isLastPage.value,
24209
+ ariaLabel: $q.lang.pagination.next,
24148
24210
  onClick: nextPage
24149
24211
  })
24150
24212
  );
@@ -24154,6 +24216,7 @@ var QTable_default = createComponent({
24154
24216
  ...btnProps,
24155
24217
  icon: navIcon.value[3],
24156
24218
  disable: isLastPage.value,
24219
+ ariaLabel: $q.lang.pagination.last,
24157
24220
  onClick: lastPage
24158
24221
  })
24159
24222
  );
@@ -24205,6 +24268,15 @@ var QTable_default = createComponent({
24205
24268
  ],
24206
24269
  style: props4.cardStyle
24207
24270
  };
24271
+ if (props4.cardStyleFn !== void 0) {
24272
+ data.style = [data.style, props4.cardStyleFn(scope.row)];
24273
+ }
24274
+ if (props4.cardClassFn !== void 0) {
24275
+ const cls = props4.cardClassFn(scope.row);
24276
+ if (cls) {
24277
+ data.class[0] += ` ${cls}`;
24278
+ }
24279
+ }
24208
24280
  if (props4.onRowClick !== void 0 || props4.onRowDblclick !== void 0 || props4.onRowContextmenu !== void 0) {
24209
24281
  data.class[0] += " cursor-pointer";
24210
24282
  if (props4.onRowClick !== void 0) {
@@ -24266,7 +24338,7 @@ var QTable_default = createComponent({
24266
24338
  });
24267
24339
  return () => {
24268
24340
  const child = [getTopDiv()];
24269
- const data = { ref: rootRef, class: containerClass.value };
24341
+ const data = { ref: rootRef, class: rootContainerClass.value };
24270
24342
  if (props4.grid === true) {
24271
24343
  child.push(getGridHeader());
24272
24344
  } else {
@@ -24301,7 +24373,10 @@ var QTr_default = createComponent({
24301
24373
  const classes = computed103(
24302
24374
  () => "q-tr" + (props4.props === void 0 || props4.props.header === true ? "" : " " + props4.props.__trClass) + (props4.noHover === true ? " q-tr--no-hover" : "")
24303
24375
  );
24304
- return () => h122("tr", { class: classes.value }, hSlot(slots.default));
24376
+ return () => h122("tr", {
24377
+ style: props4.props?.__trStyle,
24378
+ class: classes.value
24379
+ }, hSlot(slots.default));
24305
24380
  }
24306
24381
  });
24307
24382
 
@@ -24508,7 +24583,7 @@ var QTime_default = createComponent({
24508
24583
  }
24509
24584
  const pos = [];
24510
24585
  for (let val = start, index = start; val <= end; val += step, index++) {
24511
- const actualVal = val + offset2, disable = values !== void 0 && values.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24586
+ const actualVal = val + offset2, disable = values?.includes(actualVal) === false, label = view.value === "hour" && val === 0 ? computedFormat24h.value === true ? "00" : "12" : val;
24512
24587
  pos.push({ val: actualVal, index, disable, label });
24513
24588
  }
24514
24589
  return pos;
@@ -25377,7 +25452,7 @@ var QTree_default = createComponent({
25377
25452
  node[props4.childrenKey] = Array.isArray(children) === true ? children : [];
25378
25453
  nextTick21(() => {
25379
25454
  const localMeta = meta.value[key];
25380
- if (localMeta && localMeta.isParent === true) {
25455
+ if (localMeta?.isParent === true) {
25381
25456
  localSetExpanded(key, true);
25382
25457
  }
25383
25458
  });
@@ -25602,8 +25677,7 @@ var QTree_default = createComponent({
25602
25677
  ]);
25603
25678
  }
25604
25679
  function blur(key) {
25605
- const blurTarget = blurTargets[key];
25606
- blurTarget && blurTarget.focus();
25680
+ blurTargets[key]?.focus();
25607
25681
  }
25608
25682
  function onClick(node, meta2, e, keyboard) {
25609
25683
  keyboard !== true && meta2.selectable !== false && blur(meta2.key);
@@ -26569,7 +26643,7 @@ function morph(_options) {
26569
26643
  elFrom.qMorphCancel = () => {
26570
26644
  cancelStatus = true;
26571
26645
  elFromClone.remove();
26572
- elFromTween !== void 0 && elFromTween.remove();
26646
+ elFromTween?.remove();
26573
26647
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26574
26648
  elFrom.qMorphCancel = void 0;
26575
26649
  };
@@ -26594,7 +26668,7 @@ function morph(_options) {
26594
26668
  elTo.qMorphCancel = () => {
26595
26669
  cancelStatus = true;
26596
26670
  elFromClone.remove();
26597
- elFromTween !== void 0 && elFromTween.remove();
26671
+ elFromTween?.remove();
26598
26672
  options.hideFromClone === true && elFromClone.classList.remove("q-morph--internal");
26599
26673
  options.keepToClone !== true && elTo.classList.remove("q-morph--internal");
26600
26674
  elFrom.qMorphCancel = void 0;
@@ -26750,10 +26824,12 @@ function morph(_options) {
26750
26824
  elTo.style.cssText = elToStyleSaved;
26751
26825
  elTo.className = elToClassSaved;
26752
26826
  }
26753
- elToClone.parentNode === elToParent && elToParent.insertBefore(elTo, elToClone);
26827
+ if (elToClone.parentNode === elToParent) {
26828
+ elToParent.insertBefore(elTo, elToClone);
26829
+ }
26754
26830
  elFromClone.remove();
26755
26831
  elToClone.remove();
26756
- elFromTween !== void 0 && elFromTween.remove();
26832
+ elFromTween?.remove();
26757
26833
  cancel = () => false;
26758
26834
  elFrom.qMorphCancel = void 0;
26759
26835
  elTo.qMorphCancel = void 0;
@@ -26885,9 +26961,9 @@ function morph(_options) {
26885
26961
  delay: options.delay
26886
26962
  });
26887
26963
  const cleanup = (abort) => {
26888
- animationFromClone !== void 0 && animationFromClone.cancel();
26889
- animationFromTween !== void 0 && animationFromTween.cancel();
26890
- animationToClone !== void 0 && animationToClone.cancel();
26964
+ animationFromClone?.cancel();
26965
+ animationFromTween?.cancel();
26966
+ animationToClone?.cancel();
26891
26967
  animationTo.cancel();
26892
26968
  animationTo.removeEventListener("finish", cleanup);
26893
26969
  animationTo.removeEventListener("cancel", cleanup);
@@ -26918,9 +26994,9 @@ function morph(_options) {
26918
26994
  return true;
26919
26995
  }
26920
26996
  endElementTo = endElementTo !== true;
26921
- animationFromClone !== void 0 && animationFromClone.reverse();
26922
- animationFromTween !== void 0 && animationFromTween.reverse();
26923
- animationToClone !== void 0 && animationToClone.reverse();
26997
+ animationFromClone?.reverse();
26998
+ animationFromTween?.reverse();
26999
+ animationToClone?.reverse();
26924
27000
  animationTo.reverse();
26925
27001
  return true;
26926
27002
  };
@@ -27172,7 +27248,7 @@ function trigger2(group) {
27172
27248
  },
27173
27249
  ...to.opts,
27174
27250
  onEnd(dir, aborted) {
27175
- to.opts.onEnd !== void 0 && to.opts.onEnd(dir, aborted);
27251
+ to.opts.onEnd?.(dir, aborted);
27176
27252
  if (aborted === true) return;
27177
27253
  from.animating = false;
27178
27254
  to.animating = false;
@@ -27289,7 +27365,7 @@ var Morph_default = createDirective(
27289
27365
  if (index !== -1) {
27290
27366
  group.queue = group.queue.filter((item) => item !== ctx);
27291
27367
  if (group.queue.length === 0) {
27292
- group.cancel !== void 0 && group.cancel();
27368
+ group.cancel?.();
27293
27369
  delete morphGroups[ctx.group];
27294
27370
  }
27295
27371
  }
@@ -27313,7 +27389,7 @@ var defaultCfg2 = {
27313
27389
  };
27314
27390
  function update3(el, ctx, value2) {
27315
27391
  ctx.handler = value2;
27316
- ctx.observer !== void 0 && ctx.observer.disconnect();
27392
+ ctx.observer?.disconnect();
27317
27393
  ctx.observer = new MutationObserver((list) => {
27318
27394
  if (typeof ctx.handler === "function") {
27319
27395
  const res = ctx.handler(list);
@@ -27327,7 +27403,7 @@ function update3(el, ctx, value2) {
27327
27403
  function destroy2(el) {
27328
27404
  const ctx = el.__qmutation;
27329
27405
  if (ctx !== void 0) {
27330
- ctx.observer !== void 0 && ctx.observer.disconnect();
27406
+ ctx.observer?.disconnect();
27331
27407
  delete el.__qmutation;
27332
27408
  }
27333
27409
  }
@@ -27516,7 +27592,7 @@ var TouchHold_default = createDirective(
27516
27592
  },
27517
27593
  end(evt) {
27518
27594
  cleanEvt(ctx, "temp");
27519
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(ctx.triggered);
27595
+ ctx.styleCleanup?.(ctx.triggered);
27520
27596
  if (ctx.triggered === true) {
27521
27597
  evt !== void 0 && stopAndPrevent(evt);
27522
27598
  } else if (ctx.timer !== void 0) {
@@ -27558,7 +27634,7 @@ var TouchHold_default = createDirective(
27558
27634
  cleanEvt(ctx, "main");
27559
27635
  cleanEvt(ctx, "temp");
27560
27636
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27561
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27637
+ ctx.styleCleanup?.();
27562
27638
  delete el.__qtouchhold;
27563
27639
  }
27564
27640
  }
@@ -27700,8 +27776,8 @@ var TouchRepeat_default = createDirective(
27700
27776
  },
27701
27777
  end(evt) {
27702
27778
  if (ctx.event === void 0) return;
27703
- ctx.styleCleanup !== void 0 && ctx.styleCleanup(true);
27704
- evt !== void 0 && ctx.event.repeatCount > 0 && stopAndPrevent(evt);
27779
+ ctx.styleCleanup?.(true);
27780
+ if (evt !== void 0 && ctx.event.repeatCount > 0) stopAndPrevent(evt);
27705
27781
  cleanEvt(ctx, "temp");
27706
27782
  if (ctx.timer !== void 0) {
27707
27783
  clearTimeout(ctx.timer);
@@ -27741,7 +27817,7 @@ var TouchRepeat_default = createDirective(
27741
27817
  ctx.timer !== void 0 && clearTimeout(ctx.timer);
27742
27818
  cleanEvt(ctx, "main");
27743
27819
  cleanEvt(ctx, "temp");
27744
- ctx.styleCleanup !== void 0 && ctx.styleCleanup();
27820
+ ctx.styleCleanup?.();
27745
27821
  delete el.__qtouchrepeat;
27746
27822
  }
27747
27823
  }
@@ -28085,12 +28161,12 @@ function create_dialog_default(DefaultComponent, supportsCustomComponent, parent
28085
28161
  const dialogRef = ref68(null);
28086
28162
  const el = createGlobalNode(false, "dialog");
28087
28163
  const applyState = (cmd) => {
28088
- if (dialogRef.value !== null && dialogRef.value[cmd] !== void 0) {
28164
+ if (dialogRef.value?.[cmd] !== void 0) {
28089
28165
  dialogRef.value[cmd]();
28090
28166
  return;
28091
28167
  }
28092
28168
  const target2 = vm2.$.subTree;
28093
- if (target2 && target2.component) {
28169
+ if (target2?.component) {
28094
28170
  if (target2.component.proxy && target2.component.proxy[cmd]) {
28095
28171
  target2.component.proxy[cmd]();
28096
28172
  return;
@@ -28577,7 +28653,7 @@ var originalDefaults = {
28577
28653
  };
28578
28654
  var defaults = { ...originalDefaults };
28579
28655
  function registerProps(opts) {
28580
- if (opts && opts.group !== void 0 && activeGroups[opts.group] !== void 0) {
28656
+ if (opts?.group !== void 0 && activeGroups[opts.group] !== void 0) {
28581
28657
  return Object.assign(activeGroups[opts.group], opts);
28582
28658
  }
28583
28659
  const newProps = isObject(opts) === true && opts.ignoreDefaults === true ? { ...originalDefaults, ...opts } : { ...defaults, ...opts };
@@ -29022,7 +29098,7 @@ function addNotification(config, $q, originalApi) {
29022
29098
  const actions = (Array.isArray(config.actions) === true ? config.actions : []).concat(
29023
29099
  config.ignoreDefaults !== true && Array.isArray(defaults2.actions) === true ? defaults2.actions : []
29024
29100
  ).concat(
29025
- notifTypes[config.type] !== void 0 && Array.isArray(notifTypes[config.type].actions) === true ? notifTypes[config.type].actions : []
29101
+ Array.isArray(notifTypes[config.type]?.actions) === true ? notifTypes[config.type].actions : []
29026
29102
  );
29027
29103
  const { closeBtn } = notif;
29028
29104
  closeBtn && actions.push({
@@ -29741,9 +29817,9 @@ function parseFeatures(winFeatures) {
29741
29817
  function openWindow(url, reject, windowFeatures) {
29742
29818
  let open2 = window.open;
29743
29819
  if (Platform_default.is.cordova === true) {
29744
- if (cordova !== void 0 && cordova.InAppBrowser !== void 0 && cordova.InAppBrowser.open !== void 0) {
29820
+ if (cordova?.InAppBrowser?.open !== void 0) {
29745
29821
  open2 = cordova.InAppBrowser.open;
29746
- } else if (navigator !== void 0 && navigator.app !== void 0) {
29822
+ } else if (navigator?.app !== void 0) {
29747
29823
  return navigator.app.loadUrl(url, {
29748
29824
  openExternal: true
29749
29825
  });
@@ -29754,7 +29830,7 @@ function openWindow(url, reject, windowFeatures) {
29754
29830
  Platform_default.is.desktop && win.focus();
29755
29831
  return win;
29756
29832
  } else {
29757
- reject && reject();
29833
+ reject?.();
29758
29834
  }
29759
29835
  }
29760
29836
  var open_url_default = (url, reject, windowFeatures) => {
@@ -29839,7 +29915,7 @@ function runSequentialPromises(sequentialPromises, { threadsNumber = 1, abortOnF
29839
29915
 
29840
29916
  // src/index.dev.js
29841
29917
  var Quasar = {
29842
- version: "2.17.7",
29918
+ version: "2.18.1",
29843
29919
  install: install_quasar_default,
29844
29920
  // TODO: remove in Qv3 (should only be used through the plugin)
29845
29921
  // We provide a deprecated fallback here