quasar 1.22.4 → 1.22.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 (144) hide show
  1. package/dist/api/BottomSheet.json +12 -0
  2. package/dist/api/QCarouselSlide.json +1 -1
  3. package/dist/api/QChatMessage.json +1 -1
  4. package/dist/api/QImg.json +8 -2
  5. package/dist/api/QTimelineEntry.json +1 -1
  6. package/dist/icon-set/bootstrap-icons.umd.min.js +1 -1
  7. package/dist/icon-set/eva-icons.umd.min.js +1 -1
  8. package/dist/icon-set/fontawesome-v5-pro.umd.min.js +1 -1
  9. package/dist/icon-set/fontawesome-v5.umd.min.js +1 -1
  10. package/dist/icon-set/fontawesome-v6-pro.umd.min.js +1 -1
  11. package/dist/icon-set/fontawesome-v6.umd.min.js +1 -1
  12. package/dist/icon-set/ionicons-v4.umd.min.js +1 -1
  13. package/dist/icon-set/line-awesome.umd.min.js +1 -1
  14. package/dist/icon-set/material-icons-outlined.umd.min.js +1 -1
  15. package/dist/icon-set/material-icons-round.umd.min.js +1 -1
  16. package/dist/icon-set/material-icons-sharp.umd.min.js +1 -1
  17. package/dist/icon-set/material-icons.umd.min.js +1 -1
  18. package/dist/icon-set/material-symbols-outlined.umd.min.js +1 -1
  19. package/dist/icon-set/material-symbols-rounded.umd.min.js +1 -1
  20. package/dist/icon-set/material-symbols-sharp.umd.min.js +1 -1
  21. package/dist/icon-set/mdi-v3.umd.min.js +1 -1
  22. package/dist/icon-set/mdi-v4.umd.min.js +1 -1
  23. package/dist/icon-set/mdi-v5.umd.min.js +1 -1
  24. package/dist/icon-set/mdi-v6.umd.min.js +1 -1
  25. package/dist/icon-set/mdi-v7.umd.min.js +1 -1
  26. package/dist/icon-set/svg-bootstrap-icons.umd.min.js +1 -1
  27. package/dist/icon-set/svg-eva-icons.umd.min.js +1 -1
  28. package/dist/icon-set/svg-fontawesome-v5.umd.min.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v6.umd.min.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v4.umd.min.js +1 -1
  31. package/dist/icon-set/svg-ionicons-v5.umd.min.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v6.umd.min.js +1 -1
  33. package/dist/icon-set/svg-line-awesome.umd.min.js +1 -1
  34. package/dist/icon-set/svg-material-icons-outlined.umd.min.js +1 -1
  35. package/dist/icon-set/svg-material-icons-round.umd.min.js +1 -1
  36. package/dist/icon-set/svg-material-icons-sharp.umd.min.js +1 -1
  37. package/dist/icon-set/svg-material-icons.umd.min.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-outlined.umd.min.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-rounded.umd.min.js +1 -1
  40. package/dist/icon-set/svg-material-symbols-sharp.umd.min.js +1 -1
  41. package/dist/icon-set/svg-mdi-v4.umd.min.js +1 -1
  42. package/dist/icon-set/svg-mdi-v5.umd.min.js +1 -1
  43. package/dist/icon-set/svg-mdi-v6.umd.min.js +1 -1
  44. package/dist/icon-set/svg-mdi-v7.umd.min.js +1 -1
  45. package/dist/icon-set/svg-themify.umd.min.js +1 -1
  46. package/dist/icon-set/themify.umd.min.js +1 -1
  47. package/dist/lang/ar.umd.min.js +1 -1
  48. package/dist/lang/az-latn.umd.min.js +1 -1
  49. package/dist/lang/bg.umd.min.js +1 -1
  50. package/dist/lang/ca.umd.min.js +1 -1
  51. package/dist/lang/cs.umd.min.js +1 -1
  52. package/dist/lang/da.umd.min.js +1 -1
  53. package/dist/lang/de.umd.min.js +1 -1
  54. package/dist/lang/el.umd.min.js +1 -1
  55. package/dist/lang/en-gb.umd.min.js +1 -1
  56. package/dist/lang/en-us.umd.min.js +1 -1
  57. package/dist/lang/eo.umd.min.js +1 -1
  58. package/dist/lang/es.umd.min.js +1 -1
  59. package/dist/lang/et.umd.min.js +1 -1
  60. package/dist/lang/eu.umd.min.js +1 -1
  61. package/dist/lang/fa-ir.umd.min.js +1 -1
  62. package/dist/lang/fa.umd.min.js +1 -1
  63. package/dist/lang/fi.umd.min.js +1 -1
  64. package/dist/lang/fr.umd.min.js +1 -1
  65. package/dist/lang/gn.umd.min.js +1 -1
  66. package/dist/lang/he.umd.min.js +1 -1
  67. package/dist/lang/hr.umd.min.js +1 -1
  68. package/dist/lang/hu.umd.min.js +1 -1
  69. package/dist/lang/id.umd.min.js +1 -1
  70. package/dist/lang/is.umd.min.js +1 -1
  71. package/dist/lang/it.umd.min.js +1 -1
  72. package/dist/lang/ja.umd.min.js +1 -1
  73. package/dist/lang/km.umd.min.js +1 -1
  74. package/dist/lang/ko-kr.umd.min.js +1 -1
  75. package/dist/lang/kur-ckb.umd.min.js +1 -1
  76. package/dist/lang/kz.umd.min.js +1 -1
  77. package/dist/lang/lu.umd.min.js +1 -1
  78. package/dist/lang/lv.umd.min.js +1 -1
  79. package/dist/lang/ml.umd.min.js +1 -1
  80. package/dist/lang/mm.umd.min.js +1 -1
  81. package/dist/lang/ms.umd.min.js +1 -1
  82. package/dist/lang/my.umd.min.js +1 -1
  83. package/dist/lang/nb-no.umd.min.js +1 -1
  84. package/dist/lang/nl.umd.min.js +1 -1
  85. package/dist/lang/pl.umd.min.js +1 -1
  86. package/dist/lang/pt-br.umd.min.js +1 -1
  87. package/dist/lang/pt.umd.min.js +1 -1
  88. package/dist/lang/ro.umd.min.js +1 -1
  89. package/dist/lang/ru.umd.min.js +1 -1
  90. package/dist/lang/sk.umd.min.js +1 -1
  91. package/dist/lang/sl.umd.min.js +2 -2
  92. package/dist/lang/sm.umd.min.js +1 -1
  93. package/dist/lang/sr.umd.min.js +1 -1
  94. package/dist/lang/sv.umd.min.js +1 -1
  95. package/dist/lang/ta.umd.min.js +1 -1
  96. package/dist/lang/th.umd.min.js +1 -1
  97. package/dist/lang/tr.umd.min.js +1 -1
  98. package/dist/lang/ug.umd.min.js +1 -1
  99. package/dist/lang/uk.umd.min.js +1 -1
  100. package/dist/lang/uz-Cyrl.umd.min.js +1 -1
  101. package/dist/lang/uz-Latn.umd.min.js +1 -1
  102. package/dist/lang/vi.umd.min.js +1 -1
  103. package/dist/lang/zh-hans.umd.min.js +1 -1
  104. package/dist/lang/zh-hant.umd.min.js +1 -1
  105. package/dist/quasar.addon.css +1 -1
  106. package/dist/quasar.addon.rtl.css +1 -1
  107. package/dist/quasar.common.js +2 -2
  108. package/dist/quasar.css +2 -4
  109. package/dist/quasar.esm.js +2 -2
  110. package/dist/quasar.ie.polyfills.js +1 -1
  111. package/dist/quasar.ie.polyfills.umd.min.js +1 -1
  112. package/dist/quasar.min.css +1 -1
  113. package/dist/quasar.rtl.css +2 -4
  114. package/dist/quasar.rtl.min.css +1 -1
  115. package/dist/quasar.sass +2 -3
  116. package/dist/quasar.styl +2 -3
  117. package/dist/quasar.umd.js +95 -20
  118. package/dist/quasar.umd.min.js +2 -2
  119. package/dist/quasar.umd.modern.js +88 -18
  120. package/dist/quasar.umd.modern.min.js +2 -2
  121. package/dist/types/index.d.ts +12 -0
  122. package/dist/vetur/quasar-attributes.json +4 -0
  123. package/dist/vetur/quasar-tags.json +2 -1
  124. package/dist/web-types/web-types.json +16 -6
  125. package/lang/sl.js +1 -1
  126. package/package.json +1 -1
  127. package/src/components/carousel/QCarouselSlide.json +1 -1
  128. package/src/components/chat/QChatMessage.json +1 -1
  129. package/src/components/date/QDate.js +8 -3
  130. package/src/components/dialog/QDialog.js +2 -1
  131. package/src/components/dialog-bottom-sheet/BottomSheet.js +2 -0
  132. package/src/components/img/QImg.js +10 -1
  133. package/src/components/img/QImg.json +9 -2
  134. package/src/components/infinite-scroll/QInfiniteScroll.js +37 -2
  135. package/src/components/layout/QLayout.sass +1 -0
  136. package/src/components/layout/QLayout.styl +1 -0
  137. package/src/components/slide-transition/QSlideTransition.js +6 -1
  138. package/src/components/timeline/QTimelineEntry.json +1 -1
  139. package/src/css/core/visibility.sass +0 -3
  140. package/src/css/core/visibility.styl +0 -3
  141. package/src/mixins/mask.js +1 -1
  142. package/src/mixins/prevent-scroll.js +9 -1
  143. package/src/plugins/BottomSheet.json +7 -0
  144. package/src/utils/is.js +11 -6
@@ -81,6 +81,10 @@ export interface BottomSheet {
81
81
  * CSS classes for this action
82
82
  */
83
83
  classes? : string | any[] | LooseDictionary
84
+ /**
85
+ * Style definitions to be attributed to this action element
86
+ */
87
+ style? : string | any[] | LooseDictionary
84
88
  /**
85
89
  * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)
86
90
  */
@@ -3905,6 +3909,10 @@ export interface QImg extends Vue {
3905
3909
  * Enable the native context menu of the image
3906
3910
  */
3907
3911
  nativeContextMenu? : boolean
3912
+ /**
3913
+ * Make the native img not-draggable (to allow swipe in QCarousel) - only has meaning when `native-context-menu` is used
3914
+ */
3915
+ notDraggable? : boolean
3908
3916
  }
3909
3917
 
3910
3918
  export interface QInfiniteScroll extends Vue {
@@ -8792,6 +8800,10 @@ export interface QVueGlobals {
8792
8800
  * CSS classes for this action
8793
8801
  */
8794
8802
  classes? : string | any[] | LooseDictionary
8803
+ /**
8804
+ * Style definitions to be attributed to this action element
8805
+ */
8806
+ style? : string | any[] | LooseDictionary
8795
8807
  /**
8796
8808
  * Icon name following Quasar convention; Make sure you have the icon library installed unless you are using 'img:' prefix; If 'none' (String) is used as value then no icon is rendered (but screen real estate will still be used for it)
8797
8809
  */
@@ -2367,6 +2367,10 @@
2367
2367
  "type": "boolean",
2368
2368
  "description": "Enable the native context menu of the image"
2369
2369
  },
2370
+ "q-img/not-draggable": {
2371
+ "type": "boolean",
2372
+ "description": "Make the native img not-draggable (to allow swipe in QCarousel) - only has meaning when `native-context-menu` is used"
2373
+ },
2370
2374
  "q-infinite-scroll/offset": {
2371
2375
  "type": "number",
2372
2376
  "description": "Offset (pixels) to bottom of Infinite Scroll container from which the component should start loading more content in advance"
@@ -767,7 +767,8 @@
767
767
  "spinner-color",
768
768
  "spinner-size",
769
769
  "no-default-spinner",
770
- "native-context-menu"
770
+ "native-context-menu",
771
+ "not-draggable"
771
772
  ],
772
773
  "description": ""
773
774
  },
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "1.22.4",
5
+ "version": "1.22.6",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -2573,7 +2573,7 @@
2573
2573
  "kind": "expression",
2574
2574
  "type": "string"
2575
2575
  },
2576
- "description": "URL pointing to a slide background image (use public folder)\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"",
2576
+ "description": "URL pointing to a slide background image (use public folder)\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://picsum.photos/500/300\"",
2577
2577
  "doc-url": "https://v1.quasar.dev/vue-components/carousel"
2578
2578
  }
2579
2579
  ],
@@ -2646,7 +2646,7 @@
2646
2646
  "kind": "expression",
2647
2647
  "type": "string"
2648
2648
  },
2649
- "description": "URL to the avatar image of the author\n\nExamples:\n(public folder) src=\"boy-avatar.png\"\n(assets folder) src=\"~assets/boy-avatar.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"",
2649
+ "description": "URL to the avatar image of the author\n\nExamples:\n(public folder) src=\"boy-avatar.png\"\n(assets folder) src=\"~assets/boy-avatar.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://picsum.photos/500/300\"",
2650
2650
  "doc-url": "https://v1.quasar.dev/vue-components/chat"
2651
2651
  },
2652
2652
  {
@@ -7663,7 +7663,7 @@
7663
7663
  "kind": "expression",
7664
7664
  "type": "string"
7665
7665
  },
7666
- "description": "Path to image\n\nExamples:\n(public folder) src=\"img/something.png\"\n(assets folder) src=\"~assets/my-img.gif\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"",
7666
+ "description": "Path to image\n\nExamples:\n(public folder) src=\"img/something.png\"\n(assets folder) src=\"~assets/my-img.gif\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://picsum.photos/500/300\"",
7667
7667
  "doc-url": "https://v1.quasar.dev/vue-components/img"
7668
7668
  },
7669
7669
  {
@@ -7717,7 +7717,7 @@
7717
7717
  "kind": "expression",
7718
7718
  "type": "string"
7719
7719
  },
7720
- "description": "While waiting for your image to load, you can use a placeholder image\n\nExamples:\n(public folder) src=\"img/some-placeholder.png\"\n(assets folder) src=\"~assets/my-placeholder.gif\"\n(relative path format) :src=\"require('./placeholder.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"",
7720
+ "description": "While waiting for your image to load, you can use a placeholder image\n\nExamples:\n(public folder) src=\"img/some-placeholder.png\"\n(assets folder) src=\"~assets/my-placeholder.gif\"\n(relative path format) :src=\"require('./placeholder.jpg')\"\n(URL) src=\"https://picsum.photos/500/300\"",
7721
7721
  "doc-url": "https://v1.quasar.dev/vue-components/img"
7722
7722
  },
7723
7723
  {
@@ -7815,6 +7815,16 @@
7815
7815
  "description": "Enable the native context menu of the image",
7816
7816
  "doc-url": "https://v1.quasar.dev/vue-components/img",
7817
7817
  "type": "boolean"
7818
+ },
7819
+ {
7820
+ "name": "not-draggable",
7821
+ "value": {
7822
+ "kind": "expression",
7823
+ "type": "boolean"
7824
+ },
7825
+ "description": "Make the native img not-draggable (to allow swipe in QCarousel) - only has meaning when `native-context-menu` is used",
7826
+ "doc-url": "https://v1.quasar.dev/vue-components/img",
7827
+ "type": "boolean"
7818
7828
  }
7819
7829
  ],
7820
7830
  "events": [
@@ -19308,7 +19318,7 @@
19308
19318
  "kind": "expression",
19309
19319
  "type": "string"
19310
19320
  },
19311
- "description": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://placeimg.com/500/300/nature\"",
19321
+ "description": "URL to the avatar image; Icon takes precedence if used, so it replaces avatar\n\nExamples:\n(public folder) src=\"img/my-bg.png\"\n(assets folder) src=\"~assets/my-img.png\"\n(relative path format) :src=\"require('./my_img.jpg')\"\n(URL) src=\"https://picsum.photos/500/300\"",
19312
19322
  "doc-url": "https://v1.quasar.dev/vue-components/timeline"
19313
19323
  },
19314
19324
  {
package/lang/sl.js CHANGED
@@ -3,7 +3,7 @@ export default {
3
3
  nativeName: 'Slovenski Jezik',
4
4
  label: {
5
5
  clear: 'Počisti',
6
- ok: 'Vredu',
6
+ ok: 'V redu',
7
7
  cancel: 'Prekliči',
8
8
  close: 'Zapri',
9
9
  set: 'Postavi',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "1.22.4",
3
+ "version": "1.22.6",
4
4
  "description": "Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time",
5
5
  "module": "src/index.esm.js",
6
6
  "typings": "dist/types/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "(public folder) src=\"img/my-bg.png\"",
27
27
  "(assets folder) src=\"~assets/my-img.png\"",
28
28
  "(relative path format) :src=\"require('./my_img.jpg')\"",
29
- "(URL) src=\"https://placeimg.com/500/300/nature\""
29
+ "(URL) src=\"https://picsum.photos/500/300\""
30
30
  ],
31
31
  "category": "model"
32
32
  }
@@ -48,7 +48,7 @@
48
48
  "(public folder) src=\"boy-avatar.png\"",
49
49
  "(assets folder) src=\"~assets/boy-avatar.png\"",
50
50
  "(relative path format) :src=\"require('./my_img.jpg')\"",
51
- "(URL) src=\"https://placeimg.com/500/300/nature\""
51
+ "(URL) src=\"https://picsum.photos/500/300\""
52
52
  ],
53
53
  "category": "content"
54
54
  },
@@ -96,8 +96,8 @@ export default Vue.extend({
96
96
  this.lastEmitValue = 0
97
97
  }
98
98
  else {
99
- const { year, month } = this.__getViewModel(this.innerMask, this.innerLocale)
100
- this.__updateViewModel(year, month)
99
+ const model = this.__getViewModel(this.innerMask, this.innerLocale)
100
+ this.__updateViewModel(model.year, model.month, model)
101
101
  }
102
102
  },
103
103
 
@@ -1265,7 +1265,7 @@ export default Vue.extend({
1265
1265
  }
1266
1266
  },
1267
1267
 
1268
- __updateViewModel (year, month) {
1268
+ __updateViewModel (year, month, time) {
1269
1269
  if (this.minNav !== void 0 && year <= this.minNav.year) {
1270
1270
  year = this.minNav.year
1271
1271
  if (month < this.minNav.month) {
@@ -1280,6 +1280,11 @@ export default Vue.extend({
1280
1280
  }
1281
1281
  }
1282
1282
 
1283
+ if (time !== void 0) {
1284
+ const { hour, minute, second, millisecond, timezoneOffset, timeHash } = time
1285
+ Object.assign(this.viewModel, { hour, minute, second, millisecond, timezoneOffset, timeHash })
1286
+ }
1287
+
1283
1288
  const newHash = year + '/' + pad(month) + '/01'
1284
1289
 
1285
1290
  if (newHash !== this.viewModel.dateHash) {
@@ -372,7 +372,7 @@ export default Vue.extend({
372
372
  staticClass: 'q-dialog__backdrop fixed-full',
373
373
  attrs: backdropAttrs,
374
374
  on: cache(this, 'bkdrop', {
375
- [ this.$q.platform.is.ios === true ? 'click' : 'focusin' ]: this.__onBackdropClick
375
+ [ this.backdropEvt ]: this.__onBackdropClick
376
376
  })
377
377
  })
378
378
  ] : null),
@@ -395,6 +395,7 @@ export default Vue.extend({
395
395
  created () {
396
396
  this.__useTick('__registerTick', '__removeTick')
397
397
  this.__useTimeout('__registerTimeout')
398
+ this.backdropEvt = this.$q.platform.is.ios === true || this.$q.platform.is.safari ? 'click' : 'focusin'
398
399
  },
399
400
 
400
401
  mounted () {
@@ -76,6 +76,7 @@ export default Vue.extend({
76
76
  : h('div', {
77
77
  staticClass: 'q-bottom-sheet__item q-hoverable q-focusable cursor-pointer relative-position',
78
78
  class: action.classes,
79
+ style: action.style,
79
80
  attrs: attrsGridItem,
80
81
  on: {
81
82
  click: () => {
@@ -113,6 +114,7 @@ export default Vue.extend({
113
114
  : h(QItem, {
114
115
  staticClass: 'q-bottom-sheet__item',
115
116
  class: action.classes,
117
+ style: action.style,
116
118
  props: {
117
119
  tabindex: 0,
118
120
  clickable: true,
@@ -38,6 +38,7 @@ export default Vue.extend({
38
38
  imgStyle: Object,
39
39
 
40
40
  nativeContextMenu: Boolean,
41
+ notDraggable: Boolean,
41
42
 
42
43
  noDefaultSpinner: Boolean,
43
44
  spinnerColor: String,
@@ -77,6 +78,14 @@ export default Vue.extend({
77
78
  return att
78
79
  },
79
80
 
81
+ imgAttrs () {
82
+ const att = { src: this.url, 'aria-hidden': 'true' }
83
+ if (this.notDraggable === true) {
84
+ att.draggable = false
85
+ }
86
+ return att
87
+ },
88
+
80
89
  imgContainerStyle () {
81
90
  return Object.assign(
82
91
  {
@@ -228,7 +237,7 @@ export default Vue.extend({
228
237
  ? [
229
238
  h('img', {
230
239
  staticClass: 'absolute-full fit',
231
- attrs: { src: this.url, 'aria-hidden': 'true' }
240
+ attrs: this.imgAttrs
232
241
  })
233
242
  ]
234
243
  : void 0
@@ -18,7 +18,7 @@
18
18
  "(public folder) src=\"img/something.png\"",
19
19
  "(assets folder) src=\"~assets/my-img.gif\"",
20
20
  "(relative path format) :src=\"require('./my_img.jpg')\"",
21
- "(URL) src=\"https://placeimg.com/500/300/nature\""
21
+ "(URL) src=\"https://picsum.photos/500/300\""
22
22
  ],
23
23
  "category": "model"
24
24
  },
@@ -80,7 +80,7 @@
80
80
  "(public folder) src=\"img/some-placeholder.png\"",
81
81
  "(assets folder) src=\"~assets/my-placeholder.gif\"",
82
82
  "(relative path format) :src=\"require('./placeholder.jpg')\"",
83
- "(URL) src=\"https://placeimg.com/500/300/nature\""
83
+ "(URL) src=\"https://picsum.photos/500/300\""
84
84
  ],
85
85
  "category": "model"
86
86
  },
@@ -163,6 +163,13 @@
163
163
  "desc": "Enable the native context menu of the image",
164
164
  "category": "behavior",
165
165
  "addedIn": "v1.8.4"
166
+ },
167
+
168
+ "not-draggable": {
169
+ "type": "Boolean",
170
+ "desc": "Make the native img not-draggable (to allow swipe in QCarousel) - only has meaning when `native-context-menu` is used",
171
+ "category": "behavior",
172
+ "addedIn": "v1.22.6"
166
173
  }
167
174
  },
168
175
 
@@ -44,6 +44,12 @@ export default Vue.extend({
44
44
  }
45
45
  },
46
46
 
47
+ computed: {
48
+ renderLoadingSlot () {
49
+ return this.disable !== true && this.isWorking === true
50
+ }
51
+ },
52
+
47
53
  watch: {
48
54
  disable (val) {
49
55
  if (val === true) { this.stop() }
@@ -62,6 +68,14 @@ export default Vue.extend({
62
68
 
63
69
  debounce (val) {
64
70
  this.__setDebounce(val)
71
+ },
72
+
73
+ isFetching () {
74
+ this.__updateSvgAnimations()
75
+ },
76
+
77
+ renderLoadingSlot () {
78
+ this.__updateSvgAnimations()
65
79
  }
66
80
  },
67
81
 
@@ -183,14 +197,34 @@ export default Vue.extend({
183
197
 
184
198
  this.__scrollTarget.addEventListener('scroll', this.poll, passive)
185
199
  }
200
+ },
201
+
202
+ __updateSvgAnimations (isRetry) {
203
+ if (this.renderLoadingSlot === true) {
204
+ const el = this.$refs.loading
205
+
206
+ if (!el) {
207
+ isRetry !== true && this.$nextTick(() => {
208
+ this.__updateSvgAnimations(true)
209
+ })
210
+ return
211
+ }
212
+
213
+ // we need to pause svg animations (if any) when hiding
214
+ // otherwise the browser will keep on recalculating the style
215
+ const action = `${ this.isFetching === true ? 'un' : '' }pauseAnimations`
216
+ Array.from(el.getElementsByTagName('svg')).forEach(el => {
217
+ el[ action ]()
218
+ })
219
+ }
186
220
  }
187
221
  },
188
222
 
189
223
  mounted () {
190
224
  this.immediatePoll = this.poll
191
225
  this.__setDebounce(this.debounce)
192
-
193
226
  this.updateScrollTarget()
227
+ this.isFetching === false && this.__updateSvgAnimations()
194
228
  },
195
229
 
196
230
  activated () {
@@ -212,9 +246,10 @@ export default Vue.extend({
212
246
  render (h) {
213
247
  const child = uniqueSlot(this, 'default', [])
214
248
 
215
- if (this.disable !== true && this.isWorking === true) {
249
+ if (this.renderLoadingSlot === true) {
216
250
  child[this.reverse === false ? 'push' : 'unshift'](
217
251
  h('div', {
252
+ ref: 'loading',
218
253
  staticClass: 'q-infinite-scroll__loading',
219
254
  class: this.isFetching === true ? '' : 'invisible'
220
255
  }, slot(this, 'loading'))
@@ -1,5 +1,6 @@
1
1
  .q-layout
2
2
  width: 100%
3
+ outline: 0
3
4
 
4
5
  .q-layout-container
5
6
  position: relative
@@ -1,5 +1,6 @@
1
1
  .q-layout
2
2
  width: 100%
3
+ outline: 0
3
4
 
4
5
  .q-layout-container
5
6
  position: relative
@@ -16,7 +16,7 @@ export default Vue.extend({
16
16
 
17
17
  methods: {
18
18
  __begin (el, height, done) {
19
- el.style.overflowY = 'hidden'
19
+ // here overflowY is 'hidden'
20
20
  if (height !== void 0) {
21
21
  el.style.height = `${height}px`
22
22
  }
@@ -61,12 +61,14 @@ export default Vue.extend({
61
61
  let pos = 0
62
62
  this.el = el
63
63
 
64
+ // if animationg overflowY is already 'hidden'
64
65
  if (this.animating === true) {
65
66
  this.__cleanup()
66
67
  pos = el.offsetHeight === el.scrollHeight ? 0 : void 0
67
68
  }
68
69
  else {
69
70
  this.lastEvent = 'hide'
71
+ el.style.overflowY = 'hidden'
70
72
  }
71
73
 
72
74
  this.__begin(el, pos, done)
@@ -92,6 +94,9 @@ export default Vue.extend({
92
94
  }
93
95
  else {
94
96
  this.lastEvent = 'show'
97
+ // we need to set overflowY 'hidden' before calculating the height
98
+ // or else we get small differences
99
+ el.style.overflowY = 'hidden'
95
100
  pos = el.scrollHeight
96
101
  }
97
102
 
@@ -42,7 +42,7 @@
42
42
  "(public folder) src=\"img/my-bg.png\"",
43
43
  "(assets folder) src=\"~assets/my-img.png\"",
44
44
  "(relative path format) :src=\"require('./my_img.jpg')\"",
45
- "(URL) src=\"https://placeimg.com/500/300/nature\""
45
+ "(URL) src=\"https://picsum.photos/500/300\""
46
46
  ],
47
47
  "category": "content"
48
48
  },
@@ -40,8 +40,6 @@
40
40
  visibility: hidden !important
41
41
  transition: none !important
42
42
  animation: none !important
43
- .invisible svg *
44
- display: none
45
43
  .transparent
46
44
  background: transparent !important
47
45
 
@@ -164,4 +162,3 @@ body.desktop
164
162
  .q-focusable:focus, .q-manual-focusable--focused
165
163
  > .q-focus-helper
166
164
  opacity: .22
167
-
@@ -40,8 +40,6 @@
40
40
  visibility: hidden !important
41
41
  transition: none !important
42
42
  animation: none !important
43
- .invisible svg *
44
- display: none
45
43
  .transparent
46
44
  background: transparent !important
47
45
 
@@ -163,4 +161,3 @@ body.desktop
163
161
  .q-focusable:focus, .q-manual-focusable--focused
164
162
  > .q-focus-helper
165
163
  opacity: .22
166
-
@@ -190,7 +190,7 @@ export default {
190
190
 
191
191
  this.computedMask = mask
192
192
  this.computedUnmask = val => {
193
- const unmaskMatch = unmaskMatcher.exec(this.reverseFillMask === true ? val : val.slice(0, mask.length))
193
+ const unmaskMatch = unmaskMatcher.exec(this.reverseFillMask === true ? val : val.slice(0, mask.length + 1))
194
194
  if (unmaskMatch !== null) {
195
195
  val = unmaskMatch.slice(1).join('')
196
196
  }
@@ -10,6 +10,7 @@ let
10
10
  vpPendingUpdate = false,
11
11
  bodyLeft,
12
12
  bodyTop,
13
+ href,
13
14
  closeTimer
14
15
 
15
16
  function onWheel (e) {
@@ -96,6 +97,8 @@ function apply (action) {
96
97
  bodyLeft = body.style.left
97
98
  bodyTop = body.style.top
98
99
 
100
+ href = window.location.href
101
+
99
102
  body.style.left = `-${scrollPositionX}px`
100
103
  body.style.top = `-${scrollPositionY}px`
101
104
  if (overflowY !== 'hidden' && (overflowY === 'scroll' || body.scrollHeight > window.innerHeight)) {
@@ -104,6 +107,7 @@ function apply (action) {
104
107
 
105
108
  body.classList.add('q-body--prevent-scroll')
106
109
  document.qScrollPrevented = true
110
+
107
111
  if (client.is.ios === true) {
108
112
  if (hasViewport === true) {
109
113
  window.scrollTo(0, 0)
@@ -140,7 +144,11 @@ function apply (action) {
140
144
  body.style.left = bodyLeft
141
145
  body.style.top = bodyTop
142
146
 
143
- window.scrollTo(scrollPositionX, scrollPositionY)
147
+ // scroll back only if route has not changed
148
+ if (window.location.href === href) {
149
+ window.scrollTo(scrollPositionX, scrollPositionY)
150
+ }
151
+
144
152
  maxScrollTop = void 0
145
153
  }
146
154
  }
@@ -37,6 +37,13 @@
37
37
  "examples": [ "my-class" ]
38
38
  },
39
39
 
40
+ "style": {
41
+ "type": [ "String", "Array", "Object" ],
42
+ "desc": "Style definitions to be attributed to this action element",
43
+ "examples": [ "border: 2px solid black" ],
44
+ "addedIn": "v1.22.6"
45
+ },
46
+
40
47
  "icon": {
41
48
  "extends": "icon"
42
49
  },
package/src/utils/is.js CHANGED
@@ -36,20 +36,23 @@ export function isDeepEqual (a, b) {
36
36
  return false
37
37
  }
38
38
 
39
- i = a.entries().next()
39
+ let iter = a.entries()
40
+
41
+ i = iter.next()
40
42
  while (i.done !== true) {
41
43
  if (b.has(i.value[0]) !== true) {
42
44
  return false
43
45
  }
44
- i = i.next()
46
+ i = iter.next()
45
47
  }
46
48
 
47
- i = a.entries().next()
49
+ iter = a.entries()
50
+ i = iter.next()
48
51
  while (i.done !== true) {
49
52
  if (isDeepEqual(i.value[1], b.get(i.value[0])) !== true) {
50
53
  return false
51
54
  }
52
- i = i.next()
55
+ i = iter.next()
53
56
  }
54
57
 
55
58
  return true
@@ -60,12 +63,14 @@ export function isDeepEqual (a, b) {
60
63
  return false
61
64
  }
62
65
 
63
- i = a.entries().next()
66
+ const iter = a.entries()
67
+
68
+ i = iter.next()
64
69
  while (i.done !== true) {
65
70
  if (b.has(i.value[0]) !== true) {
66
71
  return false
67
72
  }
68
- i = i.next()
73
+ i = iter.next()
69
74
  }
70
75
 
71
76
  return true