quasar 2.12.7 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/api/QField.json +0 -3
  2. package/dist/api/QSelect.json +1 -1
  3. package/dist/api/QTable.json +54 -1
  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 +2 -2
  33. package/dist/icon-set/svg-material-icons-round.umd.prod.js +2 -2
  34. package/dist/icon-set/svg-material-icons-sharp.umd.prod.js +2 -2
  35. package/dist/icon-set/svg-material-icons.umd.prod.js +2 -2
  36. package/dist/icon-set/svg-material-symbols-outlined.umd.prod.js +2 -2
  37. package/dist/icon-set/svg-material-symbols-rounded.umd.prod.js +2 -2
  38. package/dist/icon-set/svg-material-symbols-sharp.umd.prod.js +2 -2
  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-CH.umd.prod.js +6 -0
  52. package/dist/lang/de-DE.umd.prod.js +6 -0
  53. package/dist/lang/de.umd.prod.js +1 -1
  54. package/dist/lang/el.umd.prod.js +1 -1
  55. package/dist/lang/en-GB.umd.prod.js +1 -1
  56. package/dist/lang/en-US.umd.prod.js +1 -1
  57. package/dist/lang/eo.umd.prod.js +1 -1
  58. package/dist/lang/es.umd.prod.js +1 -1
  59. package/dist/lang/et.umd.prod.js +1 -1
  60. package/dist/lang/eu.umd.prod.js +1 -1
  61. package/dist/lang/fa-IR.umd.prod.js +1 -1
  62. package/dist/lang/fa.umd.prod.js +1 -1
  63. package/dist/lang/fi.umd.prod.js +1 -1
  64. package/dist/lang/fr.umd.prod.js +1 -1
  65. package/dist/lang/gn.umd.prod.js +1 -1
  66. package/dist/lang/he.umd.prod.js +1 -1
  67. package/dist/lang/hi.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/mk.umd.prod.js +1 -1
  82. package/dist/lang/ml.umd.prod.js +1 -1
  83. package/dist/lang/mm.umd.prod.js +1 -1
  84. package/dist/lang/ms.umd.prod.js +1 -1
  85. package/dist/lang/my.umd.prod.js +1 -1
  86. package/dist/lang/nb-NO.umd.prod.js +1 -1
  87. package/dist/lang/nl.umd.prod.js +1 -1
  88. package/dist/lang/pl.umd.prod.js +1 -1
  89. package/dist/lang/pt-BR.umd.prod.js +1 -1
  90. package/dist/lang/pt.umd.prod.js +1 -1
  91. package/dist/lang/ro.umd.prod.js +1 -1
  92. package/dist/lang/ru.umd.prod.js +1 -1
  93. package/dist/lang/sk.umd.prod.js +1 -1
  94. package/dist/lang/sl.umd.prod.js +1 -1
  95. package/dist/lang/sm.umd.prod.js +1 -1
  96. package/dist/lang/sr-CYR.umd.prod.js +1 -1
  97. package/dist/lang/sr.umd.prod.js +1 -1
  98. package/dist/lang/sv.umd.prod.js +1 -1
  99. package/dist/lang/ta.umd.prod.js +1 -1
  100. package/dist/lang/th.umd.prod.js +1 -1
  101. package/dist/lang/tr.umd.prod.js +1 -1
  102. package/dist/lang/ug.umd.prod.js +1 -1
  103. package/dist/lang/uk.umd.prod.js +1 -1
  104. package/dist/lang/uz-Cyrl.umd.prod.js +1 -1
  105. package/dist/lang/uz-Latn.umd.prod.js +1 -1
  106. package/dist/lang/vi.umd.prod.js +1 -1
  107. package/dist/lang/zh-CN.umd.prod.js +1 -1
  108. package/dist/lang/zh-TW.umd.prod.js +1 -1
  109. package/dist/quasar.addon.prod.css +1 -1
  110. package/dist/quasar.addon.rtl.prod.css +1 -1
  111. package/dist/quasar.cjs.prod.js +2 -2
  112. package/dist/quasar.esm.js +96 -28
  113. package/dist/quasar.esm.prod.js +2 -2
  114. package/dist/quasar.prod.css +1 -1
  115. package/dist/quasar.rtl.prod.css +1 -1
  116. package/dist/quasar.sass +1 -1
  117. package/dist/quasar.umd.js +96 -28
  118. package/dist/quasar.umd.prod.js +2 -2
  119. package/dist/types/index.d.ts +13 -3
  120. package/dist/vetur/quasar-attributes.json +1 -1
  121. package/dist/web-types/web-types.json +2 -6
  122. package/lang/de-CH.js +98 -0
  123. package/lang/de-CH.mjs +93 -0
  124. package/lang/de-DE.js +98 -0
  125. package/lang/de-DE.mjs +93 -0
  126. package/lang/index.json +8 -0
  127. package/package.json +4 -3
  128. package/src/components/field/__tests__/QField.cy.js +156 -0
  129. package/src/components/input/use-mask.js +6 -1
  130. package/src/components/scroll-area/QScrollArea.js +16 -1
  131. package/src/components/select/QSelect.js +42 -17
  132. package/src/components/select/QSelect.json +1 -1
  133. package/src/components/select/__tests__/QSelect.cy.js +2 -1
  134. package/src/components/table/QTable.json +38 -1
  135. package/src/components/table/table-sort.js +5 -0
  136. package/src/components/time/QTime.js +16 -3
  137. package/src/components/tree/QTree.js +8 -3
  138. package/src/composables/private/__tests__/FieldWrapper.vue +17 -2
  139. package/src/composables/private/__tests__/use-field.cy.js +334 -137
  140. package/src/composables/private/__tests__/use-validate.cy.js +162 -15
@@ -5181,7 +5181,6 @@ export interface QFieldSlots {
5181
5181
  */
5182
5182
  emitValue: (value: any) => void;
5183
5183
  }) => VNode[];
5184
- rawControl: () => VNode[];
5185
5184
  }
5186
5185
 
5187
5186
  export interface QField extends ComponentPublicInstance<QFieldProps> {
@@ -9062,7 +9061,7 @@ export interface QSelectProps {
9062
9061
  */
9063
9062
  emitValue?: boolean | undefined;
9064
9063
  /**
9065
- * Debounce the input model update with an amount of milliseconds
9064
+ * Debounce the input model update with an amount of milliseconds (also affects the 'filter' event, if used)
9066
9065
  * Default value: 500
9067
9066
  */
9068
9067
  inputDebounce?: number | string | undefined;
@@ -10927,7 +10926,7 @@ export interface QTableProps {
10927
10926
  */
10928
10927
  sortable?: boolean;
10929
10928
  /**
10930
- * Compare function if you have some custom data or want a specific way to compare two rows
10929
+ * Compare function if you have some custom data or want a specific way to compare two rows; rows with null/undefined values will get sorted without triggering this method (use 'rawSort' instead if you want to handle those values too)
10931
10930
  * @param a Value of the first comparison term
10932
10931
  * @param b Value of the second comparison term
10933
10932
  * @param rowA Full Row object in which is contained the first term
@@ -10935,6 +10934,15 @@ export interface QTableProps {
10935
10934
  * @returns Comparison result of term 'a' with term 'b'. Less than 0 when 'a' should come first; greater than 0 if 'b' should come first; equal to 0 if their position must not be changed with respect to each other
10936
10935
  */
10937
10936
  sort?: (a: any, b: any, rowA: any, rowB: any) => number;
10937
+ /**
10938
+ * Compare function if you have some custom data or want a specific way to compare two rows; includes rows with null/undefined values (use 'sort' instead if you don't want that)
10939
+ * @param a Value of the first comparison term
10940
+ * @param b Value of the second comparison term
10941
+ * @param rowA Full Row object in which is contained the first term
10942
+ * @param rowB Full Row object in which is contained the second term
10943
+ * @returns Comparison result of term 'a' with term 'b'. Less than 0 when 'a' should come first; greater than 0 if 'b' should come first; equal to 0 if their position must not be changed with respect to each other
10944
+ */
10945
+ rawSort?: (a: any, b: any, rowA: any, rowB: any) => number;
10938
10946
  /**
10939
10947
  * Set column sort order: 'ad' (ascending-descending) or 'da' (descending-ascending); Overrides the 'column-sort-order' prop
10940
10948
  * Default value: ad
@@ -15579,6 +15587,8 @@ declare module "./lang" {
15579
15587
  ca: true;
15580
15588
  cs: true;
15581
15589
  da: true;
15590
+ "de-CH": true;
15591
+ "de-DE": true;
15582
15592
  de: true;
15583
15593
  el: true;
15584
15594
  "en-GB": true;
@@ -4105,7 +4105,7 @@
4105
4105
  },
4106
4106
  "q-select/input-debounce": {
4107
4107
  "type": "number|string",
4108
- "description": "Debounce the input model update with an amount of milliseconds"
4108
+ "description": "Debounce the input model update with an amount of milliseconds (also affects the 'filter' event, if used)"
4109
4109
  },
4110
4110
  "q-select/input-class": {
4111
4111
  "type": "string|array|object",
@@ -2,7 +2,7 @@
2
2
  "$schema": "",
3
3
  "framework": "vue",
4
4
  "name": "quasar",
5
- "version": "2.12.7",
5
+ "version": "2.13.0",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -6405,10 +6405,6 @@
6405
6405
  "name": "control",
6406
6406
  "description": "Slot for controls; Suggestion QSlider, QRange, QKnob, ...",
6407
6407
  "doc-url": "https://v2.quasar.dev/vue-components/field"
6408
- },
6409
- {
6410
- "name": "rawControl",
6411
- "doc-url": "https://v2.quasar.dev/vue-components/field"
6412
6408
  }
6413
6409
  ],
6414
6410
  "description": "QField - Quasar component",
@@ -12993,7 +12989,7 @@
12993
12989
  "kind": "expression",
12994
12990
  "type": "number|string"
12995
12991
  },
12996
- "description": "Debounce the input model update with an amount of milliseconds",
12992
+ "description": "Debounce the input model update with an amount of milliseconds (also affects the 'filter' event, if used)",
12997
12993
  "doc-url": "https://v2.quasar.dev/vue-components/select",
12998
12994
  "default": "500"
12999
12995
  },
package/lang/de-CH.js ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * DO NOT EDIT THIS FILE. It is automatically generated
3
+ * from its .mjs counterpart (same filename but with .mjs extension).
4
+ * Edit that file instead (de-CH.mjs).
5
+ */
6
+ module.exports = {
7
+ isoName: 'de-CH',
8
+ nativeName: 'Deutsch (CH)',
9
+ label: {
10
+ clear: 'Leeren',
11
+ ok: 'Ok',
12
+ cancel: 'Abbrechen',
13
+ close: 'Schliessen',
14
+ set: 'Setzen',
15
+ select: 'Auswählen',
16
+ reset: 'Zurücksetzen',
17
+ remove: 'Löschen',
18
+ update: 'Aktualisieren',
19
+ create: 'Erstellen',
20
+ search: 'Suche',
21
+ filter: 'Filter',
22
+ refresh: 'Aktualisieren',
23
+ expand: label => (label ? `Erweitern Sie "${ label }"` : 'Erweitern'),
24
+ collapse: label => (label ? `"${ label }" minimieren` : 'Zusammenbruch')
25
+ },
26
+ date: {
27
+ days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
28
+ daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
29
+ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
30
+ monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
31
+ firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
32
+ format24h: true,
33
+ pluralDay: 'Tage'
34
+ },
35
+ table: {
36
+ noData: 'Keine Daten vorhanden.',
37
+ noResults: 'Keine Einträge gefunden',
38
+ loading: 'Lade...',
39
+ selectedRecords: rows => (
40
+ rows > 1
41
+ ? rows + ' ausgewählte Zeilen'
42
+ : (rows === 0 ? 'Keine' : '1') + ' ausgewählt.'
43
+ ),
44
+ recordsPerPage: 'Zeilen pro Seite',
45
+ allRows: 'Alle',
46
+ pagination: (start, end, total) => start + '-' + end + ' von ' + total,
47
+ columns: 'Spalten'
48
+ },
49
+ editor: {
50
+ url: 'URL',
51
+ bold: 'Fett',
52
+ italic: 'Kursiv',
53
+ strikethrough: 'Durchgestrichen',
54
+ underline: 'Unterstrichen',
55
+ unorderedList: 'Ungeordnete Liste',
56
+ orderedList: 'Geordnete Liste',
57
+ subscript: 'tiefgestellt',
58
+ superscript: 'hochgestellt',
59
+ hyperlink: 'Link',
60
+ toggleFullscreen: 'Vollbild umschalten',
61
+ quote: 'Zitat',
62
+ left: 'linksbündig',
63
+ center: 'zentriert',
64
+ right: 'rechtsbündig',
65
+ justify: 'Ausrichten',
66
+ print: 'Drucken',
67
+ outdent: 'ausrücken',
68
+ indent: 'einrücken',
69
+ removeFormat: 'Entferne Formatierung',
70
+ formatting: 'Formatiere',
71
+ fontSize: 'Schriftgrösse',
72
+ align: 'Ausrichten',
73
+ hr: 'Horizontale Linie einfügen',
74
+ undo: 'Rückgänging',
75
+ redo: 'Wiederherstellen',
76
+ heading1: 'Überschrift 1',
77
+ heading2: 'Überschrift 2',
78
+ heading3: 'Überschrift 3',
79
+ heading4: 'Überschrift 4',
80
+ heading5: 'Überschrift 5',
81
+ heading6: 'Überschrift 6',
82
+ paragraph: 'Absatz',
83
+ code: 'Code',
84
+ size1: 'Sehr klein',
85
+ size2: 'klein',
86
+ size3: 'Normal',
87
+ size4: 'Gross',
88
+ size5: 'Grösser',
89
+ size6: 'Sehr gross',
90
+ size7: 'Maximum',
91
+ defaultFont: 'Standard Schrift',
92
+ viewSource: 'Quelltext anzeigen'
93
+ },
94
+ tree: {
95
+ noNodes: 'Keine Knoten verfügbar',
96
+ noResults: 'Keine passenden Knoten gefunden'
97
+ }
98
+ }
package/lang/de-CH.mjs ADDED
@@ -0,0 +1,93 @@
1
+ export default {
2
+ isoName: 'de-CH',
3
+ nativeName: 'Deutsch (CH)',
4
+ label: {
5
+ clear: 'Leeren',
6
+ ok: 'Ok',
7
+ cancel: 'Abbrechen',
8
+ close: 'Schliessen',
9
+ set: 'Setzen',
10
+ select: 'Auswählen',
11
+ reset: 'Zurücksetzen',
12
+ remove: 'Löschen',
13
+ update: 'Aktualisieren',
14
+ create: 'Erstellen',
15
+ search: 'Suche',
16
+ filter: 'Filter',
17
+ refresh: 'Aktualisieren',
18
+ expand: label => (label ? `Erweitern Sie "${ label }"` : 'Erweitern'),
19
+ collapse: label => (label ? `"${ label }" minimieren` : 'Zusammenbruch')
20
+ },
21
+ date: {
22
+ days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
23
+ daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
24
+ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
25
+ monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
26
+ firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
27
+ format24h: true,
28
+ pluralDay: 'Tage'
29
+ },
30
+ table: {
31
+ noData: 'Keine Daten vorhanden.',
32
+ noResults: 'Keine Einträge gefunden',
33
+ loading: 'Lade...',
34
+ selectedRecords: rows => (
35
+ rows > 1
36
+ ? rows + ' ausgewählte Zeilen'
37
+ : (rows === 0 ? 'Keine' : '1') + ' ausgewählt.'
38
+ ),
39
+ recordsPerPage: 'Zeilen pro Seite',
40
+ allRows: 'Alle',
41
+ pagination: (start, end, total) => start + '-' + end + ' von ' + total,
42
+ columns: 'Spalten'
43
+ },
44
+ editor: {
45
+ url: 'URL',
46
+ bold: 'Fett',
47
+ italic: 'Kursiv',
48
+ strikethrough: 'Durchgestrichen',
49
+ underline: 'Unterstrichen',
50
+ unorderedList: 'Ungeordnete Liste',
51
+ orderedList: 'Geordnete Liste',
52
+ subscript: 'tiefgestellt',
53
+ superscript: 'hochgestellt',
54
+ hyperlink: 'Link',
55
+ toggleFullscreen: 'Vollbild umschalten',
56
+ quote: 'Zitat',
57
+ left: 'linksbündig',
58
+ center: 'zentriert',
59
+ right: 'rechtsbündig',
60
+ justify: 'Ausrichten',
61
+ print: 'Drucken',
62
+ outdent: 'ausrücken',
63
+ indent: 'einrücken',
64
+ removeFormat: 'Entferne Formatierung',
65
+ formatting: 'Formatiere',
66
+ fontSize: 'Schriftgrösse',
67
+ align: 'Ausrichten',
68
+ hr: 'Horizontale Linie einfügen',
69
+ undo: 'Rückgänging',
70
+ redo: 'Wiederherstellen',
71
+ heading1: 'Überschrift 1',
72
+ heading2: 'Überschrift 2',
73
+ heading3: 'Überschrift 3',
74
+ heading4: 'Überschrift 4',
75
+ heading5: 'Überschrift 5',
76
+ heading6: 'Überschrift 6',
77
+ paragraph: 'Absatz',
78
+ code: 'Code',
79
+ size1: 'Sehr klein',
80
+ size2: 'klein',
81
+ size3: 'Normal',
82
+ size4: 'Gross',
83
+ size5: 'Grösser',
84
+ size6: 'Sehr gross',
85
+ size7: 'Maximum',
86
+ defaultFont: 'Standard Schrift',
87
+ viewSource: 'Quelltext anzeigen'
88
+ },
89
+ tree: {
90
+ noNodes: 'Keine Knoten verfügbar',
91
+ noResults: 'Keine passenden Knoten gefunden'
92
+ }
93
+ }
package/lang/de-DE.js ADDED
@@ -0,0 +1,98 @@
1
+ /**
2
+ * DO NOT EDIT THIS FILE. It is automatically generated
3
+ * from its .mjs counterpart (same filename but with .mjs extension).
4
+ * Edit that file instead (de-DE.mjs).
5
+ */
6
+ module.exports = {
7
+ isoName: 'de-DE',
8
+ nativeName: 'Deutsch (DE)',
9
+ label: {
10
+ clear: 'Leeren',
11
+ ok: 'Ok',
12
+ cancel: 'Abbrechen',
13
+ close: 'Schließen',
14
+ set: 'Setzen',
15
+ select: 'Auswählen',
16
+ reset: 'Zurücksetzen',
17
+ remove: 'Löschen',
18
+ update: 'Aktualisieren',
19
+ create: 'Erstellen',
20
+ search: 'Suche',
21
+ filter: 'Filter',
22
+ refresh: 'Aktualisieren',
23
+ expand: label => (label ? `Erweitern Sie "${ label }"` : 'Erweitern'),
24
+ collapse: label => (label ? `"${ label }" minimieren` : 'Zusammenbruch')
25
+ },
26
+ date: {
27
+ days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
28
+ daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
29
+ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
30
+ monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
31
+ firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
32
+ format24h: true,
33
+ pluralDay: 'Tage'
34
+ },
35
+ table: {
36
+ noData: 'Keine Daten vorhanden.',
37
+ noResults: 'Keine Einträge gefunden',
38
+ loading: 'Lade...',
39
+ selectedRecords: rows => (
40
+ rows > 1
41
+ ? rows + ' ausgewählte Zeilen'
42
+ : (rows === 0 ? 'Keine' : '1') + ' ausgewählt.'
43
+ ),
44
+ recordsPerPage: 'Zeilen pro Seite',
45
+ allRows: 'Alle',
46
+ pagination: (start, end, total) => start + '-' + end + ' von ' + total,
47
+ columns: 'Spalten'
48
+ },
49
+ editor: {
50
+ url: 'URL',
51
+ bold: 'Fett',
52
+ italic: 'Kursiv',
53
+ strikethrough: 'Durchgestrichen',
54
+ underline: 'Unterstrichen',
55
+ unorderedList: 'Ungeordnete Liste',
56
+ orderedList: 'Geordnete Liste',
57
+ subscript: 'tiefgestellt',
58
+ superscript: 'hochgestellt',
59
+ hyperlink: 'Link',
60
+ toggleFullscreen: 'Vollbild umschalten',
61
+ quote: 'Zitat',
62
+ left: 'linksbündig',
63
+ center: 'zentriert',
64
+ right: 'rechtsbündig',
65
+ justify: 'Ausrichten',
66
+ print: 'Drucken',
67
+ outdent: 'ausrücken',
68
+ indent: 'einrücken',
69
+ removeFormat: 'Entferne Formatierung',
70
+ formatting: 'Formatiere',
71
+ fontSize: 'Schriftgröße',
72
+ align: 'Ausrichten',
73
+ hr: 'Horizontale Linie einfügen',
74
+ undo: 'Rückgänging',
75
+ redo: 'Wiederherstellen',
76
+ heading1: 'Überschrift 1',
77
+ heading2: 'Überschrift 2',
78
+ heading3: 'Überschrift 3',
79
+ heading4: 'Überschrift 4',
80
+ heading5: 'Überschrift 5',
81
+ heading6: 'Überschrift 6',
82
+ paragraph: 'Absatz',
83
+ code: 'Code',
84
+ size1: 'Sehr klein',
85
+ size2: 'klein',
86
+ size3: 'Normal',
87
+ size4: 'Groß',
88
+ size5: 'Größer',
89
+ size6: 'Sehr groß',
90
+ size7: 'Maximum',
91
+ defaultFont: 'Standard Schrift',
92
+ viewSource: 'Quelltext anzeigen'
93
+ },
94
+ tree: {
95
+ noNodes: 'Keine Knoten verfügbar',
96
+ noResults: 'Keine passenden Knoten gefunden'
97
+ }
98
+ }
package/lang/de-DE.mjs ADDED
@@ -0,0 +1,93 @@
1
+ export default {
2
+ isoName: 'de-DE',
3
+ nativeName: 'Deutsch (DE)',
4
+ label: {
5
+ clear: 'Leeren',
6
+ ok: 'Ok',
7
+ cancel: 'Abbrechen',
8
+ close: 'Schließen',
9
+ set: 'Setzen',
10
+ select: 'Auswählen',
11
+ reset: 'Zurücksetzen',
12
+ remove: 'Löschen',
13
+ update: 'Aktualisieren',
14
+ create: 'Erstellen',
15
+ search: 'Suche',
16
+ filter: 'Filter',
17
+ refresh: 'Aktualisieren',
18
+ expand: label => (label ? `Erweitern Sie "${ label }"` : 'Erweitern'),
19
+ collapse: label => (label ? `"${ label }" minimieren` : 'Zusammenbruch')
20
+ },
21
+ date: {
22
+ days: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
23
+ daysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
24
+ months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
25
+ monthsShort: 'Jan_Feb_Mar_Apr_Mai_Jun_Jul_Aug_Sep_Okt_Nov_Dez'.split('_'),
26
+ firstDayOfWeek: 1, // 0-6, 0 - Sunday, 1 Monday, ...
27
+ format24h: true,
28
+ pluralDay: 'Tage'
29
+ },
30
+ table: {
31
+ noData: 'Keine Daten vorhanden.',
32
+ noResults: 'Keine Einträge gefunden',
33
+ loading: 'Lade...',
34
+ selectedRecords: rows => (
35
+ rows > 1
36
+ ? rows + ' ausgewählte Zeilen'
37
+ : (rows === 0 ? 'Keine' : '1') + ' ausgewählt.'
38
+ ),
39
+ recordsPerPage: 'Zeilen pro Seite',
40
+ allRows: 'Alle',
41
+ pagination: (start, end, total) => start + '-' + end + ' von ' + total,
42
+ columns: 'Spalten'
43
+ },
44
+ editor: {
45
+ url: 'URL',
46
+ bold: 'Fett',
47
+ italic: 'Kursiv',
48
+ strikethrough: 'Durchgestrichen',
49
+ underline: 'Unterstrichen',
50
+ unorderedList: 'Ungeordnete Liste',
51
+ orderedList: 'Geordnete Liste',
52
+ subscript: 'tiefgestellt',
53
+ superscript: 'hochgestellt',
54
+ hyperlink: 'Link',
55
+ toggleFullscreen: 'Vollbild umschalten',
56
+ quote: 'Zitat',
57
+ left: 'linksbündig',
58
+ center: 'zentriert',
59
+ right: 'rechtsbündig',
60
+ justify: 'Ausrichten',
61
+ print: 'Drucken',
62
+ outdent: 'ausrücken',
63
+ indent: 'einrücken',
64
+ removeFormat: 'Entferne Formatierung',
65
+ formatting: 'Formatiere',
66
+ fontSize: 'Schriftgröße',
67
+ align: 'Ausrichten',
68
+ hr: 'Horizontale Linie einfügen',
69
+ undo: 'Rückgänging',
70
+ redo: 'Wiederherstellen',
71
+ heading1: 'Überschrift 1',
72
+ heading2: 'Überschrift 2',
73
+ heading3: 'Überschrift 3',
74
+ heading4: 'Überschrift 4',
75
+ heading5: 'Überschrift 5',
76
+ heading6: 'Überschrift 6',
77
+ paragraph: 'Absatz',
78
+ code: 'Code',
79
+ size1: 'Sehr klein',
80
+ size2: 'klein',
81
+ size3: 'Normal',
82
+ size4: 'Groß',
83
+ size5: 'Größer',
84
+ size6: 'Sehr groß',
85
+ size7: 'Maximum',
86
+ defaultFont: 'Standard Schrift',
87
+ viewSource: 'Quelltext anzeigen'
88
+ },
89
+ tree: {
90
+ noNodes: 'Keine Knoten verfügbar',
91
+ noResults: 'Keine passenden Knoten gefunden'
92
+ }
93
+ }
package/lang/index.json CHANGED
@@ -31,6 +31,14 @@
31
31
  "isoName": "da",
32
32
  "nativeName": "Dansk"
33
33
  },
34
+ {
35
+ "isoName": "de-CH",
36
+ "nativeName": "Deutsch (CH)"
37
+ },
38
+ {
39
+ "isoName": "de-DE",
40
+ "nativeName": "Deutsch (DE)"
41
+ },
34
42
  {
35
43
  "isoName": "de",
36
44
  "nativeName": "Deutsch"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quasar",
3
- "version": "2.12.7",
3
+ "version": "2.13.0",
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",
@@ -73,7 +73,7 @@
73
73
  "devDependencies": {
74
74
  "@quasar/app-vite": "^2.0.0-alpha.0",
75
75
  "@quasar/extras": "^1.16.4",
76
- "@quasar/quasar-app-extension-testing-e2e-cypress": "^5.2.0-alpha.1",
76
+ "@quasar/quasar-app-extension-testing-e2e-cypress": "^5.2.0-alpha.2",
77
77
  "@rollup/plugin-node-resolve": "^11.2.1",
78
78
  "@rollup/plugin-replace": "^2.3.3",
79
79
  "autoprefixer": "^10.4.13",
@@ -81,7 +81,7 @@
81
81
  "cli-highlight": "^2.1.11",
82
82
  "cross-env": "^7.0.3",
83
83
  "cssnano": "^5.1.14",
84
- "cypress": "^12.13.0",
84
+ "cypress": "^13.2.0",
85
85
  "cypress-json-results": "^1.2.1",
86
86
  "diff": "^5.1.0",
87
87
  "eslint": "^8.41.0",
@@ -96,6 +96,7 @@
96
96
  "eslint-plugin-vue": "^9.14.1",
97
97
  "fast-glob": "^3.3.0",
98
98
  "module-alias": "^2.2.2",
99
+ "open": "^9.1.0",
99
100
  "postcss-rtlcss": "^4.0.6",
100
101
  "prettier": "^2.8.3",
101
102
  "recast": "^0.18.5",
@@ -0,0 +1,156 @@
1
+ import QField from '../QField'
2
+ import { vModelAdapter } from '@quasar/quasar-app-extension-testing-e2e-cypress'
3
+ import { ref } from 'vue'
4
+ import Icons from '../../../../icon-set/material-icons.mjs'
5
+
6
+ function getHostElement () {
7
+ return cy.get('.q-field')
8
+ }
9
+
10
+ function mountQField (options) {
11
+ return cy.mount(QField, options)
12
+ }
13
+
14
+ describe('Field API', () => {
15
+ describe('Props', () => {
16
+ describe('Category: model', () => {
17
+ describe('(prop): maxlength', () => {
18
+ it.skip(' ', () => {
19
+ // It is tricky to test this since it will require that we setup a control slot with v-model.
20
+ // This is already tested in QInput and others using use-field composable, so are not not testing it.
21
+ })
22
+ })
23
+ })
24
+ })
25
+
26
+ describe('Slots', () => {
27
+ describe('(slot): control', () => {
28
+ it('should use control slot as content of the field', () => {
29
+ const controlSlot = 'Hello there'
30
+ mountQField({
31
+ slots: {
32
+ control: () => controlSlot
33
+ }
34
+ })
35
+
36
+ getHostElement().get('.q-field__control-container').should('contain', controlSlot)
37
+ })
38
+ })
39
+ })
40
+
41
+ describe('Events', () => {
42
+ describe('(event): update:model-value', () => {
43
+ it('should emit onUpdate:modelValue event', () => {
44
+ const model = ref('text')
45
+ const fn = cy.stub()
46
+ mountQField({
47
+ props: {
48
+ ...vModelAdapter(model),
49
+ 'onUpdate:modelValue': fn,
50
+ clearable: true
51
+ }
52
+ })
53
+
54
+ getHostElement().get('button[type="button"]')
55
+ .contains(Icons.field.clear).click()
56
+ .then(() => {
57
+ expect(fn).to.be.calledWith()
58
+ })
59
+ })
60
+ })
61
+
62
+ describe('(event): focus', () => {
63
+ it('should emit the focus event', () => {
64
+ const fn = cy.stub()
65
+
66
+ mountQField({
67
+ props: {
68
+ onfocus: fn
69
+ },
70
+ slots: {
71
+ control: 'text'
72
+ }
73
+ })
74
+
75
+ getHostElement().click()
76
+
77
+ getHostElement().then(() => {
78
+ expect(fn).to.be.calledWith()
79
+ })
80
+ })
81
+ })
82
+
83
+ describe('(event): blur', () => {
84
+ it('should emit blur event', () => {
85
+ const fn = cy.stub()
86
+ mountQField({
87
+ props: {
88
+ onblur: fn
89
+ },
90
+ slots: {
91
+ control: 'text'
92
+ }
93
+ })
94
+
95
+ getHostElement()
96
+ .click()
97
+
98
+ getHostElement().then(() => {
99
+ Cypress.vueWrapper.vm.blur()
100
+ })
101
+
102
+ getHostElement()
103
+ .then(() => {
104
+ expect(fn).to.be.calledWith()
105
+ })
106
+ })
107
+ })
108
+ })
109
+
110
+ describe('Methods', () => {
111
+ describe('(method): focus', () => {
112
+ it('should focus the component', () => {
113
+ mountQField({
114
+ slots: {
115
+ control: 'text'
116
+ }
117
+ })
118
+
119
+ getHostElement()
120
+ .get('.q-field--focused')
121
+ .should('not.exist')
122
+
123
+ getHostElement()
124
+ .then(() => {
125
+ Cypress.vueWrapper.vm.focus()
126
+ })
127
+ getHostElement()
128
+ .get('.q-field--focused')
129
+ .should('exist')
130
+ })
131
+ })
132
+
133
+ describe('(method): blur', () => {
134
+ it('should blur the component', () => {
135
+ mountQField({
136
+ slots: {
137
+ control: 'text'
138
+ }
139
+ })
140
+
141
+ getHostElement().click()
142
+
143
+ getHostElement()
144
+ .get('.q-field--focused')
145
+ .should('exist')
146
+
147
+ getHostElement()
148
+ .then(() => {
149
+ Cypress.vueWrapper.vm.blur()
150
+ })
151
+
152
+ cy.get('.q-field--focused').should('not.exist')
153
+ })
154
+ })
155
+ })
156
+ })