quasar 2.11.0 → 2.11.2

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 (122) hide show
  1. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  2. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  3. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  4. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  5. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  7. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  8. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  9. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  10. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  11. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  13. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  14. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  15. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  16. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  17. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  18. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  21. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  22. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  23. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +2 -2
  25. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  31. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  32. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  33. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  36. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-mdi-v7.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/kk.umd.prod.js +2 -2
  69. package/dist/lang/km.umd.prod.js +1 -1
  70. package/dist/lang/ko-KR.umd.prod.js +1 -1
  71. package/dist/lang/kur-CKB.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/mm.umd.prod.js +1 -1
  77. package/dist/lang/ms.umd.prod.js +1 -1
  78. package/dist/lang/my.umd.prod.js +1 -1
  79. package/dist/lang/nb-NO.umd.prod.js +1 -1
  80. package/dist/lang/nl.umd.prod.js +1 -1
  81. package/dist/lang/pl.umd.prod.js +1 -1
  82. package/dist/lang/pt-BR.umd.prod.js +1 -1
  83. package/dist/lang/pt.umd.prod.js +1 -1
  84. package/dist/lang/ro.umd.prod.js +1 -1
  85. package/dist/lang/ru.umd.prod.js +1 -1
  86. package/dist/lang/sk.umd.prod.js +1 -1
  87. package/dist/lang/sl.umd.prod.js +1 -1
  88. package/dist/lang/sm.umd.prod.js +1 -1
  89. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  90. package/dist/lang/sr.umd.prod.js +1 -1
  91. package/dist/lang/sv.umd.prod.js +1 -1
  92. package/dist/lang/ta.umd.prod.js +1 -1
  93. package/dist/lang/th.umd.prod.js +1 -1
  94. package/dist/lang/tr.umd.prod.js +1 -1
  95. package/dist/lang/ug.umd.prod.js +1 -1
  96. package/dist/lang/uk.umd.prod.js +1 -1
  97. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  98. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  99. package/dist/lang/vi.umd.prod.js +1 -1
  100. package/dist/lang/zh-CN.umd.prod.js +1 -1
  101. package/dist/lang/zh-TW.umd.prod.js +1 -1
  102. package/dist/quasar.cjs.prod.js +2 -2
  103. package/dist/quasar.css +8 -3
  104. package/dist/quasar.esm.js +73 -64
  105. package/dist/quasar.esm.prod.js +2 -2
  106. package/dist/quasar.prod.css +1 -1
  107. package/dist/quasar.rtl.css +9 -3
  108. package/dist/quasar.rtl.prod.css +1 -1
  109. package/dist/quasar.sass +8 -3
  110. package/dist/quasar.umd.js +73 -64
  111. package/dist/quasar.umd.prod.js +2 -2
  112. package/dist/types/index.d.ts +1 -1
  113. package/dist/web-types/web-types.json +1 -1
  114. package/lang/index.json +1 -1
  115. package/lang/kk.js +1 -1
  116. package/lang/kk.mjs +1 -1
  117. package/package.json +1 -1
  118. package/src/body.js +34 -4
  119. package/src/components/tabs/QTabs.js +35 -57
  120. package/src/components/tabs/QTabs.sass +5 -1
  121. package/src/css/core/mouse.sass +3 -1
  122. package/src/plugins/Platform.js +1 -1
@@ -14096,7 +14096,7 @@ declare module "./lang" {
14096
14096
  is: true;
14097
14097
  it: true;
14098
14098
  ja: true;
14099
- kz: true;
14099
+ kk: true;
14100
14100
  km: true;
14101
14101
  "ko-KR": true;
14102
14102
  "kur-CKB": true;
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.11.0",
5
+ "version": "2.11.2",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
package/lang/index.json CHANGED
@@ -112,7 +112,7 @@
112
112
  "nativeName": "日本語 (にほんご)"
113
113
  },
114
114
  {
115
- "isoName": "kz",
115
+ "isoName": "kk",
116
116
  "nativeName": "Қазақша"
117
117
  },
118
118
  {
package/lang/kk.js CHANGED
@@ -8,7 +8,7 @@ function plurals (n, opts) {
8
8
  }
9
9
 
10
10
  module.exports = {
11
- isoName: 'kz',
11
+ isoName: 'kk',
12
12
  nativeName: 'Қазақша',
13
13
  label: {
14
14
  clear: 'Тазалау',
package/lang/kk.mjs CHANGED
@@ -3,7 +3,7 @@ function plurals (n, opts) {
3
3
  }
4
4
 
5
5
  export default {
6
- isoName: 'kz',
6
+ isoName: 'kk',
7
7
  nativeName: 'Қазақша',
8
8
  label: {
9
9
  clear: 'Тазалау',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.11.0",
3
+ "version": "2.11.2",
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",
package/src/body.js CHANGED
@@ -45,21 +45,51 @@ function getBodyClasses ({ is, has, within }, cfg) {
45
45
  }
46
46
 
47
47
  function applyClientSsrCorrections () {
48
+ const { is } = client
48
49
  const classes = document.body.className
49
- let newCls = classes
50
+
51
+ const classList = new Set(classes.replace(/ {2}/g, ' ').split(' '))
50
52
 
51
53
  if (iosCorrection !== void 0) {
52
- newCls = newCls.replace('desktop', 'platform-ios mobile')
54
+ classList.delete('desktop')
55
+ classList.add('platform-ios')
56
+ classList.add('mobile')
57
+ }
58
+ // else: is it SSG?
59
+ else if (is.nativeMobile !== true && is.electron !== true && is.bex !== true) {
60
+ if (is.desktop === true) {
61
+ classList.delete('mobile')
62
+ classList.delete('platform-ios')
63
+ classList.delete('platform-android')
64
+ classList.add('desktop')
65
+ }
66
+ else if (is.mobile === true) {
67
+ classList.delete('desktop')
68
+ classList.add('mobile')
69
+
70
+ const mobile = getMobilePlatform(is)
71
+ if (mobile !== void 0) {
72
+ classList.add(`platform-${ mobile }`)
73
+ classList.delete(`platform-${ mobile === 'ios' ? 'android' : 'ios' }`)
74
+ }
75
+ else {
76
+ classList.delete('platform-ios')
77
+ classList.delete('platform-android')
78
+ }
79
+ }
53
80
  }
54
81
 
55
82
  if (client.has.touch === true) {
56
- newCls = newCls.replace('no-touch', 'touch')
83
+ classList.delete('no-touch')
84
+ classList.add('touch')
57
85
  }
58
86
 
59
87
  if (client.within.iframe === true) {
60
- newCls += ' within-iframe'
88
+ classList.add('within-iframe')
61
89
  }
62
90
 
91
+ const newCls = Array.from(classList).join(' ')
92
+
63
93
  if (classes !== newCls) {
64
94
  document.body.className = newCls
65
95
  }
@@ -7,7 +7,6 @@ import useTick from '../../composables/private/use-tick.js'
7
7
  import useTimeout from '../../composables/private/use-timeout.js'
8
8
 
9
9
  import { createComponent } from '../../utils/private/create.js'
10
- import { noop } from '../../utils/event.js'
11
10
  import { hSlot } from '../../utils/private/render.js'
12
11
  import { tabsKey } from '../../utils/private/symbols.js'
13
12
  import { rtlHasScrollBug } from '../../utils/private/rtl.js'
@@ -85,18 +84,11 @@ export default createComponent({
85
84
  const rightArrow = ref(false)
86
85
  const justify = ref(false)
87
86
 
88
- const arrowsEnabled = computed(() =>
89
- $q.platform.is.desktop === true || props.mobileArrows === true
90
- )
91
-
92
87
  const tabDataList = []
93
88
  const tabDataListLen = ref(0)
94
89
  const hasFocus = ref(false)
95
90
 
96
91
  let animateTimer, scrollTimer, unwatchRoute
97
- let localUpdateArrows = arrowsEnabled.value === true
98
- ? updateArrowsFn
99
- : noop
100
92
 
101
93
  const tabProps = computed(() => ({
102
94
  activeClass: props.activeClass,
@@ -137,17 +129,17 @@ export default createComponent({
137
129
  'q-tabs row no-wrap items-center'
138
130
  + ` q-tabs--${ scrollable.value === true ? '' : 'not-' }scrollable`
139
131
  + ` q-tabs--${ props.vertical === true ? 'vertical' : 'horizontal' }`
140
- + ` q-tabs__arrows--${ arrowsEnabled.value === true && props.outsideArrows === true ? 'outside' : 'inside' }`
132
+ + ` q-tabs__arrows--${ props.outsideArrows === true ? 'outside' : 'inside' }`
133
+ + ` q-tabs--mobile-with${ props.mobileArrows === true ? '' : 'out' }-arrows`
141
134
  + (props.dense === true ? ' q-tabs--dense' : '')
142
135
  + (props.shrink === true ? ' col-shrink' : '')
143
136
  + (props.stretch === true ? ' self-stretch' : '')
144
137
  )
145
138
 
146
139
  const innerClass = computed(() =>
147
- 'q-tabs__content row no-wrap items-center self-stretch hide-scrollbar relative-position '
140
+ 'q-tabs__content scroll--mobile row no-wrap items-center self-stretch hide-scrollbar relative-position '
148
141
  + alignClass.value
149
142
  + (props.contentClass !== void 0 ? ` ${ props.contentClass }` : '')
150
- + ($q.platform.is.mobile === true ? ' scroll' : '')
151
143
  )
152
144
 
153
145
  const domProps = computed(() => (
@@ -159,25 +151,15 @@ export default createComponent({
159
151
  const isRTL = computed(() => props.vertical !== true && $q.lang.rtl === true)
160
152
  const rtlPosCorrection = computed(() => rtlHasScrollBug === false && isRTL.value === true)
161
153
 
162
- watch(isRTL, localUpdateArrows)
154
+ watch(isRTL, updateArrows)
163
155
 
164
156
  watch(() => props.modelValue, name => {
165
157
  updateModel({ name, setCurrent: true, skipEmit: true })
166
158
  })
167
159
 
168
- watch(() => props.outsideArrows, () => {
169
- recalculateScroll()
170
- })
171
-
172
- watch(arrowsEnabled, v => {
173
- localUpdateArrows = v === true
174
- ? updateArrowsFn
175
- : noop
176
-
177
- recalculateScroll()
178
- })
160
+ watch(() => props.outsideArrows, recalculateScroll)
179
161
 
180
- function updateModel ({ name, setCurrent, skipEmit, fromRoute }) {
162
+ function updateModel ({ name, setCurrent, skipEmit }) {
181
163
  if (currentModel.value !== name) {
182
164
  if (skipEmit !== true && props[ 'onUpdate:modelValue' ] !== void 0) {
183
165
  emit('update:modelValue', name)
@@ -223,7 +205,7 @@ export default createComponent({
223
205
  scrollable.value = scroll
224
206
 
225
207
  // Arrows need to be updated even if the scroll status was already true
226
- scroll === true && registerUpdateArrowsTick(localUpdateArrows)
208
+ scroll === true && registerUpdateArrowsTick(updateArrows)
227
209
 
228
210
  justify.value = size < parseInt(props.breakpoint, 10)
229
211
  }
@@ -280,34 +262,34 @@ export default createComponent({
280
262
 
281
263
  if (offset < 0) {
282
264
  contentRef.value[ props.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.floor(offset)
283
- localUpdateArrows()
265
+ updateArrows()
284
266
  return
285
267
  }
286
268
 
287
269
  offset += props.vertical === true ? newPos.height - height : newPos.width - width
288
270
  if (offset > 0) {
289
271
  contentRef.value[ props.vertical === true ? 'scrollTop' : 'scrollLeft' ] += Math.ceil(offset)
290
- localUpdateArrows()
272
+ updateArrows()
291
273
  }
292
274
  }
293
275
 
294
- function updateArrowsFn () {
276
+ function updateArrows () {
295
277
  const content = contentRef.value
296
- if (content !== null) {
297
- const
298
- rect = content.getBoundingClientRect(),
299
- pos = props.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft)
278
+ if (content === null) { return }
300
279
 
301
- if (isRTL.value === true) {
302
- leftArrow.value = Math.ceil(pos + rect.width) < content.scrollWidth - 1
303
- rightArrow.value = pos > 0
304
- }
305
- else {
306
- leftArrow.value = pos > 0
307
- rightArrow.value = props.vertical === true
308
- ? Math.ceil(pos + rect.height) < content.scrollHeight
309
- : Math.ceil(pos + rect.width) < content.scrollWidth
310
- }
280
+ const
281
+ rect = content.getBoundingClientRect(),
282
+ pos = props.vertical === true ? content.scrollTop : Math.abs(content.scrollLeft)
283
+
284
+ if (isRTL.value === true) {
285
+ leftArrow.value = Math.ceil(pos + rect.width) < content.scrollWidth - 1
286
+ rightArrow.value = pos > 0
287
+ }
288
+ else {
289
+ leftArrow.value = pos > 0
290
+ rightArrow.value = props.vertical === true
291
+ ? Math.ceil(pos + rect.height) < content.scrollHeight
292
+ : Math.ceil(pos + rect.width) < content.scrollWidth
311
293
  }
312
294
  }
313
295
 
@@ -409,7 +391,7 @@ export default createComponent({
409
391
  }
410
392
 
411
393
  set(content, pos)
412
- localUpdateArrows()
394
+ updateArrows()
413
395
 
414
396
  return done
415
397
  }
@@ -653,17 +635,21 @@ export default createComponent({
653
635
  })
654
636
 
655
637
  return () => {
656
- const child = [
638
+ return h('div', {
639
+ ref: rootRef,
640
+ class: classes.value,
641
+ role: 'tablist',
642
+ onFocusin,
643
+ onFocusout
644
+ }, [
657
645
  h(QResizeObserver, { onResize: updateContainer }),
658
646
 
659
647
  h('div', {
660
648
  ref: contentRef,
661
649
  class: innerClass.value,
662
- onScroll: localUpdateArrows
663
- }, hSlot(slots.default))
664
- ]
650
+ onScroll: updateArrows
651
+ }, hSlot(slots.default)),
665
652
 
666
- arrowsEnabled.value === true && child.push(
667
653
  h(QIcon, {
668
654
  class: 'q-tabs__arrow q-tabs__arrow--left absolute q-tab__icon'
669
655
  + (leftArrow.value === true ? '' : ' q-tabs__arrow--faded'),
@@ -685,15 +671,7 @@ export default createComponent({
685
671
  onMouseleavePassive: stopAnimScroll,
686
672
  onTouchendPassive: stopAnimScroll
687
673
  })
688
- )
689
-
690
- return h('div', {
691
- ref: rootRef,
692
- class: classes.value,
693
- role: 'tablist',
694
- onFocusin,
695
- onFocusout
696
- }, child)
674
+ ])
697
675
  }
698
676
  }
699
677
  })
@@ -93,7 +93,11 @@
93
93
  .q-tabs__arrow--faded
94
94
  display: none
95
95
 
96
- &--not-scrollable
96
+ &--not-scrollable,
97
+ body.mobile &--scrollable.q-tabs--mobile-without-arrows
98
+ &.q-tabs__arrows--outside
99
+ padding-left: 0
100
+ padding-right: 0
97
101
  .q-tabs__arrow
98
102
  display: none
99
103
  .q-tabs__content
@@ -1,8 +1,10 @@
1
1
  .non-selectable
2
2
  user-select: none !important
3
3
 
4
- .scroll
4
+ .scroll,
5
+ body.mobile .scroll--mobile
5
6
  overflow: auto
7
+
6
8
  .scroll, .scroll-x, .scroll-y
7
9
  -webkit-overflow-scrolling: touch
8
10
  will-change: scroll-position
@@ -308,8 +308,8 @@ const Platform = {
308
308
  // the rest of the props; we also avoid
309
309
  // hydration errors
310
310
  opts.onSSRHydrated.push(() => {
311
- isRuntimeSsrPreHydration.value = false
312
311
  Object.assign($q.platform, client)
312
+ isRuntimeSsrPreHydration.value = false
313
313
  iosCorrection = void 0
314
314
  })
315
315