quasar 2.6.5 → 2.6.6

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 (137) hide show
  1. package/dist/api/QBreadcrumbsEl.json +1 -1
  2. package/dist/api/QBtn.json +1 -1
  3. package/dist/api/QBtnDropdown.json +1 -1
  4. package/dist/api/QExpansionItem.json +1 -1
  5. package/dist/api/QImg.json +23 -0
  6. package/dist/api/QItem.json +1 -1
  7. package/dist/api/QRouteTab.json +1 -1
  8. package/dist/api/QVideo.json +43 -0
  9. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  10. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  12. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  13. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  14. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  15. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  16. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  18. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  19. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  20. package/dist/icon-set/material-icons.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/svg-bootstrap-icons.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  39. package/dist/icon-set/themify.umd.prod.js +1 -1
  40. package/dist/lang/ar-TN.umd.prod.js +1 -1
  41. package/dist/lang/ar.umd.prod.js +1 -1
  42. package/dist/lang/az-Latn.umd.prod.js +1 -1
  43. package/dist/lang/bg.umd.prod.js +1 -1
  44. package/dist/lang/bn.umd.prod.js +1 -1
  45. package/dist/lang/ca.umd.prod.js +1 -1
  46. package/dist/lang/cs.umd.prod.js +1 -1
  47. package/dist/lang/da.umd.prod.js +1 -1
  48. package/dist/lang/de.umd.prod.js +1 -1
  49. package/dist/lang/el.umd.prod.js +1 -1
  50. package/dist/lang/en-GB.umd.prod.js +1 -1
  51. package/dist/lang/en-US.umd.prod.js +1 -1
  52. package/dist/lang/eo.umd.prod.js +1 -1
  53. package/dist/lang/es.umd.prod.js +1 -1
  54. package/dist/lang/et.umd.prod.js +1 -1
  55. package/dist/lang/eu.umd.prod.js +1 -1
  56. package/dist/lang/fa-IR.umd.prod.js +1 -1
  57. package/dist/lang/fa.umd.prod.js +1 -1
  58. package/dist/lang/fi.umd.prod.js +1 -1
  59. package/dist/lang/fr.umd.prod.js +1 -1
  60. package/dist/lang/gn.umd.prod.js +1 -1
  61. package/dist/lang/he.umd.prod.js +1 -1
  62. package/dist/lang/hr.umd.prod.js +1 -1
  63. package/dist/lang/hu.umd.prod.js +1 -1
  64. package/dist/lang/id.umd.prod.js +1 -1
  65. package/dist/lang/is.umd.prod.js +1 -1
  66. package/dist/lang/it.umd.prod.js +1 -1
  67. package/dist/lang/ja.umd.prod.js +1 -1
  68. package/dist/lang/km.umd.prod.js +1 -1
  69. package/dist/lang/ko-KR.umd.prod.js +1 -1
  70. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  71. package/dist/lang/kz.umd.prod.js +1 -1
  72. package/dist/lang/lt.umd.prod.js +1 -1
  73. package/dist/lang/lu.umd.prod.js +1 -1
  74. package/dist/lang/lv.umd.prod.js +1 -1
  75. package/dist/lang/ml.umd.prod.js +1 -1
  76. package/dist/lang/ms.umd.prod.js +1 -1
  77. package/dist/lang/my.umd.prod.js +1 -1
  78. package/dist/lang/nb-NO.umd.prod.js +1 -1
  79. package/dist/lang/nl.umd.prod.js +1 -1
  80. package/dist/lang/pl.umd.prod.js +1 -1
  81. package/dist/lang/pt-BR.umd.prod.js +1 -1
  82. package/dist/lang/pt.umd.prod.js +1 -1
  83. package/dist/lang/ro.umd.prod.js +1 -1
  84. package/dist/lang/ru.umd.prod.js +1 -1
  85. package/dist/lang/sk.umd.prod.js +1 -1
  86. package/dist/lang/sl.umd.prod.js +1 -1
  87. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  88. package/dist/lang/sr.umd.prod.js +1 -1
  89. package/dist/lang/sv.umd.prod.js +1 -1
  90. package/dist/lang/ta.umd.prod.js +1 -1
  91. package/dist/lang/th.umd.prod.js +1 -1
  92. package/dist/lang/tr.umd.prod.js +1 -1
  93. package/dist/lang/ug.umd.prod.js +1 -1
  94. package/dist/lang/uk.umd.prod.js +1 -1
  95. package/dist/lang/vi.umd.prod.js +1 -1
  96. package/dist/lang/zh-CN.umd.prod.js +1 -1
  97. package/dist/lang/zh-TW.umd.prod.js +1 -1
  98. package/dist/quasar.cjs.prod.js +2 -2
  99. package/dist/quasar.css +7 -4
  100. package/dist/quasar.esm.prod.js +2 -2
  101. package/dist/quasar.prod.css +1 -1
  102. package/dist/quasar.rtl.css +13 -10
  103. package/dist/quasar.rtl.prod.css +1 -1
  104. package/dist/quasar.sass +7 -5
  105. package/dist/quasar.umd.js +93 -46
  106. package/dist/quasar.umd.prod.js +2 -2
  107. package/dist/types/api/validation.d.ts +1 -1
  108. package/dist/types/index.d.ts +39 -1
  109. package/dist/vetur/quasar-attributes.json +16 -0
  110. package/dist/vetur/quasar-tags.json +5 -1
  111. package/dist/web-types/web-types.json +48 -8
  112. package/package.json +1 -3
  113. package/src/components/btn/use-btn.json +1 -1
  114. package/src/components/dialog/QDialog.js +4 -4
  115. package/src/components/dialog/QDialog.sass +2 -2
  116. package/src/components/editor/QEditor.js +10 -4
  117. package/src/components/icon/QIcon.js +1 -1
  118. package/src/components/img/QImg.js +5 -0
  119. package/src/components/img/QImg.json +19 -1
  120. package/src/components/menu/QMenu.js +2 -1
  121. package/src/components/table/QTable.js +1 -1
  122. package/src/components/tooltip/QTooltip.js +2 -1
  123. package/src/components/tree/QTree.sass +1 -1
  124. package/src/components/video/QVideo.js +17 -1
  125. package/src/components/video/QVideo.json +36 -0
  126. package/src/components/virtual-scroll/QVirtualScroll.sass +4 -1
  127. package/src/components/virtual-scroll/use-virtual-scroll.js +19 -21
  128. package/src/composables/private/use-portal.js +15 -2
  129. package/src/composables/private/use-router-link.json +1 -1
  130. package/src/history.js +2 -2
  131. package/src/utils/copy-to-clipboard.js +1 -1
  132. package/src/utils/patterns.js +8 -0
  133. package/src/utils/private/date-persian.js +0 -9
  134. package/src/utils/private/position-engine.js +0 -5
  135. package/src/utils/private/sort.js +0 -11
  136. package/src/utils/private/web-storage.js +1 -1
  137. package/src/utils/uid.js +1 -1
@@ -1,4 +1,4 @@
1
1
  // Keep in sync with ui/src/utils/patterns.js
2
- export type EmbeddedValidationRule = "date" | "time" | "fulltime" | "timeOrFulltime" | "hexColor" | "hexaColor" | "hexOrHexaColor" | "rgbColor" | "rgbaColor" | "rgbOrRgbaColor" | "hexOrRgbColor" | "hexaOrRgbaColor" | "anyColor";
2
+ export type EmbeddedValidationRule = "date" | "time" | "fulltime" | "timeOrFulltime" | "email" | "hexColor" | "hexaColor" | "hexOrHexaColor" | "rgbColor" | "rgbaColor" | "rgbOrRgbaColor" | "hexOrRgbColor" | "hexaOrRgbaColor" | "anyColor";
3
3
 
4
4
  export type ValidationRule<T = any> = EmbeddedValidationRule | ((value: T) => boolean | string | Promise<boolean | string>);
@@ -4896,7 +4896,21 @@ export interface QImgProps {
4896
4896
  /**
4897
4897
  * Same syntax as <img> referrerpolicy attribute
4898
4898
  */
4899
- referrerpolicy?: string | undefined;
4899
+ referrerpolicy?:
4900
+ | "no-referrer"
4901
+ | "no-referrer-when-downgrade"
4902
+ | "origin"
4903
+ | "origin-when-cross-origin"
4904
+ | "same-origin"
4905
+ | "strict-origin"
4906
+ | "strict-origin-when-cross-origin"
4907
+ | "unsafe-url"
4908
+ | undefined;
4909
+ /**
4910
+ * Provides a hint of the relative priority to use when fetching the image
4911
+ * Default value: auto
4912
+ */
4913
+ fetchpriority?: "high" | "low" | "auto" | undefined;
4900
4914
  /**
4901
4915
  * How the image will fit into the container; Equivalent of the object-fit prop; Can be coordinated with 'position' prop
4902
4916
  * Default value: cover
@@ -12849,6 +12863,30 @@ export interface QVideoProps {
12849
12863
  * (Accessibility) Set the native 'title' attribute value of the inner iframe being used
12850
12864
  */
12851
12865
  title?: string | undefined;
12866
+ /**
12867
+ * Provides a hint of the relative priority to use when fetching the iframe document
12868
+ * Default value: auto
12869
+ */
12870
+ fetchpriority?: "high" | "low" | "auto" | undefined;
12871
+ /**
12872
+ * Indicates how the browser should load the iframe
12873
+ * Default value: eager
12874
+ */
12875
+ loading?: "eager" | "lazy" | undefined;
12876
+ /**
12877
+ * Indicates which referrer to send when fetching the frame's resource
12878
+ * Default value: strict-origin-when-cross-origin
12879
+ */
12880
+ referrerpolicy?:
12881
+ | "no-referrer"
12882
+ | "no-referrer-when-downgrade"
12883
+ | "origin"
12884
+ | "origin-when-cross-origin"
12885
+ | "same-origin"
12886
+ | "strict-origin"
12887
+ | "strict-origin-when-cross-origin"
12888
+ | "unsafe-url"
12889
+ | undefined;
12852
12890
  }
12853
12891
 
12854
12892
  export interface QVideoSlots {}
@@ -2291,6 +2291,10 @@
2291
2291
  "type": "string",
2292
2292
  "description": "Same syntax as <img> referrerpolicy attribute"
2293
2293
  },
2294
+ "q-img/fetchpriority": {
2295
+ "type": "string",
2296
+ "description": "Provides a hint of the relative priority to use when fetching the image"
2297
+ },
2294
2298
  "q-img/fit": {
2295
2299
  "type": "string",
2296
2300
  "description": "How the image will fit into the container; Equivalent of the object-fit prop; Can be coordinated with 'position' prop"
@@ -5751,6 +5755,18 @@
5751
5755
  "type": "string",
5752
5756
  "description": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used"
5753
5757
  },
5758
+ "q-video/fetchpriority": {
5759
+ "type": "string",
5760
+ "description": "Provides a hint of the relative priority to use when fetching the iframe document"
5761
+ },
5762
+ "q-video/loading": {
5763
+ "type": "string",
5764
+ "description": "Indicates how the browser should load the iframe"
5765
+ },
5766
+ "q-video/referrerpolicy": {
5767
+ "type": "string",
5768
+ "description": "Indicates which referrer to send when fetching the frame's resource"
5769
+ },
5754
5770
  "q-virtual-scroll/virtual-scroll-horizontal": {
5755
5771
  "type": "boolean",
5756
5772
  "description": "Make virtual list work in horizontal mode"
@@ -753,6 +753,7 @@
753
753
  "crossorigin",
754
754
  "decoding",
755
755
  "referrerpolicy",
756
+ "fetchpriority",
756
757
  "fit",
757
758
  "position",
758
759
  "alt",
@@ -2038,7 +2039,10 @@
2038
2039
  "attributes": [
2039
2040
  "ratio",
2040
2041
  "src",
2041
- "title"
2042
+ "title",
2043
+ "fetchpriority",
2044
+ "loading",
2045
+ "referrerpolicy"
2042
2046
  ],
2043
2047
  "description": ""
2044
2048
  },
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.6.5",
5
+ "version": "2.6.6",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -514,7 +514,7 @@
514
514
  "kind": "expression",
515
515
  "type": "string"
516
516
  },
517
- "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttp://quasar.dev",
517
+ "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttps://quasar.dev",
518
518
  "doc-url": "https://v2.quasar.dev/vue-components/breadcrumbs"
519
519
  },
520
520
  {
@@ -646,7 +646,7 @@
646
646
  "kind": "expression",
647
647
  "type": "string"
648
648
  },
649
- "description": "Native <a> link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttp://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"",
649
+ "description": "Native <a> link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttps://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"",
650
650
  "doc-url": "https://v2.quasar.dev/vue-components/button-dropdown"
651
651
  },
652
652
  {
@@ -1559,7 +1559,7 @@
1559
1559
  "kind": "expression",
1560
1560
  "type": "string"
1561
1561
  },
1562
- "description": "Native <a> link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttp://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"",
1562
+ "description": "Native <a> link href attribute; Has priority over the 'to' and 'replace' props\n\nExamples:\nhttps://quasar.dev\nhref=\"https://quasar.dev\" target=\"_blank\"",
1563
1563
  "doc-url": "https://v2.quasar.dev/vue-components/button"
1564
1564
  },
1565
1565
  {
@@ -4758,7 +4758,7 @@
4758
4758
  "kind": "expression",
4759
4759
  "type": "string"
4760
4760
  },
4761
- "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttp://quasar.dev",
4761
+ "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttps://quasar.dev",
4762
4762
  "doc-url": "https://v2.quasar.dev/vue-components/expansion-item"
4763
4763
  },
4764
4764
  {
@@ -7248,11 +7248,21 @@
7248
7248
  "name": "referrerpolicy",
7249
7249
  "value": {
7250
7250
  "kind": "expression",
7251
- "type": "string"
7251
+ "type": "'no-referrer'|'no-referrer-when-downgrade'|'origin'|'origin-when-cross-origin'|'same-origin'|'strict-origin'|'strict-origin-when-cross-origin'|'unsafe-url'"
7252
7252
  },
7253
7253
  "description": "Same syntax as <img> referrerpolicy attribute",
7254
7254
  "doc-url": "https://v2.quasar.dev/vue-components/img"
7255
7255
  },
7256
+ {
7257
+ "name": "fetchpriority",
7258
+ "value": {
7259
+ "kind": "expression",
7260
+ "type": "'high'|'low'|'auto'"
7261
+ },
7262
+ "description": "Provides a hint of the relative priority to use when fetching the image",
7263
+ "doc-url": "https://v2.quasar.dev/vue-components/img",
7264
+ "default": "\"auto\""
7265
+ },
7256
7266
  {
7257
7267
  "name": "fit",
7258
7268
  "value": {
@@ -8378,7 +8388,7 @@
8378
8388
  "kind": "expression",
8379
8389
  "type": "string"
8380
8390
  },
8381
- "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttp://quasar.dev",
8391
+ "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttps://quasar.dev",
8382
8392
  "doc-url": "https://v2.quasar.dev/vue-components/list-and-list-items"
8383
8393
  },
8384
8394
  {
@@ -16477,7 +16487,7 @@
16477
16487
  "kind": "expression",
16478
16488
  "type": "string"
16479
16489
  },
16480
- "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttp://quasar.dev",
16490
+ "description": "Native <a> link href attribute; Has priority over the 'to'/'exact'/'replace'/'active-class'/'exact-active-class' props\n\nExamples:\nhttps://quasar.dev",
16481
16491
  "doc-url": "https://v2.quasar.dev/vue-components/tabs"
16482
16492
  },
16483
16493
  {
@@ -18662,6 +18672,36 @@
18662
18672
  },
18663
18673
  "description": "(Accessibility) Set the native 'title' attribute value of the inner iframe being used\n\nExamples:\nMy Daily Marathon",
18664
18674
  "doc-url": "https://v2.quasar.dev/vue-components/video"
18675
+ },
18676
+ {
18677
+ "name": "fetchpriority",
18678
+ "value": {
18679
+ "kind": "expression",
18680
+ "type": "'high'|'low'|'auto'"
18681
+ },
18682
+ "description": "Provides a hint of the relative priority to use when fetching the iframe document",
18683
+ "doc-url": "https://v2.quasar.dev/vue-components/video",
18684
+ "default": "\"auto\""
18685
+ },
18686
+ {
18687
+ "name": "loading",
18688
+ "value": {
18689
+ "kind": "expression",
18690
+ "type": "'eager'|'lazy'"
18691
+ },
18692
+ "description": "Indicates how the browser should load the iframe",
18693
+ "doc-url": "https://v2.quasar.dev/vue-components/video",
18694
+ "default": "\"eager\""
18695
+ },
18696
+ {
18697
+ "name": "referrerpolicy",
18698
+ "value": {
18699
+ "kind": "expression",
18700
+ "type": "'no-referrer'|'no-referrer-when-downgrade'|'origin'|'origin-when-cross-origin'|'same-origin'|'strict-origin'|'strict-origin-when-cross-origin'|'unsafe-url'"
18701
+ },
18702
+ "description": "Indicates which referrer to send when fetching the frame's resource",
18703
+ "doc-url": "https://v2.quasar.dev/vue-components/video",
18704
+ "default": "\"strict-origin-when-cross-origin\""
18665
18705
  }
18666
18706
  ],
18667
18707
  "slots": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.6.5",
3
+ "version": "2.6.6",
4
4
  "description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time",
5
5
  "main": "dist/quasar.cjs.prod.js",
6
6
  "module": "dist/quasar.esm.prod.js",
@@ -86,7 +86,6 @@
86
86
  "eslint-plugin-promise": "^4.2.1",
87
87
  "eslint-plugin-vue": "^7.0.0",
88
88
  "fast-glob": "^3.2.7",
89
- "json-beautify": "^1.1.1",
90
89
  "module-alias": "^2.2.2",
91
90
  "postcss-rtlcss": "^3.5.3",
92
91
  "prettier": "^2.4.1",
@@ -95,7 +94,6 @@
95
94
  "rimraf": "^3.0.1",
96
95
  "rollup": "^2.34.0",
97
96
  "table": "^6.0.4",
98
- "tslib": "^2.0.3",
99
97
  "uglify-es": "^3.3.9",
100
98
  "vue": "^3.0.0",
101
99
  "vue-router": "^4.0.0",
@@ -33,7 +33,7 @@
33
33
  "href": {
34
34
  "type": "String",
35
35
  "desc": "Native <a> link href attribute; Has priority over the 'to' and 'replace' props",
36
- "examples": [ "http://quasar.dev", "href=\"https://quasar.dev\" target=\"_blank\"" ],
36
+ "examples": [ "https://quasar.dev", "href=\"https://quasar.dev\" target=\"_blank\"" ],
37
37
  "category": "navigation",
38
38
  "addedIn": "v2.4"
39
39
  },
@@ -96,7 +96,7 @@ export default createComponent({
96
96
  const { registerTimeout, removeTimeout } = useTimeout()
97
97
  const { registerTick, removeTick } = useTick()
98
98
 
99
- const { showPortal, hidePortal, portalIsActive, renderPortal } = usePortal(
99
+ const { showPortal, hidePortal, portalIsAccessible, renderPortal } = usePortal(
100
100
  vm, innerRef, renderPortalContent, /* pls do check if on a global dialog */ true
101
101
  )
102
102
 
@@ -235,6 +235,7 @@ export default createComponent({
235
235
  removeFromHistory()
236
236
  cleanup(true)
237
237
  animating.value = true
238
+ hidePortal()
238
239
 
239
240
  if (refocusTarget !== null) {
240
241
  refocusTarget.focus()
@@ -242,7 +243,7 @@ export default createComponent({
242
243
  }
243
244
 
244
245
  registerTimeout(() => {
245
- hidePortal()
246
+ hidePortal(true) // done hiding, now destroy
246
247
  animating.value = false
247
248
  emit('hide', evt)
248
249
  }, props.transitionDuration)
@@ -350,8 +351,7 @@ export default createComponent({
350
351
  function onFocusChange (evt) {
351
352
  // the focus is not in a vue child component
352
353
  if (
353
- showing.value === true
354
- && portalIsActive.value === true
354
+ portalIsAccessible.value === true
355
355
  && childHasFocus(innerRef.value, evt.target) !== true
356
356
  ) {
357
357
  focus('[tabindex]:not([tabindex="-1"])')
@@ -39,8 +39,8 @@
39
39
  max-height: 100vh
40
40
  max-width: 100vw
41
41
  border-radius: 0 !important
42
- top: 0px !important
43
- left: 0px !important
42
+ top: 0 !important
43
+ left: 0 !important
44
44
 
45
45
  &--top, &--bottom
46
46
  padding-top: 0 !important
@@ -368,11 +368,14 @@ export default createComponent({
368
368
  }
369
369
 
370
370
  function onFocusin (e) {
371
+ const root = rootRef.value
372
+
371
373
  if (
372
- rootRef.value.contains(e.target) === true
374
+ root !== null
375
+ && root.contains(e.target) === true
373
376
  && (
374
377
  e.relatedTarget === null
375
- || rootRef.value.contains(e.relatedTarget) !== true
378
+ || root.contains(e.relatedTarget) !== true
376
379
  )
377
380
  ) {
378
381
  const prop = `inner${ isViewingSource.value === true ? 'Text' : 'HTML' }`
@@ -382,11 +385,14 @@ export default createComponent({
382
385
  }
383
386
 
384
387
  function onFocusout (e) {
388
+ const root = rootRef.value
389
+
385
390
  if (
386
- rootRef.value.contains(e.target) === true
391
+ root !== null
392
+ && root.contains(e.target) === true
387
393
  && (
388
394
  e.relatedTarget === null
389
- || rootRef.value.contains(e.relatedTarget) !== true
395
+ || root.contains(e.relatedTarget) !== true
390
396
  )
391
397
  ) {
392
398
  eVm.caret.savePosition()
@@ -133,7 +133,7 @@ export default createComponent({
133
133
  cls = icon
134
134
  }
135
135
  else if (ionRE.test(icon) === true) {
136
- cls = `ionicons ion-${ $q.platform.is.ios === true ? 'ios' : 'md' }${ icon.substr(3) }`
136
+ cls = `ionicons ion-${ $q.platform.is.ios === true ? 'ios' : 'md' }${ icon.substring(3) }`
137
137
  }
138
138
  else {
139
139
  // "notranslate" class is for Google Translate
@@ -31,6 +31,10 @@ export default createComponent({
31
31
  type: String,
32
32
  default: 'lazy'
33
33
  },
34
+ fetchpriority: {
35
+ type: String,
36
+ default: 'auto'
37
+ },
34
38
  width: String,
35
39
  height: String,
36
40
  initialRatio: {
@@ -193,6 +197,7 @@ export default createComponent({
193
197
  height: props.height,
194
198
  width: props.width,
195
199
  loading: props.loading,
200
+ fetchpriority: props.fetchpriority,
196
201
  'aria-hidden': 'true',
197
202
  draggable: props.draggable,
198
203
  ...img
@@ -116,8 +116,26 @@
116
116
  "referrerpolicy": {
117
117
  "type": "String",
118
118
  "desc": "Same syntax as <img> referrerpolicy attribute",
119
+ "values": [
120
+ "no-referrer",
121
+ "no-referrer-when-downgrade",
122
+ "origin",
123
+ "origin-when-cross-origin",
124
+ "same-origin",
125
+ "strict-origin",
126
+ "strict-origin-when-cross-origin",
127
+ "unsafe-url"
128
+ ],
129
+ "category": "behavior"
130
+ },
131
+
132
+ "fetchpriority": {
133
+ "type": "String",
134
+ "desc": "Provides a hint of the relative priority to use when fetching the image",
135
+ "default": "auto",
136
+ "values": [ "high", "low", "auto" ],
119
137
  "category": "behavior",
120
- "__exemption": [ "examples" ]
138
+ "addedIn": "v2.6.6"
121
139
  },
122
140
 
123
141
  "fit": {
@@ -244,6 +244,7 @@ export default createComponent({
244
244
  function handleHide (evt) {
245
245
  removeTick()
246
246
  removeTimeout()
247
+ hidePortal()
247
248
 
248
249
  anchorCleanup(true)
249
250
 
@@ -261,7 +262,7 @@ export default createComponent({
261
262
  }
262
263
 
263
264
  registerTimeout(() => {
264
- hidePortal()
265
+ hidePortal(true) // done hiding, now destroy
265
266
  emit('hide', evt)
266
267
  }, props.transitionDuration)
267
268
  }
@@ -978,7 +978,7 @@ export default createComponent({
978
978
 
979
979
  return h('div', {
980
980
  class: 'q-table__grid-item col-xs-12 col-sm-6 col-md-4 col-lg-3'
981
- + (scope.selected === true ? 'q-table__grid-item--selected' : '')
981
+ + (scope.selected === true ? ' q-table__grid-item--selected' : '')
982
982
  }, [
983
983
  h('div', data, child)
984
984
  ])
@@ -175,11 +175,12 @@ export default createComponent({
175
175
  function handleHide (evt) {
176
176
  removeTick()
177
177
  removeTimeout()
178
+ hidePortal()
178
179
 
179
180
  anchorCleanup()
180
181
 
181
182
  registerTimeout(() => {
182
- hidePortal()
183
+ hidePortal(true) // done hiding, now destroy
183
184
  emit('hide', evt)
184
185
  }, props.transitionDuration)
185
186
  }
@@ -101,10 +101,10 @@
101
101
  &__arrow,
102
102
  &__spinner
103
103
  font-size: 16px
104
+ margin-right: 4px
104
105
 
105
106
  &__arrow
106
107
  transition: transform .3s
107
- margin-right: 4px
108
108
 
109
109
  &--rotate
110
110
  transform: rotate3d(0, 0, 1, 90deg)
@@ -15,7 +15,20 @@ export default createComponent({
15
15
  required: true
16
16
  },
17
17
 
18
- title: String
18
+ title: String,
19
+
20
+ fetchpriority: {
21
+ type: String,
22
+ default: 'auto'
23
+ },
24
+ loading: {
25
+ type: String,
26
+ default: 'eager'
27
+ },
28
+ referrerpolicy: {
29
+ type: String,
30
+ default: 'strict-origin-when-cross-origin'
31
+ }
19
32
  },
20
33
 
21
34
  setup (props) {
@@ -33,6 +46,9 @@ export default createComponent({
33
46
  h('iframe', {
34
47
  src: props.src,
35
48
  title: props.title,
49
+ fetchpriority: props.fetchpriority,
50
+ loading: props.loading,
51
+ referrerpolicy: props.referrerpolicy,
36
52
  frameborder: '0',
37
53
  allowfullscreen: true
38
54
  })
@@ -25,6 +25,42 @@
25
25
  ],
26
26
  "category": "accessibility",
27
27
  "addedIn": "v2.4.3"
28
+ },
29
+
30
+ "fetchpriority": {
31
+ "type": "String",
32
+ "desc": "Provides a hint of the relative priority to use when fetching the iframe document",
33
+ "default": "auto",
34
+ "values": [ "high", "low", "auto" ],
35
+ "category": "behavior",
36
+ "addedIn": "v2.6.6"
37
+ },
38
+
39
+ "loading": {
40
+ "type": "String",
41
+ "desc": "Indicates how the browser should load the iframe",
42
+ "default": "eager",
43
+ "values": [ "eager", "lazy" ],
44
+ "category": "behavior",
45
+ "addedIn": "v2.6.6"
46
+ },
47
+
48
+ "referrerpolicy": {
49
+ "type": "String",
50
+ "desc": "Indicates which referrer to send when fetching the frame's resource",
51
+ "default": "strict-origin-when-cross-origin",
52
+ "values": [
53
+ "no-referrer",
54
+ "no-referrer-when-downgrade",
55
+ "origin",
56
+ "origin-when-cross-origin",
57
+ "same-origin",
58
+ "strict-origin",
59
+ "strict-origin-when-cross-origin",
60
+ "unsafe-url"
61
+ ],
62
+ "category": "behavior",
63
+ "addedIn": "v2.6.6"
28
64
  }
29
65
  }
30
66
  }
@@ -6,9 +6,12 @@
6
6
  outline: none
7
7
  contain: content
8
8
 
9
- *
9
+ > *
10
10
  overflow-anchor: none
11
11
 
12
+ > [data-q-vs-anchor]
13
+ overflow-anchor: auto
14
+
12
15
  &__padding
13
16
  background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 20%, rgba(128, 128, 128, .03) 20%, rgba(128, 128, 128, .08) 50%, rgba(128, 128, 128, .03) 80%, rgba(255,255,255,0) 80%, rgba(255,255,255,0)) #{"/* rtl:ignore */"}
14
17
  background-size: var(--q-virtual-scroll-item-width, 100%) var(--q-virtual-scroll-item-height, 50px) #{"/* rtl:ignore */"}
@@ -15,27 +15,30 @@ const scrollToEdges = [
15
15
  'end-force'
16
16
  ]
17
17
 
18
- let id = 1
19
18
  const filterProto = Array.prototype.filter
20
19
 
21
20
  const setOverflowAnchor = __QUASAR_SSR__ || window.getComputedStyle(document.body).overflowAnchor === void 0
22
21
  ? noop
23
- : function (id, index) {
24
- const ssId = id + '_ss'
22
+ : function (contentEl, index) {
23
+ requestAnimationFrame(() => {
24
+ if (contentEl === void 0) {
25
+ return
26
+ }
25
27
 
26
- let styleSheet = document.getElementById(ssId)
28
+ const children = contentEl.children || []
27
29
 
28
- if (styleSheet === null) {
29
- styleSheet = document.createElement('style')
30
- styleSheet.type = 'text/css'
31
- styleSheet.id = ssId
32
- document.head.appendChild(styleSheet)
33
- }
30
+ filterProto
31
+ .call(children, el => el.dataset && el.dataset.qVsAnchor !== void 0)
32
+ .forEach(el => {
33
+ delete el.dataset.qVsAnchor
34
+ })
34
35
 
35
- if (styleSheet.qChildIndex !== index) {
36
- styleSheet.qChildIndex = index
37
- styleSheet.innerHTML = `#${ id } > *:nth-child(${ index }) { overflow-anchor: auto }`
38
- }
36
+ const el = children[ index ]
37
+
38
+ if (el && el.dataset) {
39
+ el.dataset.qVsAnchor = ''
40
+ }
41
+ })
39
42
  }
40
43
 
41
44
  function sumFn (acc, h) {
@@ -231,8 +234,6 @@ export function useVirtualScroll ({
231
234
 
232
235
  let prevScrollStart, prevToIndex, localScrollViewSize, virtualScrollSizesAgg = [], virtualScrollSizes
233
236
 
234
- const vsId = 'qvs_' + id++
235
-
236
237
  const virtualScrollPaddingBefore = ref(0)
237
238
  const virtualScrollPaddingAfter = ref(0)
238
239
  const virtualScrollSliceSizeComputed = ref({})
@@ -418,7 +419,7 @@ export function useVirtualScroll ({
418
419
  })
419
420
  }
420
421
 
421
- setOverflowAnchor(vsId, toIndex - from + 1)
422
+ setOverflowAnchor(contentEl, toIndex - from)
422
423
 
423
424
  const sizeBefore = alignEnd !== void 0 ? virtualScrollSizes.slice(from, toIndex).reduce(sumFn, 0) : 0
424
425
 
@@ -644,7 +645,6 @@ export function useVirtualScroll ({
644
645
  class: 'q-virtual-scroll__content',
645
646
  key: 'content',
646
647
  ref: contentRef,
647
- id: vsId,
648
648
  tabindex: -1
649
649
  }, content.flat()),
650
650
 
@@ -718,9 +718,7 @@ export function useVirtualScroll ({
718
718
  }
719
719
  })
720
720
 
721
- setOverflowAnchor !== noop && onBeforeUnmount(() => {
722
- const styleSheet = document.getElementById(vsId + '_ss')
723
- styleSheet !== null && styleSheet.remove()
721
+ __QUASAR_SSR__ || onBeforeUnmount(() => {
724
722
  onVirtualScrollEvt.cancel()
725
723
  })
726
724