quasar 2.11.7 → 2.11.9

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 (163) hide show
  1. package/dist/api/QCarousel.json +9 -0
  2. package/dist/api/QEditor.json +57 -0
  3. package/dist/api/QTable.json +9 -0
  4. package/dist/icon-set/bootstrap-icons.umd.prod.js +1 -1
  5. package/dist/icon-set/eva-icons.umd.prod.js +1 -1
  6. package/dist/icon-set/fontawesome-v5-pro.umd.prod.js +1 -1
  7. package/dist/icon-set/fontawesome-v5.umd.prod.js +1 -1
  8. package/dist/icon-set/fontawesome-v6-pro.umd.prod.js +1 -1
  9. package/dist/icon-set/fontawesome-v6.umd.prod.js +1 -1
  10. package/dist/icon-set/ionicons-v4.umd.prod.js +1 -1
  11. package/dist/icon-set/line-awesome.umd.prod.js +1 -1
  12. package/dist/icon-set/material-icons-outlined.umd.prod.js +1 -1
  13. package/dist/icon-set/material-icons-round.umd.prod.js +1 -1
  14. package/dist/icon-set/material-icons-sharp.umd.prod.js +1 -1
  15. package/dist/icon-set/material-icons.umd.prod.js +1 -1
  16. package/dist/icon-set/material-symbols-outlined.umd.prod.js +1 -1
  17. package/dist/icon-set/material-symbols-rounded.umd.prod.js +1 -1
  18. package/dist/icon-set/material-symbols-sharp.umd.prod.js +1 -1
  19. package/dist/icon-set/mdi-v3.umd.prod.js +1 -1
  20. package/dist/icon-set/mdi-v4.umd.prod.js +1 -1
  21. package/dist/icon-set/mdi-v5.umd.prod.js +1 -1
  22. package/dist/icon-set/mdi-v6.umd.prod.js +1 -1
  23. package/dist/icon-set/mdi-v7.umd.prod.js +1 -1
  24. package/dist/icon-set/svg-bootstrap-icons.umd.prod.js +1 -1
  25. package/dist/icon-set/svg-eva-icons.umd.prod.js +1 -1
  26. package/dist/icon-set/svg-fontawesome-v5.umd.prod.js +1 -1
  27. package/dist/icon-set/svg-fontawesome-v6.umd.prod.js +1 -1
  28. package/dist/icon-set/svg-ionicons-v4.umd.prod.js +1 -1
  29. package/dist/icon-set/svg-ionicons-v5.umd.prod.js +1 -1
  30. package/dist/icon-set/svg-ionicons-v6.umd.prod.js +1 -1
  31. package/dist/icon-set/svg-line-awesome.umd.prod.js +1 -1
  32. package/dist/icon-set/svg-material-icons-outlined.umd.prod.js +1 -1
  33. package/dist/icon-set/svg-material-icons-round.umd.prod.js +1 -1
  34. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +1 -1
  35. package/dist/icon-set/svg-material-icons.umd.prod.js +1 -1
  36. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +1 -1
  37. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +1 -1
  38. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +1 -1
  39. package/dist/icon-set/svg-mdi-v6.umd.prod.js +1 -1
  40. package/dist/icon-set/svg-mdi-v7.umd.prod.js +1 -1
  41. package/dist/icon-set/svg-themify.umd.prod.js +1 -1
  42. package/dist/icon-set/themify.umd.prod.js +1 -1
  43. package/dist/lang/ar-TN.umd.prod.js +1 -1
  44. package/dist/lang/ar.umd.prod.js +1 -1
  45. package/dist/lang/az-Latn.umd.prod.js +1 -1
  46. package/dist/lang/bg.umd.prod.js +1 -1
  47. package/dist/lang/bn.umd.prod.js +1 -1
  48. package/dist/lang/ca.umd.prod.js +1 -1
  49. package/dist/lang/cs.umd.prod.js +1 -1
  50. package/dist/lang/da.umd.prod.js +1 -1
  51. package/dist/lang/de.umd.prod.js +1 -1
  52. package/dist/lang/el.umd.prod.js +1 -1
  53. package/dist/lang/en-GB.umd.prod.js +1 -1
  54. package/dist/lang/en-US.umd.prod.js +1 -1
  55. package/dist/lang/eo.umd.prod.js +1 -1
  56. package/dist/lang/es.umd.prod.js +1 -1
  57. package/dist/lang/et.umd.prod.js +1 -1
  58. package/dist/lang/eu.umd.prod.js +1 -1
  59. package/dist/lang/fa-IR.umd.prod.js +1 -1
  60. package/dist/lang/fa.umd.prod.js +1 -1
  61. package/dist/lang/fi.umd.prod.js +1 -1
  62. package/dist/lang/fr.umd.prod.js +1 -1
  63. package/dist/lang/gn.umd.prod.js +1 -1
  64. package/dist/lang/he.umd.prod.js +1 -1
  65. package/dist/lang/hr.umd.prod.js +1 -1
  66. package/dist/lang/hu.umd.prod.js +1 -1
  67. package/dist/lang/id.umd.prod.js +1 -1
  68. package/dist/lang/is.umd.prod.js +1 -1
  69. package/dist/lang/it.umd.prod.js +1 -1
  70. package/dist/lang/ja.umd.prod.js +2 -2
  71. package/dist/lang/kk.umd.prod.js +1 -1
  72. package/dist/lang/km.umd.prod.js +1 -1
  73. package/dist/lang/ko-KR.umd.prod.js +1 -1
  74. package/dist/lang/kur-CKB.umd.prod.js +1 -1
  75. package/dist/lang/lt.umd.prod.js +1 -1
  76. package/dist/lang/lu.umd.prod.js +1 -1
  77. package/dist/lang/lv.umd.prod.js +1 -1
  78. package/dist/lang/ml.umd.prod.js +1 -1
  79. package/dist/lang/mm.umd.prod.js +1 -1
  80. package/dist/lang/ms.umd.prod.js +1 -1
  81. package/dist/lang/my.umd.prod.js +1 -1
  82. package/dist/lang/nb-NO.umd.prod.js +1 -1
  83. package/dist/lang/nl.umd.prod.js +1 -1
  84. package/dist/lang/pl.umd.prod.js +1 -1
  85. package/dist/lang/pt-BR.umd.prod.js +1 -1
  86. package/dist/lang/pt.umd.prod.js +1 -1
  87. package/dist/lang/ro.umd.prod.js +1 -1
  88. package/dist/lang/ru.umd.prod.js +1 -1
  89. package/dist/lang/sk.umd.prod.js +1 -1
  90. package/dist/lang/sl.umd.prod.js +1 -1
  91. package/dist/lang/sm.umd.prod.js +1 -1
  92. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  93. package/dist/lang/sr.umd.prod.js +1 -1
  94. package/dist/lang/sv.umd.prod.js +1 -1
  95. package/dist/lang/ta.umd.prod.js +1 -1
  96. package/dist/lang/th.umd.prod.js +1 -1
  97. package/dist/lang/tr.umd.prod.js +1 -1
  98. package/dist/lang/ug.umd.prod.js +1 -1
  99. package/dist/lang/uk.umd.prod.js +1 -1
  100. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  101. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  102. package/dist/lang/vi.umd.prod.js +1 -1
  103. package/dist/lang/zh-CN.umd.prod.js +1 -1
  104. package/dist/lang/zh-TW.umd.prod.js +1 -1
  105. package/dist/quasar.cjs.prod.js +2 -2
  106. package/dist/quasar.css +2 -2
  107. package/dist/quasar.esm.js +121 -64
  108. package/dist/quasar.esm.prod.js +2 -2
  109. package/dist/quasar.prod.css +1 -1
  110. package/dist/quasar.rtl.css +2 -2
  111. package/dist/quasar.rtl.prod.css +1 -1
  112. package/dist/quasar.sass +17 -5
  113. package/dist/quasar.umd.js +121 -64
  114. package/dist/quasar.umd.prod.js +2 -2
  115. package/dist/types/index.d.ts +43 -0
  116. package/dist/web-types/web-types.json +102 -1
  117. package/lang/ja.js +1 -1
  118. package/lang/ja.mjs +1 -1
  119. package/package.json +9 -6
  120. package/src/components/avatar/__tests__/{QAvatar.spec.js → QAvatar.cy.js} +7 -8
  121. package/src/components/badge/__tests__/{QBadge.spec.js → QBadge.cy.js} +1 -2
  122. package/src/components/banner/__tests__/{QBanner.spec.js → QBanner.cy.js} +7 -8
  123. package/src/components/bar/__tests__/{QBar.spec.js → QBar.cy.js} +3 -4
  124. package/src/components/breadcrumbs/__tests__/{QBreadcrumbs.spec.js → QBreadcrumbs.cy.js} +8 -9
  125. package/src/components/breadcrumbs/__tests__/{QBreadcrumbsEl.spec.js → QBreadcrumbsEl.cy.js} +5 -6
  126. package/src/components/btn/__tests__/{QBtn.spec.js → QBtn.cy.js} +4 -5
  127. package/src/components/btn/__tests__/{use-btn.spec.js → use-btn.cy.js} +1 -2
  128. package/src/components/chip/__tests__/{QChip.spec.js → QChip.cy.js} +1 -2
  129. package/src/components/editor/QEditor.js +12 -1
  130. package/src/components/editor/QEditor.json +50 -0
  131. package/src/components/editor/editor-utils.js +5 -1
  132. package/src/components/field/QField.sass +16 -4
  133. package/src/components/input/QInput.js +24 -7
  134. package/src/components/input/use-mask.js +74 -50
  135. package/src/components/menu/__tests__/{QMenu.spec.js → QMenu.cy.js} +29 -30
  136. package/src/components/select/QSelect.js +2 -1
  137. package/src/components/select/__tests__/{QSelect.spec.js → QSelect.cy.js} +2 -3
  138. package/src/components/table/QTable.js +1 -1
  139. package/src/components/uploader/__tests__/{QUploader.spec.js → QUploader.cy.js} +1 -2
  140. package/src/composables/private/__tests__/{use-anchor.spec.js → use-anchor.cy.js} +7 -8
  141. package/src/composables/private/__tests__/{use-field.spec.js → use-field.cy.js} +7 -8
  142. package/src/composables/private/__tests__/{use-model-toggle.spec.js → use-model-toggle.cy.js} +17 -18
  143. package/src/composables/private/__tests__/{use-size.spec.js → use-size.cy.js} +4 -5
  144. package/src/composables/private/__tests__/{use-transition.spec.js → use-transition.cy.js} +9 -10
  145. package/src/composables/private/__tests__/{use-validate.spec.js → use-validate.cy.js} +5 -6
  146. package/src/composables/private/use-fullscreen.json +12 -0
  147. /package/src/components/date/__tests__/{QDate.spec.js → QDate.cy.js} +0 -0
  148. /package/src/components/dialog/__tests__/{QDialog.spec.js → QDialog.cy.js} +0 -0
  149. /package/src/components/editor/__tests__/{QEditor.spec.js → QEditor.cy.js} +0 -0
  150. /package/src/components/input/__tests__/{QInput.spec.js → QInput.cy.js} +0 -0
  151. /package/src/components/input/__tests__/{use-mask.spec.js → use-mask.cy.js} +0 -0
  152. /package/src/components/table/__tests__/{QTable.spec.js → QTable.cy.js} +0 -0
  153. /package/src/components/table/__tests__/{QTd.spec.js → QTd.cy.js} +0 -0
  154. /package/src/components/table/__tests__/{QTh.spec.js → QTh.cy.js} +0 -0
  155. /package/src/components/table/__tests__/{QTr.spec.js → QTr.cy.js} +0 -0
  156. /package/src/components/tabs/__tests__/{QRouteTab.spec.js → QRouteTab.cy.js} +0 -0
  157. /package/src/components/tabs/__tests__/{QTab.spec.js → QTab.cy.js} +0 -0
  158. /package/src/components/tabs/__tests__/{QTabs.spec.js → QTabs.cy.js} +0 -0
  159. /package/src/composables/private/__tests__/{use-file.spec.js → use-file.cy.js} +0 -0
  160. /package/src/composables/private/__tests__/{use-form.spec.js → use-form.cy.js} +0 -0
  161. /package/src/composables/private/__tests__/{use-fullscreen.spec.js → use-fullscreen.cy.js} +0 -0
  162. /package/src/composables/private/__tests__/{use-portal.spec.js → use-portal.cy.js} +0 -0
  163. /package/src/composables/private/__tests__/{use-router-link.spec.js → use-router-link.cy.js} +0 -0
@@ -2059,6 +2059,11 @@ export interface QCarouselProps {
2059
2059
  * Show thumbnails
2060
2060
  */
2061
2061
  thumbnails?: boolean | undefined;
2062
+ /**
2063
+ * Emitted when fullscreen state changes
2064
+ * @param value Fullscreen state (showing/hidden)
2065
+ */
2066
+ onFullscreen?: (value: boolean) => void;
2062
2067
  /**
2063
2068
  * Emitted when the component changes the model; This event _isn't_ fired if the model is changed externally; Is also used by v-model
2064
2069
  * @param value New current panel name
@@ -3450,11 +3455,44 @@ export interface QEditorProps {
3450
3455
  * Text to display as placeholder
3451
3456
  */
3452
3457
  placeholder?: string | undefined;
3458
+ /**
3459
+ * Emitted when fullscreen state changes
3460
+ * @param value Fullscreen state (showing/hidden)
3461
+ */
3462
+ onFullscreen?: (value: boolean) => void;
3453
3463
  /**
3454
3464
  * Emitted when the component needs to change the model; Is also used by v-model
3455
3465
  * @param value The pure HTML of the content
3456
3466
  */
3457
3467
  "onUpdate:modelValue"?: (value: string) => void;
3468
+ /**
3469
+ * Emitted after a dropdown in the toolbar has triggered show()
3470
+ * @param evt JS event object
3471
+ */
3472
+ onDropdownShow?: (evt: Event) => void;
3473
+ /**
3474
+ * Emitted when a dropdown in the toolbar triggers show() but before it finishes doing it
3475
+ * @param evt JS event object
3476
+ */
3477
+ onDropdownBeforeShow?: (evt: Event) => void;
3478
+ /**
3479
+ * Emitted after a dropdown in the toolbar has triggered hide()
3480
+ * @param evt JS event object
3481
+ */
3482
+ onDropdownHide?: (evt: Event) => void;
3483
+ /**
3484
+ * Emitted when a dropdown in the toolbar triggers hide() but before it finishes doing it
3485
+ * @param evt JS event object
3486
+ */
3487
+ onDropdownBeforeHide?: (evt: Event) => void;
3488
+ /**
3489
+ * Emitted when the toolbar for editing a link is shown
3490
+ */
3491
+ onLinkShow?: () => void;
3492
+ /**
3493
+ * Emitted when the toolbar for editing a link is hidden
3494
+ */
3495
+ onLinkHide?: () => void;
3458
3496
  }
3459
3497
 
3460
3498
  export interface QEditorSlots {}
@@ -10291,6 +10329,11 @@ export interface QTableProps {
10291
10329
  descending: boolean
10292
10330
  ) => readonly any[])
10293
10331
  | undefined;
10332
+ /**
10333
+ * Emitted when fullscreen state changes
10334
+ * @param value Fullscreen state (showing/hidden)
10335
+ */
10336
+ onFullscreen?: (value: boolean) => void;
10294
10337
  /**
10295
10338
  * Emitted when user clicks/taps on a row; Is not emitted when using body/row/item scoped slots
10296
10339
  * @param evt JS event object
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.11.7",
5
+ "version": "2.11.9",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -2385,6 +2385,19 @@
2385
2385
  }
2386
2386
  ],
2387
2387
  "events": [
2388
+ {
2389
+ "name": "fullscreen",
2390
+ "arguments": [
2391
+ {
2392
+ "name": "value",
2393
+ "type": "boolean",
2394
+ "description": "Fullscreen state (showing/hidden)",
2395
+ "doc-url": "https://v2.quasar.dev/vue-components/carousel"
2396
+ }
2397
+ ],
2398
+ "description": "Emitted when fullscreen state changes",
2399
+ "doc-url": "https://v2.quasar.dev/vue-components/carousel"
2400
+ },
2388
2401
  {
2389
2402
  "name": "update:model-value",
2390
2403
  "arguments": [
@@ -4794,6 +4807,19 @@
4794
4807
  }
4795
4808
  ],
4796
4809
  "events": [
4810
+ {
4811
+ "name": "fullscreen",
4812
+ "arguments": [
4813
+ {
4814
+ "name": "value",
4815
+ "type": "boolean",
4816
+ "description": "Fullscreen state (showing/hidden)",
4817
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4818
+ }
4819
+ ],
4820
+ "description": "Emitted when fullscreen state changes",
4821
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4822
+ },
4797
4823
  {
4798
4824
  "name": "update:model-value",
4799
4825
  "arguments": [
@@ -4806,6 +4832,68 @@
4806
4832
  ],
4807
4833
  "description": "Emitted when the component needs to change the model; Is also used by v-model",
4808
4834
  "doc-url": "https://v2.quasar.dev/vue-components/editor"
4835
+ },
4836
+ {
4837
+ "name": "dropdown-show",
4838
+ "arguments": [
4839
+ {
4840
+ "name": "evt",
4841
+ "type": "Event",
4842
+ "description": "JS event object",
4843
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4844
+ }
4845
+ ],
4846
+ "description": "Emitted after a dropdown in the toolbar has triggered show()",
4847
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4848
+ },
4849
+ {
4850
+ "name": "dropdown-before-show",
4851
+ "arguments": [
4852
+ {
4853
+ "name": "evt",
4854
+ "type": "Event",
4855
+ "description": "JS event object",
4856
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4857
+ }
4858
+ ],
4859
+ "description": "Emitted when a dropdown in the toolbar triggers show() but before it finishes doing it",
4860
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4861
+ },
4862
+ {
4863
+ "name": "dropdown-hide",
4864
+ "arguments": [
4865
+ {
4866
+ "name": "evt",
4867
+ "type": "Event",
4868
+ "description": "JS event object",
4869
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4870
+ }
4871
+ ],
4872
+ "description": "Emitted after a dropdown in the toolbar has triggered hide()",
4873
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4874
+ },
4875
+ {
4876
+ "name": "dropdown-before-hide",
4877
+ "arguments": [
4878
+ {
4879
+ "name": "evt",
4880
+ "type": "Event",
4881
+ "description": "JS event object",
4882
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4883
+ }
4884
+ ],
4885
+ "description": "Emitted when a dropdown in the toolbar triggers hide() but before it finishes doing it",
4886
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4887
+ },
4888
+ {
4889
+ "name": "link-show",
4890
+ "description": "Emitted when the toolbar for editing a link is shown",
4891
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4892
+ },
4893
+ {
4894
+ "name": "link-hide",
4895
+ "description": "Emitted when the toolbar for editing a link is hidden",
4896
+ "doc-url": "https://v2.quasar.dev/vue-components/editor"
4809
4897
  }
4810
4898
  ],
4811
4899
  "slots": [],
@@ -16234,6 +16322,19 @@
16234
16322
  }
16235
16323
  ],
16236
16324
  "events": [
16325
+ {
16326
+ "name": "fullscreen",
16327
+ "arguments": [
16328
+ {
16329
+ "name": "value",
16330
+ "type": "boolean",
16331
+ "description": "Fullscreen state (showing/hidden)",
16332
+ "doc-url": "https://v2.quasar.dev/vue-components/table"
16333
+ }
16334
+ ],
16335
+ "description": "Emitted when fullscreen state changes",
16336
+ "doc-url": "https://v2.quasar.dev/vue-components/table"
16337
+ },
16237
16338
  {
16238
16339
  "name": "row-click",
16239
16340
  "arguments": [
package/lang/ja.js CHANGED
@@ -31,7 +31,7 @@ module.exports = {
31
31
  headerTitle: date => new Intl.DateTimeFormat('ja-JP', {
32
32
  weekday: 'short', month: 'short', day: 'numeric'
33
33
  }).format(date),
34
- firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
34
+ firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ...
35
35
  format24h: true, // true
36
36
  pluralDay: '日間'
37
37
  },
package/lang/ja.mjs CHANGED
@@ -26,7 +26,7 @@ export default {
26
26
  headerTitle: date => new Intl.DateTimeFormat('ja-JP', {
27
27
  weekday: 'short', month: 'short', day: 'numeric'
28
28
  }).format(date),
29
- firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
29
+ firstDayOfWeek: 0, // 0-6, 0 - Sunday, 1 Monday, ...
30
30
  format24h: true, // true
31
31
  pluralDay: '日間'
32
32
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.11.7",
3
+ "version": "2.11.9",
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",
@@ -30,11 +30,13 @@
30
30
  "lint": "eslint --ext .js,.vue src dev",
31
31
  "lint-fix": "eslint --ext .js,.vue src dev --fix",
32
32
  "format:types": "prettier --write \"types/**/*.{d.ts,ts,json}\"",
33
+ "test:create": "node ./test/cypress/helpers/create-spec.js -c",
33
34
  "test:build": "node build/script.build.js js api && node build/script.build.js js transforms",
34
- "test:component": "yarn test:build && cd ./dev && cypress open-ct && cd ..",
35
- "test:component:run": "yarn test:build && cd ./dev && cypress run-ct && cd ..",
36
- "test:component:ci": "yarn test:build && cd ./dev && cypress run-ct --record --parallel && cd ..",
37
- "test:create": "node ./test/cypress/helpers/create-spec.js -c"
35
+ "test:e2e": "yarn test:build && cd ./dev && cross-env NODE_ENV=test start-test \"node ./script.dev.js\" http-get://localhost:9000 \"cypress open --e2e\" && cd ..",
36
+ "test:e2e:ci": "yarn test:build && cd ./dev && cross-env NODE_ENV=test start-test \"node ./script.dev.js\" http-get://localhost:9000 \"cypress run --e2e\" && cd ..",
37
+ "test:component": "yarn test:build && cd ./dev && cross-env NODE_ENV=test cypress open --component && cd ..",
38
+ "test:component:run": "yarn test:build && cd ./dev && cross-env NODE_ENV=test cypress run --component && cd ..",
39
+ "test:component:ci": "yarn test:build && cd ./dev && cross-env NODE_ENV=test cypress run --component --record --parallel && cd .."
38
40
  },
39
41
  "repository": {
40
42
  "type": "git",
@@ -70,13 +72,14 @@
70
72
  "devDependencies": {
71
73
  "@quasar/app-vite": "^1.2.0",
72
74
  "@quasar/extras": "^1.15.11",
73
- "@quasar/quasar-app-extension-testing-e2e-cypress": "^4.1.2",
75
+ "@quasar/quasar-app-extension-testing-e2e-cypress": "^5.1.0",
74
76
  "@rollup/plugin-node-resolve": "^11.2.1",
75
77
  "@rollup/plugin-replace": "^2.3.3",
76
78
  "autoprefixer": "^10.4.13",
77
79
  "babel-preset-es2015-rollup": "^3.0.0",
78
80
  "cli-highlight": "^2.1.11",
79
81
  "cssnano": "^5.1.14",
82
+ "cypress": "^12.7.0",
80
83
  "diff": "^5.1.0",
81
84
  "eslint": "^7.4.0",
82
85
  "eslint-config-standard": "^17.0.0",
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QAvatar from '../QAvatar.js'
3
2
 
4
3
  describe('Avatar API', () => {
@@ -7,7 +6,7 @@ describe('Avatar API', () => {
7
6
  describe('(prop): icon', () => {
8
7
  it('should render an icon', () => {
9
8
  const icon = 'bug_report'
10
- mount(QAvatar, {
9
+ cy.mount(QAvatar, {
11
10
  props: {
12
11
  icon,
13
12
  color: 'grey'
@@ -28,7 +27,7 @@ describe('Avatar API', () => {
28
27
  // Doing em/rem units here does not work
29
28
  // Cypress looks at actual computed values in the browser
30
29
  const fontSize = '32px'
31
- mount(QAvatar, {
30
+ cy.mount(QAvatar, {
32
31
  props: {
33
32
  size,
34
33
  fontSize,
@@ -46,7 +45,7 @@ describe('Avatar API', () => {
46
45
  describe('(prop): color', () => {
47
46
  it('should set a background color', () => {
48
47
  const color = 'red'
49
- mount(QAvatar, {
48
+ cy.mount(QAvatar, {
50
49
  props: {
51
50
  color
52
51
  }
@@ -60,7 +59,7 @@ describe('Avatar API', () => {
60
59
  describe('(prop): text-color', () => {
61
60
  it('should set a text color', () => {
62
61
  const textColor = 'red'
63
- mount(QAvatar, {
62
+ cy.mount(QAvatar, {
64
63
  props: {
65
64
  textColor
66
65
  }
@@ -73,7 +72,7 @@ describe('Avatar API', () => {
73
72
 
74
73
  describe('(prop): square', () => {
75
74
  it('should create a square avatar', () => {
76
- mount(QAvatar, {
75
+ cy.mount(QAvatar, {
77
76
  props: {
78
77
  square: true,
79
78
  color: 'grey'
@@ -88,7 +87,7 @@ describe('Avatar API', () => {
88
87
 
89
88
  describe('(prop): rounded', () => {
90
89
  it('should create a rounded avatar', () => {
91
- mount(QAvatar, {
90
+ cy.mount(QAvatar, {
92
91
  props: {
93
92
  rounded: true,
94
93
  color: 'grey'
@@ -106,7 +105,7 @@ describe('Avatar API', () => {
106
105
  describe('(slot): default', () => {
107
106
  it('render the text in the default slot', () => {
108
107
  const text = 'QQ'
109
- mount(QAvatar, {
108
+ cy.mount(QAvatar, {
110
109
  slots: {
111
110
  // Using only a string here results in an error, this is a workaround
112
111
  default: () => text
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QBadge from '../QBadge.js'
3
2
 
4
3
  const defaultOptions = {
@@ -13,7 +12,7 @@ function mountQBadge (options = {}) {
13
12
  ...options.props
14
13
  }
15
14
 
16
- return mount(QBadge, options)
15
+ return cy.mount(QBadge, options)
17
16
  }
18
17
 
19
18
  describe('Badge API', () => {
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QBanner from '../QBanner.js'
3
2
 
4
3
  describe('Banner API', () => {
@@ -6,7 +5,7 @@ describe('Banner API', () => {
6
5
  describe('Category: content', () => {
7
6
  describe('(prop): inline-actions', () => {
8
7
  it('should render the actions in the same row as the content', () => {
9
- mount(QBanner, {
8
+ cy.mount(QBanner, {
10
9
  slots: {
11
10
  default: 'Banner content',
12
11
  action: 'Banner action'
@@ -25,7 +24,7 @@ describe('Banner API', () => {
25
24
  describe('Category: style', () => {
26
25
  describe('(prop): dense', () => {
27
26
  it('should have a dense style when "dense" prop is true', () => {
28
- mount(QBanner, {
27
+ cy.mount(QBanner, {
29
28
  props: {
30
29
  dense: true
31
30
  }
@@ -38,7 +37,7 @@ describe('Banner API', () => {
38
37
 
39
38
  describe('(prop): rounded', () => {
40
39
  it('should have a rounded style when "rounded" prop is true', () => {
41
- mount(QBanner, {
40
+ cy.mount(QBanner, {
42
41
  props: {
43
42
  rounded: true
44
43
  }
@@ -51,7 +50,7 @@ describe('Banner API', () => {
51
50
 
52
51
  describe('(prop): dark', () => {
53
52
  it('should have a dark style when "dark" prop is true', () => {
54
- mount(QBanner, {
53
+ cy.mount(QBanner, {
55
54
  props: {
56
55
  dark: true
57
56
  }
@@ -67,7 +66,7 @@ describe('Banner API', () => {
67
66
  describe('Slots', () => {
68
67
  describe('(slot): default', () => {
69
68
  it('should render the default content', () => {
70
- mount(QBanner, {
69
+ cy.mount(QBanner, {
71
70
  slots: {
72
71
  default: 'Banner content'
73
72
  }
@@ -80,7 +79,7 @@ describe('Banner API', () => {
80
79
 
81
80
  describe('(slot): avatar', () => {
82
81
  it('should render the avatar content', () => {
83
- mount(QBanner, {
82
+ cy.mount(QBanner, {
84
83
  slots: {
85
84
  avatar: 'Banner avatar'
86
85
  }
@@ -93,7 +92,7 @@ describe('Banner API', () => {
93
92
 
94
93
  describe('(slot): action', () => {
95
94
  it('should render the action content', () => {
96
- mount(QBanner, {
95
+ cy.mount(QBanner, {
97
96
  slots: {
98
97
  action: 'Banner action'
99
98
  }
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QBar from '../QBar.js'
3
2
 
4
3
  describe('Bar API', () => {
@@ -6,7 +5,7 @@ describe('Bar API', () => {
6
5
  describe('Category: style', () => {
7
6
  describe('(prop): dense', () => {
8
7
  it('should have a dense style when "dense" prop is true', () => {
9
- mount(QBar, {
8
+ cy.mount(QBar, {
10
9
  propsData: {
11
10
  dense: true
12
11
  }
@@ -18,7 +17,7 @@ describe('Bar API', () => {
18
17
 
19
18
  describe('(prop): dark', () => {
20
19
  it('should have a dark style when "dark" prop is true', () => {
21
- mount(QBar, {
20
+ cy.mount(QBar, {
22
21
  propsData: {
23
22
  dark: true
24
23
  }
@@ -33,7 +32,7 @@ describe('Bar API', () => {
33
32
  describe('Slots', () => {
34
33
  describe('(slot): default', () => {
35
34
  it('should render the default slot', () => {
36
- mount(QBar, {
35
+ cy.mount(QBar, {
37
36
  slots: {
38
37
  default: 'default bar slot'
39
38
  }
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import { alignMap, alignValues } from '../../../composables/private/use-align.js'
3
2
  import BasicBreadcrumbs from './BasicBreadcrumbs.vue'
4
3
  import BreadcrumbWithSeparatorSlot from './BreadcrumbWithSeparatorSlot.vue'
@@ -12,7 +11,7 @@ describe('Breadcrumbs API', () => {
12
11
  it('should render a custom separator based on the defined value', () => {
13
12
  const customSeparator = '>'
14
13
 
15
- mount(BasicBreadcrumbs, {
14
+ cy.mount(BasicBreadcrumbs, {
16
15
  props: {
17
16
  separator: customSeparator
18
17
  }
@@ -24,7 +23,7 @@ describe('Breadcrumbs API', () => {
24
23
 
25
24
  describe('(prop): gutter', () => {
26
25
  it(`should render a breadcrumb with a gutter based on defined values: ${ gutterValues.join(', ') }`, () => {
27
- mount(BasicBreadcrumbs)
26
+ cy.mount(BasicBreadcrumbs)
28
27
 
29
28
  // loop through each gutter value
30
29
  for (const gutter of gutterValues) {
@@ -35,7 +34,7 @@ describe('Breadcrumbs API', () => {
35
34
  })
36
35
 
37
36
  it('should render a breadcrumb with no gutter when the value is set to "none"', () => {
38
- mount(BasicBreadcrumbs, {
37
+ cy.mount(BasicBreadcrumbs, {
39
38
  props: {
40
39
  gutter: 'none'
41
40
  }
@@ -47,7 +46,7 @@ describe('Breadcrumbs API', () => {
47
46
 
48
47
  describe('(prop): align', () => {
49
48
  it(`should render a breadcrumb aligned based on defined values: ${ alignValues.join(', ') }`, () => {
50
- mount(BasicBreadcrumbs)
49
+ cy.mount(BasicBreadcrumbs)
51
50
 
52
51
  // loop over alignValues
53
52
  for (const align of alignValues) {
@@ -64,7 +63,7 @@ describe('Breadcrumbs API', () => {
64
63
  it('should change breadcrumb item color based on Quasar Color Palette', () => {
65
64
  const activeColor = 'red'
66
65
 
67
- mount(BasicBreadcrumbs, {
66
+ cy.mount(BasicBreadcrumbs, {
68
67
  props: {
69
68
  activeColor
70
69
  }
@@ -78,7 +77,7 @@ describe('Breadcrumbs API', () => {
78
77
  it('should change breadcrumb separator color based on Quasar Color Palette', () => {
79
78
  const separatorColor = 'red'
80
79
 
81
- mount(BasicBreadcrumbs, {
80
+ cy.mount(BasicBreadcrumbs, {
82
81
  props: {
83
82
  separatorColor
84
83
  }
@@ -93,7 +92,7 @@ describe('Breadcrumbs API', () => {
93
92
  describe('Slots', () => {
94
93
  describe('(slot): default', () => {
95
94
  it('should display the default slot content', () => {
96
- mount(BasicBreadcrumbs)
95
+ cy.mount(BasicBreadcrumbs)
97
96
 
98
97
  cy.get('.q-breadcrumbs > div')
99
98
  .should('contain', 'Home')
@@ -102,7 +101,7 @@ describe('Breadcrumbs API', () => {
102
101
 
103
102
  describe('(slot): separator', () => {
104
103
  it('should display the separator slot content', () => {
105
- mount(BreadcrumbWithSeparatorSlot)
104
+ cy.mount(BreadcrumbWithSeparatorSlot)
106
105
 
107
106
  cy.get('.q-breadcrumbs__separator')
108
107
  .should('contain', 'arrow_forward')
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QBreadcrumbsEl from '../QBreadcrumbsEl.js'
3
2
 
4
3
  describe('BreadcrumbsEl API', () => {
@@ -8,7 +7,7 @@ describe('BreadcrumbsEl API', () => {
8
7
  it('should render a label inside the breadcrumb element', () => {
9
8
  const label = 'Breadcrumb label'
10
9
 
11
- mount(QBreadcrumbsEl, {
10
+ cy.mount(QBreadcrumbsEl, {
12
11
  props: { label }
13
12
  })
14
13
 
@@ -21,7 +20,7 @@ describe('BreadcrumbsEl API', () => {
21
20
  it('should render on the left of the breadcrumb element', () => {
22
21
  const icon = 'home'
23
22
 
24
- mount(QBreadcrumbsEl, {
23
+ cy.mount(QBreadcrumbsEl, {
25
24
  props: { icon }
26
25
  })
27
26
 
@@ -34,7 +33,7 @@ describe('BreadcrumbsEl API', () => {
34
33
  it('should render a custom tag', () => {
35
34
  const tag = 'a'
36
35
 
37
- mount(QBreadcrumbsEl, {
36
+ cy.mount(QBreadcrumbsEl, {
38
37
  props: { tag }
39
38
  })
40
39
 
@@ -56,7 +55,7 @@ describe('BreadcrumbsEl API', () => {
56
55
  it('should render the default slot', () => {
57
56
  const label = 'Breadcrumb label'
58
57
 
59
- mount(QBreadcrumbsEl, {
58
+ cy.mount(QBreadcrumbsEl, {
60
59
  slots: { default: label }
61
60
  })
62
61
 
@@ -71,7 +70,7 @@ describe('BreadcrumbsEl API', () => {
71
70
  it('should emit "click" event when clicked', () => {
72
71
  const fn = cy.stub()
73
72
 
74
- mount(QBreadcrumbsEl, {
73
+ cy.mount(QBreadcrumbsEl, {
75
74
  props: {
76
75
  label: 'clicked breadcrumb',
77
76
  onClick: fn
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QBtn from '../QBtn.js'
3
2
 
4
3
  const defaultOptions = {
@@ -11,7 +10,7 @@ function mountQBtn (options = {}) {
11
10
  ...options.props
12
11
  }
13
12
 
14
- return mount(QBtn, options)
13
+ return cy.mount(QBtn, options)
15
14
  }
16
15
 
17
16
  describe('Btn API', () => {
@@ -118,10 +117,10 @@ describe('Btn API', () => {
118
117
  props: {
119
118
  onClick: fn
120
119
  }
120
+ }).then(({ wrapper }) => {
121
+ wrapper.vm.click()
122
+ return expect(fn).to.be.calledOnce
121
123
  })
122
-
123
- cy.get('.q-btn').invoke('click')
124
- .then(() => expect(fn).to.be.calledOnce)
125
124
  })
126
125
  })
127
126
  })
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import { createMemoryHistory, createRouter } from 'vue-router'
3
2
  import { alignMap, alignValues } from '../../../composables/private/use-align.js'
4
3
  import QBtn from '../QBtn.js'
@@ -36,7 +35,7 @@ function mountQBtn (options = {}) {
36
35
  }
37
36
  })
38
37
 
39
- return mount(QBtn, options)
38
+ return cy.mount(QBtn, options)
40
39
  }
41
40
 
42
41
  describe('use-btn API', () => {
@@ -1,4 +1,3 @@
1
- import { mount } from '@cypress/vue'
2
1
  import QChip, { defaultSizes } from '../QChip.js'
3
2
 
4
3
  const defaultOptions = {
@@ -13,7 +12,7 @@ function mountQChip (options = {}) {
13
12
  ...options.props
14
13
  }
15
14
 
16
- return mount(QChip, options)
15
+ return cy.mount(QChip, options)
17
16
  }
18
17
 
19
18
  describe('Chip API', () => {
@@ -76,7 +76,13 @@ export default createComponent({
76
76
  ...useFullscreenEmits,
77
77
  'update:modelValue',
78
78
  'keydown', 'click', 'mouseup', 'keyup', 'touchend',
79
- 'focus', 'blur'
79
+ 'focus', 'blur',
80
+ 'dropdownShow',
81
+ 'dropdownHide',
82
+ 'dropdownBeforeShow',
83
+ 'dropdownBeforeHide',
84
+ 'linkShow',
85
+ 'linkHide'
80
86
  ],
81
87
 
82
88
  setup (props, { slots, emit, attrs }) {
@@ -233,6 +239,7 @@ export default createComponent({
233
239
  $q,
234
240
  props,
235
241
  slots,
242
+ emit,
236
243
  // caret (will get injected after mount)
237
244
  inFullscreen,
238
245
  toggleFullscreen,
@@ -253,6 +260,10 @@ export default createComponent({
253
260
  }
254
261
  })
255
262
 
263
+ watch(editLinkUrl, v => {
264
+ emit(`link-${ v ? 'Show' : 'Hide' }`)
265
+ })
266
+
256
267
  const hasToolbar = computed(() => props.toolbar && props.toolbar.length > 0)
257
268
 
258
269
  const keys = computed(() => {