quasar 2.16.10 → 2.17.0

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 (174) hide show
  1. package/dist/api/Platform.json +1 -1
  2. package/dist/api/QOptionGroup.json +1 -1
  3. package/dist/api/QScrollArea.json +1 -1
  4. package/dist/api/QSelect.json +1 -1
  5. package/dist/api/QUploader.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 +1 -1
  46. package/dist/lang/ar.umd.prod.js +1 -1
  47. package/dist/lang/az-Latn.umd.prod.js +1 -1
  48. package/dist/lang/bg.umd.prod.js +1 -1
  49. package/dist/lang/bn.umd.prod.js +1 -1
  50. package/dist/lang/bs-BA.umd.prod.js +1 -1
  51. package/dist/lang/ca.umd.prod.js +1 -1
  52. package/dist/lang/cs.umd.prod.js +1 -1
  53. package/dist/lang/da.umd.prod.js +1 -1
  54. package/dist/lang/de-CH.umd.prod.js +1 -1
  55. package/dist/lang/de-DE.umd.prod.js +1 -1
  56. package/dist/lang/de.umd.prod.js +1 -1
  57. package/dist/lang/el.umd.prod.js +1 -1
  58. package/dist/lang/en-GB.umd.prod.js +1 -1
  59. package/dist/lang/en-US.umd.prod.js +1 -1
  60. package/dist/lang/eo.umd.prod.js +1 -1
  61. package/dist/lang/es.umd.prod.js +1 -1
  62. package/dist/lang/et.umd.prod.js +1 -1
  63. package/dist/lang/eu.umd.prod.js +1 -1
  64. package/dist/lang/fa-IR.umd.prod.js +1 -1
  65. package/dist/lang/fa.umd.prod.js +1 -1
  66. package/dist/lang/fi.umd.prod.js +1 -1
  67. package/dist/lang/fr.umd.prod.js +1 -1
  68. package/dist/lang/gn.umd.prod.js +1 -1
  69. package/dist/lang/he.umd.prod.js +1 -1
  70. package/dist/lang/hi.umd.prod.js +1 -1
  71. package/dist/lang/hr.umd.prod.js +1 -1
  72. package/dist/lang/hu.umd.prod.js +1 -1
  73. package/dist/lang/id.umd.prod.js +1 -1
  74. package/dist/lang/is.umd.prod.js +1 -1
  75. package/dist/lang/it.umd.prod.js +1 -1
  76. package/dist/lang/ja.umd.prod.js +1 -1
  77. package/dist/lang/kk.umd.prod.js +1 -1
  78. package/dist/lang/km.umd.prod.js +1 -1
  79. package/dist/lang/ko-KR.umd.prod.js +1 -1
  80. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  81. package/dist/lang/lt.umd.prod.js +1 -1
  82. package/dist/lang/lu.umd.prod.js +1 -1
  83. package/dist/lang/lv.umd.prod.js +1 -1
  84. package/dist/lang/mk.umd.prod.js +1 -1
  85. package/dist/lang/ml.umd.prod.js +1 -1
  86. package/dist/lang/mm.umd.prod.js +1 -1
  87. package/dist/lang/ms-MY.umd.prod.js +1 -1
  88. package/dist/lang/ms.umd.prod.js +1 -1
  89. package/dist/lang/my.umd.prod.js +1 -1
  90. package/dist/lang/nb-NO.umd.prod.js +1 -1
  91. package/dist/lang/nl.umd.prod.js +1 -1
  92. package/dist/lang/pl.umd.prod.js +1 -1
  93. package/dist/lang/pt-BR.umd.prod.js +1 -1
  94. package/dist/lang/pt.umd.prod.js +1 -1
  95. package/dist/lang/ro.umd.prod.js +1 -1
  96. package/dist/lang/ru.umd.prod.js +1 -1
  97. package/dist/lang/sk.umd.prod.js +1 -1
  98. package/dist/lang/sl.umd.prod.js +1 -1
  99. package/dist/lang/sm.umd.prod.js +1 -1
  100. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  101. package/dist/lang/sr.umd.prod.js +1 -1
  102. package/dist/lang/sv.umd.prod.js +1 -1
  103. package/dist/lang/ta.umd.prod.js +1 -1
  104. package/dist/lang/th.umd.prod.js +1 -1
  105. package/dist/lang/tl.umd.prod.js +1 -1
  106. package/dist/lang/tr.umd.prod.js +1 -1
  107. package/dist/lang/ug.umd.prod.js +1 -1
  108. package/dist/lang/uk.umd.prod.js +1 -1
  109. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  110. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  111. package/dist/lang/vi.umd.prod.js +1 -1
  112. package/dist/lang/zh-CN.umd.prod.js +1 -1
  113. package/dist/lang/zh-TW.umd.prod.js +1 -1
  114. package/dist/quasar.client.js +753 -2121
  115. package/dist/quasar.css +3 -2
  116. package/dist/quasar.prod.css +1 -1
  117. package/dist/quasar.rtl.css +3 -2
  118. package/dist/quasar.rtl.prod.css +1 -1
  119. package/dist/quasar.sass +8 -4
  120. package/dist/quasar.server.prod.cjs +53 -53
  121. package/dist/quasar.server.prod.js +51 -51
  122. package/dist/quasar.umd.js +344 -1715
  123. package/dist/quasar.umd.prod.js +44 -44
  124. package/dist/types/index.d.ts +120 -51
  125. package/dist/vetur/quasar-attributes.json +1 -1
  126. package/dist/vetur/quasar-tags.json +1 -1
  127. package/dist/web-types/web-types.json +1 -1
  128. package/package.json +9 -9
  129. package/src/components/checkbox/QCheckbox.js +3 -1
  130. package/src/components/icon/QIcon.js +1 -1
  131. package/src/components/menu/QMenu.sass +2 -2
  132. package/src/components/option-group/QOptionGroup.js +38 -15
  133. package/src/components/option-group/QOptionGroup.json +88 -1
  134. package/src/components/radio/QRadio.js +3 -1
  135. package/src/components/scroll-area/QScrollArea.js +115 -107
  136. package/src/components/scroll-area/QScrollArea.json +40 -0
  137. package/src/components/scroll-area/ScrollAreaControls.js +54 -0
  138. package/src/components/select/QSelect.js +16 -18
  139. package/src/components/select/QSelect.json +7 -0
  140. package/src/components/space/QSpace.js +1 -2
  141. package/src/components/spinner/QSpinnerAudio.js +4 -69
  142. package/src/components/spinner/QSpinnerBall.js +4 -85
  143. package/src/components/spinner/QSpinnerBars.js +4 -124
  144. package/src/components/spinner/QSpinnerBox.js +4 -42
  145. package/src/components/spinner/QSpinnerClock.js +4 -53
  146. package/src/components/spinner/QSpinnerComment.js +4 -65
  147. package/src/components/spinner/QSpinnerCube.js +4 -113
  148. package/src/components/spinner/QSpinnerDots.js +4 -85
  149. package/src/components/spinner/QSpinnerFacebook.js +4 -84
  150. package/src/components/spinner/QSpinnerGears.js +4 -40
  151. package/src/components/spinner/QSpinnerGrid.js +4 -133
  152. package/src/components/spinner/QSpinnerHearts.js +4 -35
  153. package/src/components/spinner/QSpinnerHourglass.js +4 -93
  154. package/src/components/spinner/QSpinnerInfinity.js +4 -24
  155. package/src/components/spinner/QSpinnerIos.js +4 -155
  156. package/src/components/spinner/QSpinnerOrbit.js +4 -32
  157. package/src/components/spinner/QSpinnerOval.js +4 -31
  158. package/src/components/spinner/QSpinnerPie.js +4 -62
  159. package/src/components/spinner/QSpinnerPuff.js +4 -64
  160. package/src/components/spinner/QSpinnerRadio.js +4 -57
  161. package/src/components/spinner/QSpinnerRings.js +4 -87
  162. package/src/components/spinner/QSpinnerTail.js +4 -65
  163. package/src/components/tabs/QRouteTab.js +4 -3
  164. package/src/components/tabs/QTabs.js +28 -15
  165. package/src/components/tooltip/QTooltip.sass +2 -0
  166. package/src/components/uploader/QUploader.json +9 -0
  167. package/src/components/uploader/QUploader.sass +0 -1
  168. package/src/components/uploader/uploader-core.js +6 -2
  169. package/src/composables/private.use-panel/use-panel.js +5 -3
  170. package/src/css/variables.sass +3 -0
  171. package/src/plugins/platform/Platform.js +40 -5
  172. package/src/plugins/platform/Platform.json +52 -69
  173. package/src/plugins/platform/Platform.test.js +22 -14
  174. package/src/utils/private.position-engine/position-engine.js +11 -4
@@ -1,67 +1,9 @@
1
1
  import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
-
5
4
  import { createComponent } from '../../utils/private.create/create.js'
6
5
 
7
- const svg = [
8
- h('path', {
9
- d: 'M0 50A50 50 0 0 1 50 0L50 50L0 50',
10
- fill: 'currentColor',
11
- opacity: '0.5'
12
- }, [
13
- h('animateTransform', {
14
- attributeName: 'transform',
15
- type: 'rotate',
16
- from: '0 50 50',
17
- to: '360 50 50',
18
- dur: '0.8s',
19
- repeatCount: 'indefinite'
20
- })
21
- ]),
22
- h('path', {
23
- d: 'M50 0A50 50 0 0 1 100 50L50 50L50 0',
24
- fill: 'currentColor',
25
- opacity: '0.5'
26
- }, [
27
- h('animateTransform', {
28
- attributeName: 'transform',
29
- type: 'rotate',
30
- from: '0 50 50',
31
- to: '360 50 50',
32
- dur: '1.6s',
33
- repeatCount: 'indefinite'
34
- })
35
- ]),
36
- h('path', {
37
- d: 'M100 50A50 50 0 0 1 50 100L50 50L100 50',
38
- fill: 'currentColor',
39
- opacity: '0.5'
40
- }, [
41
- h('animateTransform', {
42
- attributeName: 'transform',
43
- type: 'rotate',
44
- from: '0 50 50',
45
- to: '360 50 50',
46
- dur: '2.4s',
47
- repeatCount: 'indefinite'
48
- })
49
- ]),
50
- h('path', {
51
- d: 'M50 100A50 50 0 0 1 0 50L50 50L50 100',
52
- fill: 'currentColor',
53
- opacity: '0.5'
54
- }, [
55
- h('animateTransform', {
56
- attributeName: 'transform',
57
- type: 'rotate',
58
- from: '0 50 50',
59
- to: '360 50 50',
60
- dur: '3.2s',
61
- repeatCount: 'indefinite'
62
- })
63
- ])
64
- ]
6
+ const innerHTML = '<path d="M0 50A50 50 0 0 1 50 0L50 50L0 50" fill="currentColor" opacity="0.5"><animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="0.8s" repeatCount="indefinite"></animateTransform></path><path d="M50 0A50 50 0 0 1 100 50L50 50L50 0" fill="currentColor" opacity="0.5"><animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="1.6s" repeatCount="indefinite"></animateTransform></path><path d="M100 50A50 50 0 0 1 50 100L50 50L100 50" fill="currentColor" opacity="0.5"><animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="2.4s" repeatCount="indefinite"></animateTransform></path><path d="M50 100A50 50 0 0 1 0 50L50 50L50 100" fill="currentColor" opacity="0.5"><animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="3.2s" repeatCount="indefinite"></animateTransform></path>'
65
7
 
66
8
  export default createComponent({
67
9
  name: 'QSpinnerPie',
@@ -70,14 +12,14 @@ export default createComponent({
70
12
 
71
13
  setup (props) {
72
14
  const { cSize, classes } = useSpinner(props)
73
-
74
15
  return () => h('svg', {
75
16
  class: classes.value,
76
17
  width: cSize.value,
77
18
  height: cSize.value,
78
19
  viewBox: '0 0 100 100',
79
20
  preserveAspectRatio: 'xMidYMid',
80
- xmlns: 'http://www.w3.org/2000/svg'
81
- }, svg)
21
+ xmlns: 'http://www.w3.org/2000/svg',
22
+ innerHTML
23
+ })
82
24
  }
83
25
  })
@@ -1,69 +1,9 @@
1
1
  import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
-
5
4
  import { createComponent } from '../../utils/private.create/create.js'
6
5
 
7
- const svg = [
8
- h('g', {
9
- fill: 'none',
10
- 'fill-rule': 'evenodd',
11
- 'stroke-width': '2'
12
- }, [
13
- h('circle', {
14
- cx: '22',
15
- cy: '22',
16
- r: '1'
17
- }, [
18
- h('animate', {
19
- attributeName: 'r',
20
- begin: '0s',
21
- dur: '1.8s',
22
- values: '1; 20',
23
- calcMode: 'spline',
24
- keyTimes: '0; 1',
25
- keySplines: '0.165, 0.84, 0.44, 1',
26
- repeatCount: 'indefinite'
27
- }),
28
- h('animate', {
29
- attributeName: 'stroke-opacity',
30
- begin: '0s',
31
- dur: '1.8s',
32
- values: '1; 0',
33
- calcMode: 'spline',
34
- keyTimes: '0; 1',
35
- keySplines: '0.3, 0.61, 0.355, 1',
36
- repeatCount: 'indefinite'
37
- })
38
- ]),
39
- h('circle', {
40
- cx: '22',
41
- cy: '22',
42
- r: '1'
43
- }, [
44
- h('animate', {
45
- attributeName: 'r',
46
- begin: '-0.9s',
47
- dur: '1.8s',
48
- values: '1; 20',
49
- calcMode: 'spline',
50
- keyTimes: '0; 1',
51
- keySplines: '0.165, 0.84, 0.44, 1',
52
- repeatCount: 'indefinite'
53
- }),
54
- h('animate', {
55
- attributeName: 'stroke-opacity',
56
- begin: '-0.9s',
57
- dur: '1.8s',
58
- values: '1; 0',
59
- calcMode: 'spline',
60
- keyTimes: '0; 1',
61
- keySplines: '0.3, 0.61, 0.355, 1',
62
- repeatCount: 'indefinite'
63
- })
64
- ])
65
- ])
66
- ]
6
+ const innerHTML = '<g fill="none" fill-rule="evenodd" stroke-width="2"><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="0s" dur="1.8s" values="1; 20" calcMode="spline" keyTimes="0; 1" keySplines="0.165, 0.84, 0.44, 1" repeatCount="indefinite"></animate><animate attributeName="stroke-opacity" begin="0s" dur="1.8s" values="1; 0" calcMode="spline" keyTimes="0; 1" keySplines="0.3, 0.61, 0.355, 1" repeatCount="indefinite"></animate></circle><circle cx="22" cy="22" r="1"><animate attributeName="r" begin="-0.9s" dur="1.8s" values="1; 20" calcMode="spline" keyTimes="0; 1" keySplines="0.165, 0.84, 0.44, 1" repeatCount="indefinite"></animate><animate attributeName="stroke-opacity" begin="-0.9s" dur="1.8s" values="1; 0" calcMode="spline" keyTimes="0; 1" keySplines="0.3, 0.61, 0.355, 1" repeatCount="indefinite"></animate></circle></g>'
67
7
 
68
8
  export default createComponent({
69
9
  name: 'QSpinnerPuff',
@@ -72,14 +12,14 @@ export default createComponent({
72
12
 
73
13
  setup (props) {
74
14
  const { cSize, classes } = useSpinner(props)
75
-
76
15
  return () => h('svg', {
77
16
  class: classes.value,
78
17
  stroke: 'currentColor',
79
18
  width: cSize.value,
80
19
  height: cSize.value,
81
20
  viewBox: '0 0 44 44',
82
- xmlns: 'http://www.w3.org/2000/svg'
83
- }, svg)
21
+ xmlns: 'http://www.w3.org/2000/svg',
22
+ innerHTML
23
+ })
84
24
  }
85
25
  })
@@ -1,62 +1,9 @@
1
1
  import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
-
5
4
  import { createComponent } from '../../utils/private.create/create.js'
6
5
 
7
- const svg = [
8
- h('g', {
9
- transform: 'scale(0.55)'
10
- }, [
11
- h('circle', {
12
- cx: '30',
13
- cy: '150',
14
- r: '30',
15
- fill: 'currentColor'
16
- }, [
17
- h('animate', {
18
- attributeName: 'opacity',
19
- from: '0',
20
- to: '1',
21
- dur: '1s',
22
- begin: '0',
23
- repeatCount: 'indefinite',
24
- keyTimes: '0;0.5;1',
25
- values: '0;1;1'
26
- })
27
- ]),
28
- h('path', {
29
- d: 'M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z',
30
- fill: 'currentColor'
31
- }, [
32
- h('animate', {
33
- attributeName: 'opacity',
34
- from: '0',
35
- to: '1',
36
- dur: '1s',
37
- begin: '0.1',
38
- repeatCount: 'indefinite',
39
- keyTimes: '0;0.5;1',
40
- values: '0;1;1'
41
- })
42
- ]),
43
- h('path', {
44
- d: 'M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z',
45
- fill: 'currentColor'
46
- }, [
47
- h('animate', {
48
- attributeName: 'opacity',
49
- from: '0',
50
- to: '1',
51
- dur: '1s',
52
- begin: '0.2',
53
- repeatCount: 'indefinite',
54
- keyTimes: '0;0.5;1',
55
- values: '0;1;1'
56
- })
57
- ])
58
- ])
59
- ]
6
+ const innerHTML = '<g transform="scale(0.55)"><circle cx="30" cy="150" r="30" fill="currentColor"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></circle><path d="M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z" fill="currentColor"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0.1" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></path><path d="M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z" fill="currentColor"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0.2" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></path></g>'
60
7
 
61
8
  export default createComponent({
62
9
  name: 'QSpinnerRadio',
@@ -65,14 +12,14 @@ export default createComponent({
65
12
 
66
13
  setup (props) {
67
14
  const { cSize, classes } = useSpinner(props)
68
-
69
15
  return () => h('svg', {
70
16
  class: classes.value,
71
17
  width: cSize.value,
72
18
  height: cSize.value,
73
19
  viewBox: '0 0 100 100',
74
20
  preserveAspectRatio: 'xMidYMid',
75
- xmlns: 'http://www.w3.org/2000/svg'
76
- }, svg)
21
+ xmlns: 'http://www.w3.org/2000/svg',
22
+ innerHTML
23
+ })
77
24
  }
78
25
  })
@@ -1,92 +1,9 @@
1
1
  import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
-
5
4
  import { createComponent } from '../../utils/private.create/create.js'
6
5
 
7
- const svg = [
8
- h('g', {
9
- fill: 'none',
10
- 'fill-rule': 'evenodd',
11
- transform: 'translate(1 1)',
12
- 'stroke-width': '2'
13
- }, [
14
- h('circle', {
15
- cx: '22',
16
- cy: '22',
17
- r: '6'
18
- }, [
19
- h('animate', {
20
- attributeName: 'r',
21
- begin: '1.5s',
22
- dur: '3s',
23
- values: '6;22',
24
- calcMode: 'linear',
25
- repeatCount: 'indefinite'
26
- }),
27
- h('animate', {
28
- attributeName: 'stroke-opacity',
29
- begin: '1.5s',
30
- dur: '3s',
31
- values: '1;0',
32
- calcMode: 'linear',
33
- repeatCount: 'indefinite'
34
- }),
35
- h('animate', {
36
- attributeName: 'stroke-width',
37
- begin: '1.5s',
38
- dur: '3s',
39
- values: '2;0',
40
- calcMode: 'linear',
41
- repeatCount: 'indefinite'
42
- })
43
- ]),
44
- h('circle', {
45
- cx: '22',
46
- cy: '22',
47
- r: '6'
48
- }, [
49
- h('animate', {
50
- attributeName: 'r',
51
- begin: '3s',
52
- dur: '3s',
53
- values: '6;22',
54
- calcMode: 'linear',
55
- repeatCount: 'indefinite'
56
- }),
57
- h('animate', {
58
- attributeName: 'stroke-opacity',
59
- begin: '3s',
60
- dur: '3s',
61
- values: '1;0',
62
- calcMode: 'linear',
63
- repeatCount: 'indefinite'
64
- }),
65
- h('animate', {
66
- attributeName: 'stroke-width',
67
- begin: '3s',
68
- dur: '3s',
69
- values: '2;0',
70
- calcMode: 'linear',
71
- repeatCount: 'indefinite'
72
- })
73
- ]),
74
- h('circle', {
75
- cx: '22',
76
- cy: '22',
77
- r: '8'
78
- }, [
79
- h('animate', {
80
- attributeName: 'r',
81
- begin: '0s',
82
- dur: '1.5s',
83
- values: '6;1;2;3;4;5;6',
84
- calcMode: 'linear',
85
- repeatCount: 'indefinite'
86
- })
87
- ])
88
- ])
89
- ]
6
+ const innerHTML = '<g fill="none" fill-rule="evenodd" transform="translate(1 1)" stroke-width="2"><circle cx="22" cy="22" r="6"><animate attributeName="r" begin="1.5s" dur="3s" values="6;22" calcMode="linear" repeatCount="indefinite"></animate><animate attributeName="stroke-opacity" begin="1.5s" dur="3s" values="1;0" calcMode="linear" repeatCount="indefinite"></animate><animate attributeName="stroke-width" begin="1.5s" dur="3s" values="2;0" calcMode="linear" repeatCount="indefinite"></animate></circle><circle cx="22" cy="22" r="6"><animate attributeName="r" begin="3s" dur="3s" values="6;22" calcMode="linear" repeatCount="indefinite"></animate><animate attributeName="stroke-opacity" begin="3s" dur="3s" values="1;0" calcMode="linear" repeatCount="indefinite"></animate><animate attributeName="stroke-width" begin="3s" dur="3s" values="2;0" calcMode="linear" repeatCount="indefinite"></animate></circle><circle cx="22" cy="22" r="8"><animate attributeName="r" begin="0s" dur="1.5s" values="6;1;2;3;4;5;6" calcMode="linear" repeatCount="indefinite"></animate></circle></g>'
90
7
 
91
8
  export default createComponent({
92
9
  name: 'QSpinnerRings',
@@ -95,14 +12,14 @@ export default createComponent({
95
12
 
96
13
  setup (props) {
97
14
  const { cSize, classes } = useSpinner(props)
98
-
99
15
  return () => h('svg', {
100
16
  class: classes.value,
101
17
  stroke: 'currentColor',
102
18
  width: cSize.value,
103
19
  height: cSize.value,
104
20
  viewBox: '0 0 45 45',
105
- xmlns: 'http://www.w3.org/2000/svg'
106
- }, svg)
21
+ xmlns: 'http://www.w3.org/2000/svg',
22
+ innerHTML
23
+ })
107
24
  }
108
25
  })
@@ -1,70 +1,9 @@
1
1
  import { h } from 'vue'
2
2
 
3
3
  import useSpinner, { useSpinnerProps } from './use-spinner.js'
4
-
5
4
  import { createComponent } from '../../utils/private.create/create.js'
6
5
 
7
- const svg = [
8
- h('defs', [
9
- h('linearGradient', {
10
- x1: '8.042%',
11
- y1: '0%',
12
- x2: '65.682%',
13
- y2: '23.865%',
14
- id: 'a'
15
- }, [
16
- h('stop', {
17
- 'stop-color': 'currentColor',
18
- 'stop-opacity': '0',
19
- offset: '0%'
20
- }),
21
- h('stop', {
22
- 'stop-color': 'currentColor',
23
- 'stop-opacity': '.631',
24
- offset: '63.146%'
25
- }),
26
- h('stop', {
27
- 'stop-color': 'currentColor',
28
- offset: '100%'
29
- })
30
- ])
31
- ]),
32
- h('g', {
33
- transform: 'translate(1 1)',
34
- fill: 'none',
35
- 'fill-rule': 'evenodd'
36
- }, [
37
- h('path', {
38
- d: 'M36 18c0-9.94-8.06-18-18-18',
39
- stroke: 'url(#a)',
40
- 'stroke-width': '2'
41
- }, [
42
- h('animateTransform', {
43
- attributeName: 'transform',
44
- type: 'rotate',
45
- from: '0 18 18',
46
- to: '360 18 18',
47
- dur: '0.9s',
48
- repeatCount: 'indefinite'
49
- })
50
- ]),
51
- h('circle', {
52
- fill: 'currentColor',
53
- cx: '36',
54
- cy: '18',
55
- r: '1'
56
- }, [
57
- h('animateTransform', {
58
- attributeName: 'transform',
59
- type: 'rotate',
60
- from: '0 18 18',
61
- to: '360 18 18',
62
- dur: '0.9s',
63
- repeatCount: 'indefinite'
64
- })
65
- ])
66
- ])
67
- ]
6
+ const innerHTML = '<defs><linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a"><stop stop-color="currentColor" stop-opacity="0" offset="0%"></stop><stop stop-color="currentColor" stop-opacity=".631" offset="63.146%"></stop><stop stop-color="currentColor" offset="100%"></stop></linearGradient></defs><g transform="translate(1 1)" fill="none" fill-rule="evenodd"><path d="M36 18c0-9.94-8.06-18-18-18" stroke="url(#a)" stroke-width="2"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="0.9s" repeatCount="indefinite"></animateTransform></path><circle fill="currentColor" cx="36" cy="18" r="1"><animateTransform attributeName="transform" type="rotate" from="0 18 18" to="360 18 18" dur="0.9s" repeatCount="indefinite"></animateTransform></circle></g>'
68
7
 
69
8
  export default createComponent({
70
9
  name: 'QSpinnerTail',
@@ -73,13 +12,13 @@ export default createComponent({
73
12
 
74
13
  setup (props) {
75
14
  const { cSize, classes } = useSpinner(props)
76
-
77
15
  return () => h('svg', {
78
16
  class: classes.value,
79
17
  width: cSize.value,
80
18
  height: cSize.value,
81
19
  viewBox: '0 0 38 38',
82
- xmlns: 'http://www.w3.org/2000/svg'
83
- }, svg)
20
+ xmlns: 'http://www.w3.org/2000/svg',
21
+ innerHTML
22
+ })
84
23
  }
85
24
  })
@@ -30,9 +30,10 @@ export default createComponent({
30
30
  }
31
31
  )
32
32
 
33
- watch(() => `${ props.name } | ${ props.exact } | ${ (routeData.resolvedLink.value || {}).href }`, () => {
34
- $tabs.verifyRouteModel()
35
- })
33
+ watch(
34
+ () => `${ props.name } | ${ props.exact } | ${ (routeData.resolvedLink.value || {}).href }`,
35
+ $tabs.verifyRouteModel
36
+ )
36
37
 
37
38
  return () => renderTab(routeData.linkTag.value, routeData.linkAttrs.value)
38
39
  }
@@ -160,18 +160,18 @@ export default createComponent({
160
160
  watch(() => props.outsideArrows, recalculateScroll)
161
161
 
162
162
  function updateModel ({ name, setCurrent, skipEmit }) {
163
- if (currentModel.value !== name) {
164
- if (skipEmit !== true && props[ 'onUpdate:modelValue' ] !== void 0) {
165
- emit('update:modelValue', name)
166
- }
163
+ if (currentModel.value === name) return
167
164
 
168
- if (
169
- setCurrent === true
170
- || props[ 'onUpdate:modelValue' ] === void 0
171
- ) {
172
- animate(currentModel.value, name)
173
- currentModel.value = name
174
- }
165
+ if (skipEmit !== true && props[ 'onUpdate:modelValue' ] !== void 0) {
166
+ emit('update:modelValue', name)
167
+ }
168
+
169
+ if (
170
+ setCurrent === true
171
+ || props[ 'onUpdate:modelValue' ] === void 0
172
+ ) {
173
+ animate(currentModel.value, name)
174
+ currentModel.value = name
175
175
  }
176
176
  }
177
177
 
@@ -219,7 +219,13 @@ export default createComponent({
219
219
  ? tabDataList.find(tab => tab.name.value === newName)
220
220
  : null
221
221
 
222
- if (oldTab && newTab) {
222
+ if (hadActivated === true) {
223
+ // After the component has been re-activated
224
+ // we should not animate the transition.
225
+ // Consider it as if the component has just been mounted.
226
+ hadActivated = false
227
+ }
228
+ else if (oldTab && newTab) {
223
229
  const
224
230
  oldEl = oldTab.tabIndicatorRef.value,
225
231
  newEl = newTab.tabIndicatorRef.value
@@ -413,7 +419,8 @@ export default createComponent({
413
419
  return true
414
420
  }
415
421
 
416
- // do not use directly; use verifyRouteModel() instead
422
+ // 1. Do not use directly; use verifyRouteModel() instead
423
+ // 2. Should set hadActivated to false upon exit
417
424
  function updateActiveRoute () {
418
425
  let name = null, bestScore = { matchedLen: 0, queryDiff: 9999, hrefLen: 0 }
419
426
 
@@ -506,6 +513,7 @@ export default createComponent({
506
513
  && tabDataList.some(tab => tab.routeData === void 0 && tab.name.value === currentModel.value) === true
507
514
  ) {
508
515
  // we shouldn't interfere if non-route tab is active
516
+ hadActivated = false
509
517
  return
510
518
  }
511
519
 
@@ -627,7 +635,7 @@ export default createComponent({
627
635
  unwatchRoute !== void 0 && unwatchRoute()
628
636
  }
629
637
 
630
- let hadRouteWatcher
638
+ let hadRouteWatcher, hadActivated
631
639
 
632
640
  onBeforeUnmount(cleanup)
633
641
 
@@ -637,7 +645,12 @@ export default createComponent({
637
645
  })
638
646
 
639
647
  onActivated(() => {
640
- hadRouteWatcher === true && watchRoute()
648
+ if (hadRouteWatcher === true) {
649
+ watchRoute()
650
+ hadActivated = true
651
+ verifyRouteModel()
652
+ }
653
+
641
654
  recalculateScroll()
642
655
  })
643
656
 
@@ -12,6 +12,8 @@
12
12
  overflow-y: auto
13
13
  overflow-x: hidden
14
14
  padding: $tooltip-padding
15
+ max-width: $tooltip-max-width // required by the position-engine
16
+ max-height: $tooltip-max-height // required by the position-engine
15
17
 
16
18
  @media (max-width: $breakpoint-xs-max)
17
19
  font-size: $tooltip-mobile-fontsize
@@ -55,6 +55,15 @@
55
55
  "category": "behavior"
56
56
  },
57
57
 
58
+ "thumbnail-fit": {
59
+ "type": "String",
60
+ "desc": "How the thumbnail image will fit into the container; Equivalent of the background-size prop",
61
+ "default": "'cover'",
62
+ "examples": [ "'cover'", "'contain'", "'auto'", "'50%'" ],
63
+ "category": "style",
64
+ "addedIn": "v2.17"
65
+ },
66
+
58
67
  "disable": {
59
68
  "extends": "disable"
60
69
  },
@@ -81,7 +81,6 @@
81
81
  height: 200px
82
82
  min-width: 200px
83
83
  background-position: 50% 50%
84
- background-size: cover
85
84
  background-repeat: no-repeat
86
85
 
87
86
  &:before
@@ -32,9 +32,13 @@ export const coreProps = {
32
32
  bordered: Boolean,
33
33
 
34
34
  noThumbnails: Boolean,
35
+ thumbnailFit: {
36
+ type: String,
37
+ default: 'cover'
38
+ },
39
+
35
40
  autoUpload: Boolean,
36
41
  hideUploadBtn: Boolean,
37
-
38
42
  disable: Boolean,
39
43
  readonly: Boolean
40
44
  }
@@ -389,7 +393,7 @@ export function getRenderer (getPlugin, expose) {
389
393
  : (file.__status === 'uploaded' ? ' q-uploader__file--uploaded' : '')
390
394
  ),
391
395
  style: props.noThumbnails !== true && file.__img !== void 0
392
- ? { backgroundImage: 'url("' + file.__img.src + '")' }
396
+ ? { backgroundImage: 'url("' + file.__img.src + '")', backgroundSize: props.thumbnailFit }
393
397
  : null
394
398
  }, [
395
399
  h('div', {
@@ -1,8 +1,9 @@
1
- import { h, ref, computed, watch, nextTick, getCurrentInstance, Transition, KeepAlive } from 'vue'
1
+ import { h, ref, computed, watch, getCurrentInstance, Transition, KeepAlive } from 'vue'
2
2
 
3
3
  import TouchSwipe from '../../directives/touch-swipe/TouchSwipe.js'
4
4
 
5
5
  import useRenderCache from '../../composables/use-render-cache/use-render-cache.js'
6
+ import useTimeout from '../../composables/use-timeout/use-timeout.js'
6
7
 
7
8
  import { hSlot } from '../../utils/private.render/render.js'
8
9
  import { getNormalizedVNodes } from '../../utils/private.vm/vm.js'
@@ -49,6 +50,7 @@ export const usePanelEmits = [ 'update:modelValue', 'beforeTransition', 'transit
49
50
  export default function () {
50
51
  const { props, emit, proxy } = getCurrentInstance()
51
52
  const { getCache } = useRenderCache()
53
+ const { registerTimeout } = useTimeout()
52
54
 
53
55
  let panels, forcedPanelTransition
54
56
 
@@ -117,9 +119,9 @@ export default function () {
117
119
  if (panelIndex.value !== index) {
118
120
  panelIndex.value = index
119
121
  emit('beforeTransition', newVal, oldVal)
120
- nextTick(() => {
122
+ registerTimeout(() => {
121
123
  emit('transition', newVal, oldVal)
122
- })
124
+ }, props.transitionDuration)
123
125
  }
124
126
  })
125
127
 
@@ -704,6 +704,7 @@ $menu-background : #fff !default
704
704
  $menu-box-shadow : $shadow-2 !default
705
705
  $menu-box-shadow-dark : $dark-shadow-2 !default
706
706
  $menu-max-width : 95vw !default
707
+ $menu-max-height : 65vh !default
707
708
 
708
709
  $rating-grade-color : $yellow !default
709
710
  $rating-shadow : 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !default
@@ -715,6 +716,8 @@ $tooltip-border-radius : $generic-border-radius !default
715
716
  $tooltip-fontsize : 10px !default
716
717
  $tooltip-mobile-padding : 8px 16px !default
717
718
  $tooltip-mobile-fontsize : 14px !default
719
+ $tooltip-max-width : 95vw !default
720
+ $tooltip-max-height : 65vh !default
718
721
 
719
722
  $uploader-title-font-size : 14px !default
720
723
  $uploader-title-line-height : 1.285714 !default