quasar 2.11.4 → 2.11.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 (170) hide show
  1. package/dist/api/QCarouselSlide.json +1 -1
  2. package/dist/api/QChatMessage.json +1 -1
  3. package/dist/api/QForm.json +3 -2
  4. package/dist/api/QImg.json +2 -2
  5. package/dist/api/QTimelineEntry.json +1 -1
  6. package/dist/api/QVirtualScroll.json +2 -2
  7. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  8. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  10. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  11. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  12. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  13. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  14. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  16. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  17. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  18. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  19. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  20. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  21. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  24. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  25. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  26. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +2 -2
  31. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  40. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  41. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  42. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  43. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  44. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  45. package/dist/icon-set/themify.umd.prod.js +1 -1
  46. package/dist/lang/ar-TN.umd.prod.js +1 -1
  47. package/dist/lang/ar.umd.prod.js +1 -1
  48. package/dist/lang/az-Latn.umd.prod.js +1 -1
  49. package/dist/lang/bg.umd.prod.js +1 -1
  50. package/dist/lang/bn.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.umd.prod.js +1 -1
  55. package/dist/lang/el.umd.prod.js +1 -1
  56. package/dist/lang/en-GB.umd.prod.js +1 -1
  57. package/dist/lang/en-US.umd.prod.js +1 -1
  58. package/dist/lang/eo.umd.prod.js +1 -1
  59. package/dist/lang/es.umd.prod.js +1 -1
  60. package/dist/lang/et.umd.prod.js +1 -1
  61. package/dist/lang/eu.umd.prod.js +1 -1
  62. package/dist/lang/fa-IR.umd.prod.js +1 -1
  63. package/dist/lang/fa.umd.prod.js +1 -1
  64. package/dist/lang/fi.umd.prod.js +1 -1
  65. package/dist/lang/fr.umd.prod.js +1 -1
  66. package/dist/lang/gn.umd.prod.js +1 -1
  67. package/dist/lang/he.umd.prod.js +1 -1
  68. package/dist/lang/hr.umd.prod.js +1 -1
  69. package/dist/lang/hu.umd.prod.js +1 -1
  70. package/dist/lang/id.umd.prod.js +1 -1
  71. package/dist/lang/is.umd.prod.js +1 -1
  72. package/dist/lang/it.umd.prod.js +1 -1
  73. package/dist/lang/ja.umd.prod.js +1 -1
  74. package/dist/lang/kk.umd.prod.js +1 -1
  75. package/dist/lang/km.umd.prod.js +1 -1
  76. package/dist/lang/ko-KR.umd.prod.js +1 -1
  77. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  78. package/dist/lang/lt.umd.prod.js +1 -1
  79. package/dist/lang/lu.umd.prod.js +1 -1
  80. package/dist/lang/lv.umd.prod.js +1 -1
  81. package/dist/lang/ml.umd.prod.js +1 -1
  82. package/dist/lang/mm.umd.prod.js +1 -1
  83. package/dist/lang/ms.umd.prod.js +1 -1
  84. package/dist/lang/my.umd.prod.js +1 -1
  85. package/dist/lang/nb-NO.umd.prod.js +1 -1
  86. package/dist/lang/nl.umd.prod.js +1 -1
  87. package/dist/lang/pl.umd.prod.js +1 -1
  88. package/dist/lang/pt-BR.umd.prod.js +1 -1
  89. package/dist/lang/pt.umd.prod.js +1 -1
  90. package/dist/lang/ro.umd.prod.js +1 -1
  91. package/dist/lang/ru.umd.prod.js +1 -1
  92. package/dist/lang/sk.umd.prod.js +1 -1
  93. package/dist/lang/sl.umd.prod.js +2 -2
  94. package/dist/lang/sm.umd.prod.js +1 -1
  95. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  96. package/dist/lang/sr.umd.prod.js +1 -1
  97. package/dist/lang/sv.umd.prod.js +1 -1
  98. package/dist/lang/ta.umd.prod.js +1 -1
  99. package/dist/lang/th.umd.prod.js +1 -1
  100. package/dist/lang/tr.umd.prod.js +1 -1
  101. package/dist/lang/ug.umd.prod.js +1 -1
  102. package/dist/lang/uk.umd.prod.js +1 -1
  103. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  104. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  105. package/dist/lang/vi.umd.prod.js +1 -1
  106. package/dist/lang/zh-CN.umd.prod.js +1 -1
  107. package/dist/lang/zh-TW.umd.prod.js +1 -1
  108. package/dist/quasar.cjs.prod.js +2 -2
  109. package/dist/quasar.css +1 -4
  110. package/dist/quasar.esm.js +83 -32
  111. package/dist/quasar.esm.prod.js +2 -2
  112. package/dist/quasar.prod.css +1 -1
  113. package/dist/quasar.rtl.css +1 -4
  114. package/dist/quasar.rtl.prod.css +1 -1
  115. package/dist/quasar.sass +4 -5
  116. package/dist/quasar.umd.js +83 -32
  117. package/dist/quasar.umd.prod.js +2 -2
  118. package/dist/types/api/dialog.d.ts +13 -11
  119. package/dist/types/api/qform.d.ts +5 -0
  120. package/dist/types/api/qinput.d.ts +0 -2
  121. package/dist/types/api/qloading.d.ts +1 -3
  122. package/dist/types/api/qnotify.d.ts +7 -5
  123. package/dist/types/api/qtable.d.ts +0 -2
  124. package/dist/types/api/slider.d.ts +6 -4
  125. package/dist/types/api/vue-prop-types.d.ts +9 -0
  126. package/dist/types/api/web-storage.d.ts +1 -2
  127. package/dist/types/api.d.ts +1 -0
  128. package/dist/types/composables.d.ts +2 -4
  129. package/dist/types/extras/icon-set.d.ts +42 -29
  130. package/dist/types/index.d.ts +6 -5
  131. package/dist/types/shim-icon-set.d.ts +0 -2
  132. package/dist/types/shim-lang.d.ts +0 -2
  133. package/dist/types/ts-helpers.d.ts +33 -10
  134. package/dist/types/tsconfig.json +15 -2
  135. package/dist/types/utils/colors.d.ts +4 -1
  136. package/dist/types/utils/date.d.ts +58 -12
  137. package/dist/types/utils/dom.d.ts +4 -1
  138. package/dist/types/utils/format.d.ts +6 -6
  139. package/dist/types/utils/scroll.d.ts +29 -6
  140. package/dist/types/utils.d.ts +26 -24
  141. package/dist/web-types/web-types.json +6 -6
  142. package/lang/sl.js +1 -1
  143. package/lang/sl.mjs +1 -1
  144. package/package.json +11 -9
  145. package/src/components/carousel/QCarouselSlide.json +1 -1
  146. package/src/components/chat/QChatMessage.json +1 -1
  147. package/src/components/date/use-datetime.js +1 -1
  148. package/src/components/dialog/QDialog.js +2 -4
  149. package/src/components/form/QForm.json +3 -2
  150. package/src/components/img/QImg.json +2 -2
  151. package/src/components/infinite-scroll/QInfiniteScroll.js +26 -4
  152. package/src/components/input/use-mask.js +1 -1
  153. package/src/components/layout/QLayout.sass +1 -0
  154. package/src/components/rating/QRating.js +3 -3
  155. package/src/components/slide-transition/QSlideTransition.js +6 -1
  156. package/src/components/timeline/QTimelineEntry.json +1 -1
  157. package/src/components/uploader/xhr-uploader-plugin.js +2 -2
  158. package/src/components/virtual-scroll/QVirtualScroll.json +2 -2
  159. package/src/components/virtual-scroll/use-virtual-scroll.js +5 -1
  160. package/src/composables/private/use-timeout.js +1 -1
  161. package/src/css/core/visibility.sass +0 -2
  162. package/src/css/variables.sass +2 -2
  163. package/src/plugins/Loading.js +11 -6
  164. package/src/plugins/Platform.js +1 -1
  165. package/src/utils/copy-to-clipboard.js +8 -0
  166. package/src/utils/is.js +11 -6
  167. package/src/utils/prevent-scroll.js +9 -1
  168. package/src/utils/private/define-reactive-plugin.js +1 -1
  169. package/dist/types/api/vue-prop-types.ts +0 -15
  170. package/dist/types/typings.json +0 -4
@@ -1,5 +1,3 @@
1
- // Error on "quasar" import shown in IDE is normal, as we only have Components/Directives/Plugins types after the build step
2
- // The import will work correctly at runtime
3
1
  import { QUploader } from "quasar";
4
2
  import {
5
3
  ComponentOptionsMixin,
@@ -10,17 +8,17 @@ import {
10
8
  ExtractPropTypes,
11
9
  Ref,
12
10
  SetupContext,
13
- } from 'vue';
14
- import { MetaOptions } from './meta';
15
-
16
- export * from './utils/colors';
17
- export * from './utils/date';
18
- export * from './utils/dom';
19
- export * from './utils/event';
20
- export * from './utils/format';
21
- export * from './utils/scroll';
22
- export * from './utils/is';
23
- export * from './utils/run-sequential-promises';
11
+ } from "vue";
12
+ import { MetaOptions } from "./meta";
13
+
14
+ export * from "./utils/colors";
15
+ export * from "./utils/date";
16
+ export * from "./utils/dom";
17
+ export * from "./utils/event";
18
+ export * from "./utils/format";
19
+ export * from "./utils/scroll";
20
+ export * from "./utils/is";
21
+ export * from "./utils/run-sequential-promises";
24
22
 
25
23
  import { VueStyleObjectProp } from "./api/vue-prop-types";
26
24
 
@@ -37,11 +35,15 @@ export function debounce<F extends (...args: any[]) => any>(
37
35
  fn: F,
38
36
  wait?: number,
39
37
  immediate?: boolean
40
- ): F & { cancel(): void };
38
+ ): ((this: ThisParameterType<F>, ...args: Parameters<F>) => void) & {
39
+ cancel(): void;
40
+ };
41
41
 
42
42
  export function frameDebounce<F extends (...args: any[]) => any>(
43
- fn: F,
44
- ): F & { cancel(): void };
43
+ fn: F
44
+ ): ((this: ThisParameterType<F>, ...args: Parameters<F>) => void) & {
45
+ cancel(): void;
46
+ };
45
47
 
46
48
  export function exportFile(
47
49
  fileName: string,
@@ -69,7 +71,7 @@ interface MorphOptions {
69
71
  from: Element | string | (() => Element | null | undefined);
70
72
  to?: Element | string | (() => Element | null | undefined);
71
73
  onToggle?: () => void;
72
- waitFor?: number | 'transitionend' | Promise<any>;
74
+ waitFor?: number | "transitionend" | Promise<any>;
73
75
 
74
76
  duration?: number;
75
77
  easing?: string;
@@ -88,7 +90,7 @@ interface MorphOptions {
88
90
  tweenFromOpacity?: number;
89
91
  tweenToOpacity?: number;
90
92
 
91
- onEnd?: (direction: 'to' | 'from', aborted: boolean) => void;
93
+ onEnd?: (direction: "to" | "from", aborted: boolean) => void;
92
94
  }
93
95
 
94
96
  export function morph(options: MorphOptions): (abort?: boolean) => boolean;
@@ -102,10 +104,10 @@ export function setCssVar(
102
104
  ): void;
103
105
 
104
106
  export class EventBus {
105
- on (event: string, callback: Function, ctx?: any): this;
106
- once (event: string, callback: Function, ctx?: any): this;
107
- emit (event: string, ...args: any[]): this;
108
- off (event: string, callback?: Function): this;
107
+ on(event: string, callback: Function, ctx?: any): this;
108
+ once(event: string, callback: Function, ctx?: any): this;
109
+ emit(event: string, ...args: any[]): this;
110
+ off(event: string, callback?: Function): this;
109
111
  }
110
112
 
111
113
  interface CreateMetaMixinContext extends ComponentPublicInstance {
@@ -126,7 +128,7 @@ interface InjectPluginFnHelpers {
126
128
  uploadedSize: Ref<number>;
127
129
  updateFileStatus: (
128
130
  file: File,
129
- status: 'failed' | 'idle' | 'uploaded' | 'uploading',
131
+ status: "failed" | "idle" | "uploaded" | "uploading",
130
132
  uploadedSize?: number
131
133
  ) => void;
132
134
  isAlive: () => boolean;
@@ -134,7 +136,7 @@ interface InjectPluginFnHelpers {
134
136
 
135
137
  interface InjectPluginFnOptions<Props> {
136
138
  props: ExtractPropTypes<Props>;
137
- emit: SetupContext['emit'];
139
+ emit: SetupContext["emit"];
138
140
  helpers: InjectPluginFnHelpers;
139
141
  }
140
142
 
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.11.4",
5
+ "version": "2.11.6",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -2528,7 +2528,7 @@
2528
2528
  "kind": "expression",
2529
2529
  "type": "string"
2530
2530
  },
2531
- "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\"",
2531
+ "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\"",
2532
2532
  "doc-url": "https://v2.quasar.dev/vue-components/carousel"
2533
2533
  }
2534
2534
  ],
@@ -2601,7 +2601,7 @@
2601
2601
  "kind": "expression",
2602
2602
  "type": "string"
2603
2603
  },
2604
- "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\"",
2604
+ "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\"",
2605
2605
  "doc-url": "https://v2.quasar.dev/vue-components/chat"
2606
2606
  },
2607
2607
  {
@@ -7291,7 +7291,7 @@
7291
7291
  "kind": "expression",
7292
7292
  "type": "string"
7293
7293
  },
7294
- "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\"",
7294
+ "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\"",
7295
7295
  "doc-url": "https://v2.quasar.dev/vue-components/img"
7296
7296
  },
7297
7297
  {
@@ -7318,7 +7318,7 @@
7318
7318
  "kind": "expression",
7319
7319
  "type": "string"
7320
7320
  },
7321
- "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\"",
7321
+ "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\"",
7322
7322
  "doc-url": "https://v2.quasar.dev/vue-components/img"
7323
7323
  },
7324
7324
  {
@@ -17505,7 +17505,7 @@
17505
17505
  "kind": "expression",
17506
17506
  "type": "string"
17507
17507
  },
17508
- "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\"",
17508
+ "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\"",
17509
17509
  "doc-url": "https://v2.quasar.dev/vue-components/timeline"
17510
17510
  },
17511
17511
  {
package/lang/sl.js CHANGED
@@ -8,7 +8,7 @@ module.exports = {
8
8
  nativeName: 'Slovenski Jezik',
9
9
  label: {
10
10
  clear: 'Počisti',
11
- ok: 'Vredu',
11
+ ok: 'V redu',
12
12
  cancel: 'Prekliči',
13
13
  close: 'Zapri',
14
14
  set: 'Postavi',
package/lang/sl.mjs 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": "2.11.4",
3
+ "version": "2.11.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",
@@ -29,6 +29,7 @@
29
29
  "build": "node build/script.build.js",
30
30
  "lint": "eslint --ext .js,.vue src dev",
31
31
  "lint-fix": "eslint --ext .js,.vue src dev --fix",
32
+ "format:types": "prettier --write \"types/**/*.{d.ts,ts,json}\"",
32
33
  "test:build": "node build/script.build.js js api && node build/script.build.js js transforms",
33
34
  "test:component": "yarn test:build && cd ./dev && cypress open-ct && cd ..",
34
35
  "test:component:run": "yarn test:build && cd ./dev && cypress run-ct && cd ..",
@@ -67,8 +68,8 @@
67
68
  },
68
69
  "homepage": "https://quasar.dev",
69
70
  "devDependencies": {
70
- "@quasar/app-vite": "^1.1.3",
71
- "@quasar/extras": "^1.15.9",
71
+ "@quasar/app-vite": "^1.2.0",
72
+ "@quasar/extras": "^1.15.11",
72
73
  "@quasar/quasar-app-extension-testing-e2e-cypress": "^4.1.2",
73
74
  "@rollup/plugin-node-resolve": "^11.2.1",
74
75
  "@rollup/plugin-replace": "^2.3.3",
@@ -81,22 +82,23 @@
81
82
  "eslint-config-standard": "^17.0.0",
82
83
  "eslint-friendly-formatter": "^4.0.1",
83
84
  "eslint-plugin-cypress": "^2.12.1",
84
- "eslint-plugin-import": "^2.19.1",
85
- "eslint-plugin-n": "^15.0.0",
85
+ "eslint-plugin-import": "^2.27.5",
86
+ "eslint-plugin-n": "^15.6.1",
86
87
  "eslint-plugin-no-only-tests": "^2.6.0",
87
88
  "eslint-plugin-node": "^11.1.0",
88
- "eslint-plugin-promise": "^6.0.0",
89
+ "eslint-plugin-promise": "^6.1.1",
89
90
  "eslint-plugin-vue": "^8.0.0",
90
91
  "fast-glob": "^3.2.7",
91
92
  "module-alias": "^2.2.2",
92
- "postcss-rtlcss": "^3.5.3",
93
- "prettier": "^2.4.1",
93
+ "postcss-rtlcss": "^4.0.2",
94
+ "prettier": "^2.8.3",
94
95
  "recast": "^0.18.5",
95
96
  "rimraf": "^3.0.1",
96
97
  "rollup": "^2.34.0",
97
98
  "table": "^6.8.1",
99
+ "typescript": "^4.9.5",
98
100
  "uglify-es": "^3.3.9",
99
- "vue": "^3.2.45",
101
+ "vue": "^3.2.47",
100
102
  "vue-router": "^4.1.6",
101
103
  "yargs": "^17.6.2"
102
104
  },
@@ -22,7 +22,7 @@
22
22
  "(public folder) src=\"img/my-bg.png\"",
23
23
  "(assets folder) src=\"~assets/my-img.png\"",
24
24
  "(relative path format) :src=\"require('./my_img.jpg')\"",
25
- "(URL) src=\"https://placeimg.com/500/300/nature\""
25
+ "(URL) src=\"https://picsum.photos/500/300\""
26
26
  ],
27
27
  "category": "model"
28
28
  }
@@ -44,7 +44,7 @@
44
44
  "(public folder) src=\"boy-avatar.png\"",
45
45
  "(assets folder) src=\"~assets/boy-avatar.png\"",
46
46
  "(relative path format) :src=\"require('./my_img.jpg')\"",
47
- "(URL) src=\"https://placeimg.com/500/300/nature\""
47
+ "(URL) src=\"https://picsum.photos/500/300\""
48
48
  ],
49
49
  "category": "content"
50
50
  },
@@ -46,7 +46,7 @@ export default function (props, $q) {
46
46
  })
47
47
 
48
48
  const tabindex = computed(() => {
49
- return props.editable === true ? 0 : -1
49
+ return editable.value === true ? 0 : -1
50
50
  })
51
51
 
52
52
  const headerClass = computed(() => {
@@ -343,7 +343,7 @@ export default createComponent({
343
343
  hide(e)
344
344
  }
345
345
  else if (props.noShake !== true) {
346
- shake(e.relatedTarget)
346
+ shake()
347
347
  }
348
348
  }
349
349
 
@@ -370,8 +370,6 @@ export default createComponent({
370
370
 
371
371
  onBeforeUnmount(cleanup)
372
372
 
373
- const backdropEvt = vm.proxy.$q.platform.is.ios === true ? 'onClick' : 'onFocusin'
374
-
375
373
  function renderPortalContent () {
376
374
  return h('div', {
377
375
  role: 'dialog',
@@ -389,7 +387,7 @@ export default createComponent({
389
387
  style: transitionStyle.value,
390
388
  'aria-hidden': 'true',
391
389
  tabindex: -1,
392
- [ backdropEvt ]: onBackdropClick
390
+ onClick: onBackdropClick
393
391
  })
394
392
  : null
395
393
  )),
@@ -110,10 +110,11 @@
110
110
  },
111
111
 
112
112
  "getValidationComponents": {
113
- "desc": "Get array of children vue components that support validation",
113
+ "desc": "Get an array of children Vue component instances that support Quasar validation API (derived from QField, or using useFormChild()/QFormChildMixin)",
114
114
  "returns": {
115
115
  "type": "Array",
116
- "desc": "Vue components that support Quasar validation API"
116
+ "tsType": "QFormChildComponent",
117
+ "desc": "Quasar validation API-compatible Vue component instances"
117
118
  }
118
119
  }
119
120
  }
@@ -14,7 +14,7 @@
14
14
  "(public folder) src=\"img/something.png\"",
15
15
  "(assets folder) src=\"~assets/my-img.gif\"",
16
16
  "(relative path format) :src=\"require('./my_img.jpg')\"",
17
- "(URL) src=\"https://placeimg.com/500/300/nature\""
17
+ "(URL) src=\"https://picsum.photos/500/300\""
18
18
  ],
19
19
  "category": "model"
20
20
  },
@@ -47,7 +47,7 @@
47
47
  "(public folder) src=\"img/some-placeholder.png\"",
48
48
  "(assets folder) src=\"~assets/my-placeholder.gif\"",
49
49
  "(relative path format) :src=\"require('./placeholder.jpg')\"",
50
- "(URL) src=\"https://placeimg.com/500/300/nature\""
50
+ "(URL) src=\"https://picsum.photos/500/300\""
51
51
  ],
52
52
  "category": "model"
53
53
  },
@@ -39,6 +39,7 @@ export default createComponent({
39
39
  const isFetching = ref(false)
40
40
  const isWorking = ref(true)
41
41
  const rootRef = ref(null)
42
+ const loadingRef = ref(null)
42
43
 
43
44
  let index = props.initialIndex || 0
44
45
  let localScrollTarget, poll
@@ -170,12 +171,32 @@ export default createComponent({
170
171
  }
171
172
  }
172
173
 
174
+ function updateSvgAnimations (isRetry) {
175
+ if (renderLoadingSlot.value === true) {
176
+ if (loadingRef.value === null) {
177
+ isRetry !== true && nextTick(() => { updateSvgAnimations(true) })
178
+ return
179
+ }
180
+
181
+ // we need to pause svg animations (if any) when hiding
182
+ // otherwise the browser will keep on recalculating the style
183
+ const action = `${ isFetching.value === true ? 'un' : '' }pauseAnimations`
184
+ Array.from(loadingRef.value.getElementsByTagName('svg')).forEach(el => {
185
+ el[ action ]()
186
+ })
187
+ }
188
+ }
189
+
190
+ const renderLoadingSlot = computed(() => props.disable !== true && isWorking.value === true)
191
+
192
+ watch([ isFetching, renderLoadingSlot ], () => { updateSvgAnimations() })
193
+
173
194
  watch(() => props.disable, val => {
174
195
  if (val === true) { stop() }
175
196
  else { resume() }
176
197
  })
177
198
 
178
- watch(() => props.reverse, val => {
199
+ watch(() => props.reverse, () => {
179
200
  if (isFetching.value === false && isWorking.value === true) {
180
201
  immediatePoll()
181
202
  }
@@ -206,8 +227,9 @@ export default createComponent({
206
227
 
207
228
  onMounted(() => {
208
229
  setDebounce(props.debounce)
209
-
210
230
  updateScrollTarget()
231
+
232
+ isFetching.value === false && updateSvgAnimations()
211
233
  })
212
234
 
213
235
  // expose public methods
@@ -220,9 +242,9 @@ export default createComponent({
220
242
  return () => {
221
243
  const child = hUniqueSlot(slots.default, [])
222
244
 
223
- if (props.disable !== true && isWorking.value === true) {
245
+ if (renderLoadingSlot.value === true) {
224
246
  child[ props.reverse === false ? 'push' : 'unshift' ](
225
- h('div', { class: classes.value }, hSlot(slots.loading))
247
+ h('div', { ref: loadingRef, class: classes.value }, hSlot(slots.loading))
226
248
  )
227
249
  }
228
250
 
@@ -186,7 +186,7 @@ export default function (props, emit, emitValue, inputRef) {
186
186
 
187
187
  computedMask = mask
188
188
  computedUnmask = val => {
189
- const unmaskMatch = unmaskMatcher.exec(props.reverseFillMask === true ? val : val.slice(0, mask.length))
189
+ const unmaskMatch = unmaskMatcher.exec(props.reverseFillMask === true ? val : val.slice(0, mask.length + 1))
190
190
  if (unmaskMatch !== null) {
191
191
  val = unmaskMatch.slice(1).join('')
192
192
  }
@@ -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
@@ -216,13 +216,13 @@ export default createComponent({
216
216
  case 37: // LEFT ARROW
217
217
  case 40: // DOWN ARROW
218
218
  if (iconRefs[ `rt${ i - 1 }` ]) {
219
- iconRefs[ `rt${ i - 1 }` ].$el.focus()
219
+ iconRefs[ `rt${ i - 1 }` ].focus()
220
220
  }
221
221
  return stopAndPrevent(e)
222
222
  case 39: // RIGHT ARROW
223
223
  case 38: // UP ARROW
224
224
  if (iconRefs[ `rt${ i + 1 }` ]) {
225
- iconRefs[ `rt${ i + 1 }` ].$el.focus()
225
+ iconRefs[ `rt${ i + 1 }` ].focus()
226
226
  }
227
227
  return stopAndPrevent(e)
228
228
  }
@@ -245,7 +245,7 @@ export default createComponent({
245
245
  child.push(
246
246
  h('div', {
247
247
  key: i,
248
- ref: vm => { iconRefs[ `rt${ i }` ] = vm },
248
+ ref: el => { iconRefs[ `rt${ i }` ] = el },
249
249
  class: 'q-rating__icon-container flex flex-center',
250
250
  ...attrs,
251
251
  onClick () { set(i) },
@@ -39,7 +39,7 @@ export default createComponent({
39
39
  }
40
40
 
41
41
  function begin (el, height, done) {
42
- el.style.overflowY = 'hidden'
42
+ // here overflowY is 'hidden'
43
43
  if (height !== void 0) {
44
44
  el.style.height = `${ height }px`
45
45
  }
@@ -61,12 +61,14 @@ export default createComponent({
61
61
  let pos = 0
62
62
  element = el
63
63
 
64
+ // if animationg overflowY is already 'hidden'
64
65
  if (animating === true) {
65
66
  cleanup()
66
67
  pos = el.offsetHeight === el.scrollHeight ? 0 : void 0
67
68
  }
68
69
  else {
69
70
  lastEvent = 'hide'
71
+ el.style.overflowY = 'hidden'
70
72
  }
71
73
 
72
74
  begin(el, pos, done)
@@ -95,6 +97,9 @@ export default createComponent({
95
97
  }
96
98
  else {
97
99
  lastEvent = 'show'
100
+ // we need to set overflowY 'hidden' before calculating the height
101
+ // or else we get small differences
102
+ el.style.overflowY = 'hidden'
98
103
  pos = el.scrollHeight
99
104
  }
100
105
 
@@ -37,7 +37,7 @@
37
37
  "(public folder) src=\"img/my-bg.png\"",
38
38
  "(assets folder) src=\"~assets/my-img.png\"",
39
39
  "(relative path format) :src=\"require('./my_img.jpg')\"",
40
- "(URL) src=\"https://placeimg.com/500/300/nature\""
40
+ "(URL) src=\"https://picsum.photos/500/300\""
41
41
  ],
42
42
  "category": "content"
43
43
  },
@@ -27,7 +27,7 @@ const props = {
27
27
  factory: Function
28
28
  }
29
29
 
30
- const emits = [ 'factory-failed', 'uploaded', 'failed', 'uploading' ]
30
+ const emits = [ 'factoryFailed', 'uploaded', 'failed', 'uploading' ]
31
31
 
32
32
  function injectPlugin ({ props, emit, helpers }) {
33
33
  const xhrs = ref([])
@@ -84,7 +84,7 @@ function injectPlugin ({ props, emit, helpers }) {
84
84
 
85
85
  if (!res) {
86
86
  emit(
87
- 'factory-failed',
87
+ 'factoryFailed',
88
88
  new Error('QUploader: factory() does not return properly'),
89
89
  files
90
90
  )
@@ -93,11 +93,11 @@
93
93
  "scope": {
94
94
  "index": {
95
95
  "type": "Number",
96
- "desc": "Item index in the options list"
96
+ "desc": "Item index in the items list"
97
97
  },
98
98
  "item": {
99
99
  "type": "Any",
100
- "desc": "Item data -- its value is taken from 'options' prop"
100
+ "desc": "Item data -- its value is taken from 'items' prop"
101
101
  }
102
102
  }
103
103
  }
@@ -24,12 +24,16 @@ const setOverflowAnchor = __QUASAR_SSR__ || window.getComputedStyle(document.bod
24
24
  return
25
25
  }
26
26
 
27
- cancelAnimationFrame(contentEl._qOverflowAnimationFrame)
27
+ if (contentEl._qOverflowAnimationFrame !== void 0) {
28
+ cancelAnimationFrame(contentEl._qOverflowAnimationFrame)
29
+ }
30
+
28
31
  contentEl._qOverflowAnimationFrame = requestAnimationFrame(() => {
29
32
  if (contentEl === null) {
30
33
  return
31
34
  }
32
35
 
36
+ contentEl._qOverflowAnimationFrame = void 0
33
37
  const children = contentEl.children || []
34
38
 
35
39
  filterProto
@@ -1,6 +1,6 @@
1
1
  import { onDeactivated, onBeforeUnmount, getCurrentInstance } from 'vue'
2
2
 
3
- import { vmIsDestroyed } from '../../utils/private/vm'
3
+ import { vmIsDestroyed } from '../../utils/private/vm.js'
4
4
 
5
5
  /*
6
6
  * Usage:
@@ -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
 
@@ -584,8 +584,8 @@ $toolbar-title-letter-spacing : .01em !default
584
584
  $toolbar-title-padding : 0 12px !default
585
585
 
586
586
  $layout-border : 1px solid $separator-color !default
587
- $layout-shadow : 0 0 10px 2px rgba(0,0,0,0.2), 0 0px 10px rgba(0,0,0,0.24) !default
588
- $layout-shadow-dark : 0 0 10px 2px rgba(255,255,255,.2), 0 0px 10px rgba(255,255,255,.24) !default
587
+ $layout-shadow : 0 0 10px 2px rgba($shadow-color,0.2), 0 0px 10px rgba($shadow-color,0.24) !default
588
+ $layout-shadow-dark : 0 0 10px 2px rgba($dark-shadow-color,.2), 0 0px 10px rgba($dark-shadow-color,.24) !default
589
589
 
590
590
  $menu-background : #fff !default
591
591
  $menu-box-shadow : $shadow-2 !default
@@ -1,7 +1,8 @@
1
- import { h, createApp, Transition, onMounted } from 'vue'
1
+ import { h, Transition, onMounted } from 'vue'
2
2
 
3
3
  import QSpinner from '../components/spinner/QSpinner.js'
4
4
 
5
+ import { createChildApp } from '../install-quasar.js'
5
6
  import defineReactivePlugin from '../utils/private/define-reactive-plugin.js'
6
7
  import { createGlobalNode, removeGlobalNode } from '../utils/private/global-nodes.js'
7
8
  import preventScroll from '../utils/prevent-scroll.js'
@@ -68,7 +69,7 @@ const Plugin = defineReactivePlugin({
68
69
 
69
70
  const el = createGlobalNode('q-loading')
70
71
 
71
- app = createApp({
72
+ app = createChildApp({
72
73
  name: 'QLoading',
73
74
 
74
75
  setup () {
@@ -130,7 +131,7 @@ const Plugin = defineReactivePlugin({
130
131
  onAfterLeave
131
132
  }, getContent)
132
133
  }
133
- })
134
+ }, Plugin.__parentApp)
134
135
 
135
136
  vm = app.mount(el)
136
137
  }, props.delay)
@@ -189,11 +190,15 @@ const Plugin = defineReactivePlugin({
189
190
  }
190
191
  },
191
192
 
192
- install ({ $q }) {
193
+ install ({ $q, parentApp }) {
193
194
  $q.loading = this
194
195
 
195
- if (__QUASAR_SSR_SERVER__ !== true && $q.config.loading !== void 0) {
196
- this.setDefaults($q.config.loading)
196
+ if (__QUASAR_SSR_SERVER__ !== true) {
197
+ Plugin.__parentApp = parentApp
198
+
199
+ if ($q.config.loading !== void 0) {
200
+ this.setDefaults($q.config.loading)
201
+ }
197
202
  }
198
203
  }
199
204
  })
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-useless-escape */
2
2
 
3
3
  import { ref, reactive } from 'vue'
4
- import { injectProp } from '../utils/private/inject-obj-prop'
4
+ import { injectProp } from '../utils/private/inject-obj-prop.js'
5
5
 
6
6
  /**
7
7
  * __ QUASAR_SSR __ -> runs on SSR on client or server
@@ -1,9 +1,15 @@
1
+
2
+ import { addFocusout, removeFocusout } from './private/focusout.js'
3
+
1
4
  function fallback (text) {
2
5
  const area = document.createElement('textarea')
3
6
  area.value = text
4
7
  area.contentEditable = 'true'
5
8
  area.style.position = 'fixed' // avoid scrolling to bottom
6
9
 
10
+ const fn = () => {}
11
+ addFocusout(fn)
12
+
7
13
  document.body.appendChild(area)
8
14
  area.focus()
9
15
  area.select()
@@ -11,6 +17,8 @@ function fallback (text) {
11
17
  const res = document.execCommand('copy')
12
18
 
13
19
  area.remove()
20
+ removeFocusout(fn)
21
+
14
22
  return res
15
23
  }
16
24