@simsustech/quasar-components 0.11.9 → 0.11.11

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 (75) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/LocaleSelect.vue_vue_type_script_setup_true_lang-Du4fNbTV.js +573 -0
  3. package/dist/authentication.js +218 -106
  4. package/dist/form.js +164 -305
  5. package/dist/general.js +51 -95
  6. package/dist/md3.js +435 -0
  7. package/dist/{nl-BTgHOvpQ.js → nl-BJwNz421.js} +70 -0
  8. package/dist/{nl-jHKPHlmh.js → nl-CneFq5NZ.js} +4 -0
  9. package/dist/nl-NLgZUAKl.js +6 -0
  10. package/dist/types/ui/authentication/AccountsTable.vue.d.ts +5 -0
  11. package/dist/types/ui/authentication/ConsentList.vue.d.ts +3 -0
  12. package/dist/types/ui/authentication/EmailChangeForm.vue.d.ts +2 -2
  13. package/dist/types/ui/authentication/LoginButton.vue.d.ts +1 -1
  14. package/dist/types/ui/authentication/LoginForm.vue.d.ts +6 -2
  15. package/dist/types/ui/authentication/LogoutButton.vue.d.ts +12 -0
  16. package/dist/types/ui/authentication/LogoutForm.vue.d.ts +18 -0
  17. package/dist/types/ui/authentication/PasswordChangeForm.vue.d.ts +10 -2
  18. package/dist/types/ui/authentication/RegisterForm.vue.d.ts +10 -2
  19. package/dist/types/ui/authentication/RequestOtpForm.vue.d.ts +2 -2
  20. package/dist/types/ui/authentication/UserMenuButton.vue.d.ts +4 -1
  21. package/dist/types/ui/authentication/index.d.ts +2 -0
  22. package/dist/types/ui/authentication/lang/index.d.ts +12 -0
  23. package/dist/types/ui/form/DateInput.vue.d.ts +19 -1
  24. package/dist/types/ui/form/FormInput.vue.d.ts +2 -15
  25. package/dist/types/ui/form/FormItem.vue.d.ts +2 -19
  26. package/dist/types/ui/form/LocaleSelect.vue.d.ts +6 -4
  27. package/dist/types/ui/form/lang/index.d.ts +1131 -0
  28. package/dist/types/ui/general/QDrawerList.vue.d.ts +2 -7
  29. package/dist/types/ui/general/QLanguageSelect.vue.d.ts +7 -4
  30. package/dist/types/ui/general/QStyledCard.vue.d.ts +9 -5
  31. package/dist/types/ui/general/QStyledLayout.vue.d.ts +1 -1
  32. package/dist/types/ui/general/QSubmitButton.vue.d.ts +1 -1
  33. package/dist/types/ui/general/ResourcePage.vue.d.ts +17 -5
  34. package/dist/types/ui/general/ResponsiveDialog.vue.d.ts +9 -4
  35. package/dist/types/ui/md3/Md3Layout.vue.d.ts +31 -0
  36. package/dist/types/ui/md3/NavigationRailFabs.vue.d.ts +14 -0
  37. package/dist/types/ui/md3/index.d.ts +3 -0
  38. package/dist/types/ui/md3/lang/en-US.d.ts +3 -0
  39. package/dist/types/ui/md3/lang/index.d.ts +12 -0
  40. package/dist/types/ui/md3/lang/nl.d.ts +3 -0
  41. package/package.json +21 -14
  42. package/src/ui/authentication/AccountsTable.vue +18 -9
  43. package/src/ui/authentication/ConsentList.vue +13 -18
  44. package/src/ui/authentication/LoginForm.vue +12 -3
  45. package/src/ui/authentication/LogoutButton.vue +31 -0
  46. package/src/ui/authentication/LogoutForm.vue +49 -0
  47. package/src/ui/authentication/PasswordChangeForm.vue +11 -3
  48. package/src/ui/authentication/RegisterForm.vue +11 -3
  49. package/src/ui/authentication/UserMenuButton.vue +9 -3
  50. package/src/ui/authentication/index.ts +2 -0
  51. package/src/ui/authentication/lang/en-US.ts +4 -0
  52. package/src/ui/authentication/lang/index.ts +4 -0
  53. package/src/ui/authentication/lang/nl.ts +4 -0
  54. package/src/ui/form/DateInput.vue +53 -26
  55. package/src/ui/form/LocaleSelect.vue +29 -43
  56. package/src/ui/form/lang/en-US.ts +377 -0
  57. package/src/ui/form/lang/index.ts +377 -0
  58. package/src/ui/form/lang/nl.ts +377 -0
  59. package/src/ui/general/QLanguageSelect.vue +30 -105
  60. package/src/ui/general/QLanguageSelectBtn.vue.bak +99 -0
  61. package/src/ui/general/QStyledCard.vue +2 -2
  62. package/src/ui/general/ResourcePage.vue +13 -5
  63. package/src/ui/general/ResponsiveDialog.vue +23 -6
  64. package/src/ui/general/index.ts +1 -0
  65. package/src/ui/md3/Md3Layout.vue +139 -0
  66. package/src/ui/md3/NavigationRailFabs.vue +68 -0
  67. package/src/ui/md3/index.ts +3 -0
  68. package/src/ui/md3/lang/en-US.ts +7 -0
  69. package/src/ui/md3/lang/index.ts +41 -0
  70. package/src/ui/md3/lang/nl.ts +7 -0
  71. package/vite.config.ts +4 -73
  72. package/dist/flags.js +0 -255
  73. package/dist/icons.js +0 -25
  74. package/dist/index-DnmJt2wP.js +0 -7921
  75. package/dist/nl-BL9hHEHL.js +0 -76
@@ -71,6 +71,383 @@ const lang: Language = {
71
71
  validations: {
72
72
  invalidCron: 'Cron regel is ongeldig.'
73
73
  }
74
+ },
75
+ countries: {
76
+ 'ar-TN': 'العربية (تونس)',
77
+ ar: 'العربية',
78
+ 'az-Latn': 'Azerbaijan',
79
+ bg: 'български език',
80
+ bn: 'বাংলা',
81
+ ca: 'Català',
82
+ cs: 'Čeština',
83
+ da: 'Denemarken',
84
+ de: 'Duitsland',
85
+ el: 'ελληνικά',
86
+ 'en-GB': 'Verenigd koninkrijk',
87
+ 'en-US': 'Verenigde staten van Amerika',
88
+ eo: 'Esperanto',
89
+ es: 'Spanje',
90
+ et: 'Eesti',
91
+ eu: 'Euskara',
92
+ 'fa-IR': 'فارسی',
93
+ fa: 'فارسی',
94
+ fi: 'Suomi',
95
+ fr: 'Frankrijk',
96
+ gn: "Avañe'ẽ",
97
+ he: 'עברית',
98
+ hr: 'Hrvatski jezik',
99
+ hu: 'Magyar',
100
+ id: 'Bahasa Indonesia',
101
+ is: 'Íslenska',
102
+ it: 'Italië',
103
+ ja: 'Japan',
104
+ km: 'ខ្មែរ',
105
+ 'ko-KR': '한국어',
106
+ 'kur-CKB': 'کوردی سۆرانی',
107
+ kz: 'Қазақша',
108
+ lt: 'Lithuanian',
109
+ lu: 'Kiluba',
110
+ lv: 'Latviešu valoda',
111
+ ml: 'മലയാളം',
112
+ mm: 'မြန်မာ(ဗမာ)',
113
+ ms: 'Bahasa Melayu',
114
+ my: 'Malaysia',
115
+ 'nb-NO': 'Norsk',
116
+ nl: 'Nederland',
117
+ pl: 'Polen',
118
+ 'pt-BR': 'Portugal',
119
+ pt: 'Portugal',
120
+ ro: 'Roemenië',
121
+ ru: 'Rusland',
122
+ sk: 'Slovenčina',
123
+ sl: 'Slovenski Jezik',
124
+ sm: "Fa'asāmoa",
125
+ 'sr-CYR': 'српски језик',
126
+ sr: 'srpski jezik',
127
+ sv: 'Zweden',
128
+ ta: 'தமிழ்',
129
+ th: 'ไทย',
130
+ tr: 'Turkijke',
131
+ ug: 'ئۇيغۇرچە',
132
+ uk: 'Українська',
133
+ 'uz-Cyrl': 'Ўзбекча (Кирил)',
134
+ 'uz-Latn': "O'zbekcha (Lotin)",
135
+ vi: 'Vietnam',
136
+ 'zh-CN': '中文(简体)',
137
+ 'zh-TW': '中文(繁體)',
138
+ AF: 'Afghanistan',
139
+ AX: 'Åland',
140
+ AL: 'Albanië',
141
+ DZ: 'Algerije',
142
+ VI: 'Amerikaanse Maagdeneilanden',
143
+ AS: 'Amerikaans-Samoa',
144
+ AD: 'Andorra',
145
+ AO: 'Angola',
146
+ AI: 'Anguilla',
147
+ AQ: 'Antarctica',
148
+ AG: 'Antigua en Barbuda',
149
+ AR: 'Argentinië',
150
+ AM: 'Armenië',
151
+ AW: 'Aruba',
152
+ AU: 'Australië',
153
+ AZ: 'Azerbeidzjan',
154
+ BS: "Bahama's",
155
+ BH: 'Bahrein',
156
+ BD: 'Bangladesh',
157
+ BB: 'Barbados',
158
+ BE: 'België',
159
+ BZ: 'Belize',
160
+ BJ: 'Benin',
161
+ BM: 'Bermuda',
162
+ BT: 'Bhutan',
163
+ BO: 'Bolivia',
164
+ BA: 'Bosnië en Herzegovina',
165
+ BW: 'Botswana',
166
+ BV: 'Bouvet',
167
+ BR: 'Brazilië',
168
+ VG: 'Britse Maagdeneilanden',
169
+ IO: 'Brits Indische Oceaanterritorium',
170
+ BN: 'Brunei',
171
+ BG: 'Bulgarije',
172
+ BF: 'Burkina Faso',
173
+ BI: 'Burundi',
174
+ KH: 'Cambodja',
175
+ CA: 'Canada',
176
+ BQ: 'Caribisch Nederland',
177
+ CF: 'Centraal-Afrikaanse Republiek',
178
+ CL: 'Chili',
179
+ CN: 'China',
180
+ CX: 'Christmaseiland',
181
+ CC: 'Cocoseilanden',
182
+ CO: 'Colombia',
183
+ KM: 'Comoren',
184
+ CG: 'Congo-Brazzaville',
185
+ CD: 'Congo-Kinshasa',
186
+ CK: 'Cookeilanden',
187
+ CR: 'Costa Rica',
188
+ CU: 'Cuba',
189
+ CW: 'Curaçao',
190
+ CY: 'Cyprus',
191
+ DK: 'Denemarken',
192
+ DJ: 'Djibouti',
193
+ DM: 'Dominica',
194
+ DO: 'Dominicaanse Republiek',
195
+ DE: 'Duitsland',
196
+ EC: 'Ecuador',
197
+ EG: 'Egypte',
198
+ SV: 'El Salvador',
199
+ GQ: 'Equatoriaal-Guinea',
200
+ ER: 'Eritrea',
201
+ EE: 'Estland',
202
+ ET: 'Ethiopië',
203
+ FO: 'Faeröer',
204
+ FK: 'Falklandeilanden',
205
+ FJ: 'Fiji',
206
+ PH: 'Filipijnen',
207
+ FI: 'Finland',
208
+ FR: 'Frankrijk',
209
+ TF: 'Franse Zuidelijke Gebieden',
210
+ GF: 'Frans-Guyana',
211
+ PF: 'Frans-Polynesië',
212
+ GA: 'Gabon',
213
+ GM: 'Gambia',
214
+ GE: 'Georgië',
215
+ GH: 'Ghana',
216
+ GI: 'Gibraltar',
217
+ GD: 'Grenada',
218
+ GR: 'Griekenland',
219
+ GL: 'Groenland',
220
+ GP: 'Guadeloupe',
221
+ GU: 'Guam',
222
+ GT: 'Guatemala',
223
+ GG: 'Guernsey',
224
+ GN: 'Guinee',
225
+ GW: 'Guinee-Bissau',
226
+ GY: 'Guyana',
227
+ HT: 'Haïti',
228
+ HM: 'Heard en McDonaldeilanden',
229
+ HN: 'Honduras',
230
+ HU: 'Hongarije',
231
+ HK: 'Hongkong',
232
+ IE: 'Ierland',
233
+ IS: 'IJsland',
234
+ IN: 'India',
235
+ ID: 'Indonesië',
236
+ IQ: 'Irak',
237
+ IR: 'Iran',
238
+ IL: 'Israël',
239
+ IT: 'Italië',
240
+ CI: 'Ivoorkust',
241
+ JM: 'Jamaica',
242
+ JP: 'Japan',
243
+ YE: 'Jemen',
244
+ JE: 'Jersey',
245
+ JO: 'Jordanië',
246
+ KY: 'Kaaimaneilanden',
247
+ CV: 'Kaapverdië',
248
+ CM: 'Kameroen',
249
+ KZ: 'Kazachstan',
250
+ KE: 'Kenia',
251
+ KG: 'Kirgizië',
252
+ KI: 'Kiribati',
253
+ UM: 'Kleine afgelegen eilanden van de Verenigde Staten',
254
+ KW: 'Koeweit',
255
+ HR: 'Kroatië',
256
+ LA: 'Laos',
257
+ LS: 'Lesotho',
258
+ LV: 'Letland',
259
+ LB: 'Libanon',
260
+ LR: 'Liberia',
261
+ LY: 'Libië',
262
+ LI: 'Liechtenstein',
263
+ LT: 'Litouwen',
264
+ LU: 'Luxemburg',
265
+ MO: 'Macau',
266
+ MG: 'Madagaskar',
267
+ MW: 'Malawi',
268
+ MV: 'Malediven',
269
+ MY: 'Maleisië',
270
+ ML: 'Mali',
271
+ MT: 'Malta',
272
+ IM: 'Man',
273
+ MA: 'Marokko',
274
+ MH: 'Marshalleilanden',
275
+ MQ: 'Martinique',
276
+ MR: 'Mauritanië',
277
+ MU: 'Mauritius',
278
+ YT: 'Mayotte',
279
+ MX: 'Mexico',
280
+ FM: 'Micronesië',
281
+ MD: 'Moldavië',
282
+ MC: 'Monaco',
283
+ MN: 'Mongolië',
284
+ ME: 'Montenegro',
285
+ MS: 'Montserrat',
286
+ MZ: 'Mozambique',
287
+ MM: 'Myanmar',
288
+ NA: 'Namibië',
289
+ NR: 'Nauru',
290
+ NL: 'Nederland',
291
+ NP: 'Nepal',
292
+ NI: 'Nicaragua',
293
+ NC: 'Nieuw-Caledonië',
294
+ NZ: 'Nieuw-Zeeland',
295
+ NE: 'Niger',
296
+ NG: 'Nigeria',
297
+ NU: 'Niue',
298
+ MP: 'Noordelijke Marianen',
299
+ KP: 'Noord-Korea',
300
+ MK: 'Noord-Macedonië',
301
+ NO: 'Noorwegen',
302
+ NF: 'Norfolk',
303
+ UG: 'Oeganda',
304
+ UA: 'Oekraïne',
305
+ UZ: 'Oezbekistan',
306
+ OM: 'Oman',
307
+ AT: 'Oostenrijk',
308
+ TL: 'Oost-Timor',
309
+ PK: 'Pakistan',
310
+ PW: 'Palau',
311
+ PS: 'Palestina',
312
+ PA: 'Panama',
313
+ PG: 'Papoea-Nieuw-Guinea',
314
+ PY: 'Paraguay',
315
+ PE: 'Peru',
316
+ PN: 'Pitcairneilanden',
317
+ PL: 'Polen',
318
+ PT: 'Portugal',
319
+ PR: 'Puerto Rico',
320
+ QA: 'Qatar',
321
+ RE: 'Réunion',
322
+ RO: 'Roemenië',
323
+ RU: 'Rusland',
324
+ RW: 'Rwanda',
325
+ BL: 'Saint-Barthélemy',
326
+ KN: 'Saint Kitts en Nevis',
327
+ LC: 'Saint Lucia',
328
+ PM: 'Saint-Pierre en Miquelon',
329
+ VC: 'Saint Vincent en de Grenadines',
330
+ SB: 'Salomonseilanden',
331
+ WS: 'Samoa',
332
+ SM: 'San Marino',
333
+ SA: 'Saoedi-Arabië',
334
+ ST: 'Sao Tomé en Principe',
335
+ SN: 'Senegal',
336
+ RS: 'Servië',
337
+ SC: 'Seychellen',
338
+ SL: 'Sierra Leone',
339
+ SG: 'Singapore',
340
+ SH: 'Sint-Helena, Ascension en Tristan da Cunha',
341
+ MF: 'Saint-Martin',
342
+ SX: 'Sint Maarten',
343
+ SI: 'Slovenië',
344
+ SK: 'Slowakije',
345
+ SD: 'Soedan',
346
+ SO: 'Somalië',
347
+ ES: 'Spanje',
348
+ SJ: 'Spitsbergen en Jan Mayen',
349
+ LK: 'Sri Lanka',
350
+ SR: 'Suriname',
351
+ SZ: 'Swaziland',
352
+ SY: 'Syrië',
353
+ TJ: 'Tadzjikistan',
354
+ TW: 'Taiwan',
355
+ TZ: 'Tanzania',
356
+ TH: 'Thailand',
357
+ TG: 'Togo',
358
+ TK: 'Tokelau',
359
+ TO: 'Tonga',
360
+ TT: 'Trinidad en Tobago',
361
+ TD: 'Tsjaad',
362
+ CZ: 'Tsjechië',
363
+ TN: 'Tunesië',
364
+ TR: 'Turkije',
365
+ TM: 'Turkmenistan',
366
+ TC: 'Turks- en Caicoseilanden',
367
+ TV: 'Tuvalu',
368
+ UY: 'Uruguay',
369
+ VU: 'Vanuatu',
370
+ VA: 'Vaticaanstad',
371
+ VE: 'Venezuela',
372
+ AE: 'Verenigde Arabische Emiraten',
373
+ US: 'Verenigde Staten',
374
+ GB: 'Verenigd Koninkrijk',
375
+ VN: 'Vietnam',
376
+ WF: 'Wallis en Futuna',
377
+ EH: 'Westelijke Sahara/SADR',
378
+ BY: 'Wit-Rusland',
379
+ ZM: 'Zambia',
380
+ ZW: 'Zimbabwe',
381
+ ZA: 'Zuid-Afrika',
382
+ GS: 'Zuid-Georgia en de Zuidelijke Sandwicheilanden',
383
+ KR: 'Zuid-Korea',
384
+ SS: 'Zuid-Soedan',
385
+ SE: 'Zweden',
386
+ CH: 'Zwitserland'
387
+ },
388
+ languages: {
389
+ 'ar-TN': 'العربية (تونس)',
390
+ ar: 'العربية',
391
+ 'az-Latn': 'Azerbaijani (latin)',
392
+ bg: 'български език',
393
+ bn: 'বাংলা',
394
+ ca: 'Català',
395
+ cs: 'Čeština',
396
+ da: 'Dansk',
397
+ de: 'Deutsch',
398
+ el: 'ελληνικά',
399
+ 'en-GB': 'Emgels (UK)',
400
+ 'en-US': 'Engels (US)',
401
+ eo: 'Esperanto',
402
+ es: 'Español',
403
+ et: 'Eesti',
404
+ eu: 'Euskara',
405
+ 'fa-IR': 'فارسی',
406
+ fa: 'فارسی',
407
+ fi: 'Suomi',
408
+ fr: 'Français',
409
+ gn: "Avañe'ẽ",
410
+ he: 'עברית',
411
+ hr: 'Hrvatski jezik',
412
+ hu: 'Magyar',
413
+ id: 'Bahasa Indonesia',
414
+ is: 'Íslenska',
415
+ it: 'Italiano',
416
+ ja: '日本語 (にほんご)',
417
+ km: 'ខ្មែរ',
418
+ 'ko-KR': '한국어',
419
+ 'kur-CKB': 'کوردی سۆرانی',
420
+ kz: 'Қазақша',
421
+ lt: 'Lithuanian',
422
+ lu: 'Kiluba',
423
+ lv: 'Latviešu valoda',
424
+ ml: 'മലയാളം',
425
+ mm: 'မြန်မာ(ဗမာ)',
426
+ ms: 'Bahasa Melayu',
427
+ my: 'Malaysia',
428
+ 'nb-NO': 'Norsk',
429
+ nl: 'Nederlands',
430
+ pl: 'Polski',
431
+ 'pt-BR': 'Português (BR)',
432
+ pt: 'Português',
433
+ ro: 'Română',
434
+ ru: 'русский',
435
+ sk: 'Slovenčina',
436
+ sl: 'Slovenski Jezik',
437
+ sm: "Fa'asāmoa",
438
+ 'sr-CYR': 'српски језик',
439
+ sr: 'srpski jezik',
440
+ sv: 'Svenska',
441
+ ta: 'தமிழ்',
442
+ th: 'ไทย',
443
+ tr: 'Türkçe',
444
+ ug: 'ئۇيغۇرچە',
445
+ uk: 'Українська',
446
+ 'uz-Cyrl': 'Ўзбекча (Кирил)',
447
+ 'uz-Latn': "O'zbekcha (Lotin)",
448
+ vi: 'Tiếng Việt',
449
+ 'zh-CN': '中文(简体)',
450
+ 'zh-TW': '中文(繁體)'
74
451
  }
75
452
  }
76
453
 
@@ -1,118 +1,43 @@
1
1
  <template>
2
- <q-select
3
- v-bind="attrs"
4
- :options="languageOptions"
2
+ <locale-select
5
3
  :model-value="modelValue"
6
- emit-value
7
- map-options
8
- >
9
- <template #selected>
10
- <div v-if="modelValue">
11
- <component
12
- :is="flags[modelValue.slice(-2).toLowerCase() as keyof typeof flags]"
13
- />
14
- </div>
15
- </template>
16
- <template #option="scope">
17
- <q-item v-bind="scope.itemProps">
18
- <q-item-section avatar>
19
- <component
20
- :is="
21
- flags[
22
- scope.opt.value.slice(-2).toLowerCase() as keyof typeof flags
23
- ]
24
- "
25
- />
26
- </q-item-section>
27
- <q-item-section>
28
- <q-item-label>
29
- {{ scope.opt.label }}
30
- </q-item-label>
31
- </q-item-section>
32
- </q-item>
33
- <!-- <q-item v-if="scope.opt.value === 'en-US'" v-bind="scope.itemProps">
34
- <q-item-section avatar>
35
- <en-us ref="enUsRef" />
36
- </q-item-section>
37
- <q-item-section>
38
- <q-item-label>
39
- {{ enUsLanguage }}
40
- </q-item-label>
41
- </q-item-section>
42
- </q-item>
43
- <q-item v-if="scope.opt.value === 'nl'" v-bind="scope.itemProps">
44
- <q-item-section avatar>
45
- <nl ref="nlRef" />
46
- </q-item-section>
47
- <q-item-section>
48
- <q-item-label>
49
- {{ nlLanguage }}
50
- </q-item-label>
51
- </q-item-section>
52
- </q-item> -->
53
- </template>
54
- </q-select>
4
+ :locales="locales"
5
+ @update:model-value="(val) => $emit('update:model-value', val)"
6
+ />
55
7
  </template>
56
8
 
57
9
  <script setup lang="ts">
58
- import { useAttrs, computed, watch } from 'vue'
59
- import { useQuasar, QSelect, QuasarLanguage } from 'quasar'
60
- import * as flags from '../flags/index.js'
61
- import { useLang as useFlagsLang } from '../flags/lang/index.js'
10
+ import { watch, toRefs } from 'vue'
11
+ import { useQuasar, QuasarLanguage } from 'quasar'
12
+ import LocaleSelect from '../form/LocaleSelect.vue'
13
+ import type { Language as FormLanguage } from '../form/lang/index.js'
62
14
 
63
15
  export interface Props {
64
- modelValue: string
65
- languageImports: Record<string, () => Promise<{ default: QuasarLanguage }>>
66
- allowedCodes?: [keyof ReturnType<typeof useFlagsLang>['value']['languages']]
16
+ modelValue: keyof FormLanguage['countries']
17
+ languageImports: Record<
18
+ keyof FormLanguage['countries'],
19
+ () => Promise<{ default: QuasarLanguage }>
20
+ >
21
+ locales: {
22
+ icon: string
23
+ isoName: keyof FormLanguage['languages']
24
+ }[]
67
25
  }
68
- const {
69
- modelValue,
70
- allowedCodes = ['en-US', 'nl'],
71
- languageImports
72
- } = defineProps<Props>()
26
+ const props = defineProps<Props>()
27
+ const { modelValue, languageImports, locales } = toRefs(props)
28
+
73
29
  const $q = useQuasar()
74
- const attrs = useAttrs()
75
- const flagsLang = useFlagsLang()
76
30
 
77
- const languageOptions = computed(() => {
78
- const options = []
79
- for (let lang of Object.keys(flagsLang.value.languages) as Array<
80
- keyof (typeof flagsLang.value)['languages']
81
- >) {
82
- if (!allowedCodes.length || allowedCodes.includes(lang)) {
83
- options.push({
84
- label: flagsLang.value.languages[lang],
85
- value: lang
86
- })
87
- }
31
+ watch(modelValue, (langIso) => {
32
+ try {
33
+ languageImports.value[langIso]().then(
34
+ // langList[`../../../node_modules/quasar/lang/${langIso}.mjs`]().then(
35
+ (lang) => {
36
+ $q.lang.set(lang.default)
37
+ }
38
+ )
39
+ } catch (e) {
40
+ console.error(e)
88
41
  }
89
- return options
90
42
  })
91
-
92
- // const languageOptions = [
93
- // {
94
- // label: enUsLanguage.value,
95
- // value: 'en-US'
96
- // },
97
- // {
98
- // label: nlLanguage.value,
99
- // value: 'nl'
100
- // }
101
- // ]
102
-
103
- watch(
104
- () => modelValue,
105
- (langIso: string) => {
106
- try {
107
- languageImports[langIso]().then(
108
- // langList[`../../../node_modules/quasar/lang/${langIso}.mjs`]().then(
109
- (lang) => {
110
- $q.lang.set(lang.default)
111
- }
112
- )
113
- } catch (e) {
114
- console.error(e)
115
- }
116
- }
117
- )
118
43
  </script>
@@ -0,0 +1,99 @@
1
+ <template>
2
+ <q-btn flat>
3
+ <div v-if="modelValue">
4
+ <component
5
+ :is="flags[modelValue.slice(-2).toLowerCase() as keyof typeof flags]"
6
+ />
7
+ </div>
8
+
9
+ <q-menu>
10
+ <q-list>
11
+ <q-item
12
+ v-for="option in languageOptions"
13
+ :key="option.value"
14
+ v-close-popup
15
+ clickable
16
+ @click="$emit('update:model-value', option.value)"
17
+ >
18
+ <q-item-section avatar>
19
+ <component
20
+ :is="
21
+ flags[
22
+ option.value.slice(-2).toLowerCase() as keyof typeof flags
23
+ ]
24
+ "
25
+ />
26
+ </q-item-section>
27
+ <q-item-section>
28
+ <q-item-label>
29
+ {{ option.label }}
30
+ </q-item-label>
31
+ </q-item-section>
32
+ </q-item>
33
+ </q-list>
34
+ </q-menu>
35
+ </q-btn>
36
+ </template>
37
+
38
+ <script setup lang="ts">
39
+ import { computed, watch } from 'vue'
40
+ import { useQuasar, QuasarLanguage } from 'quasar'
41
+ import * as flags from '../flags/index.js'
42
+ import { useLang as useFlagsLang } from '../flags/lang/index.js'
43
+
44
+ export interface Props {
45
+ modelValue: string
46
+ languageImports: Record<string, () => Promise<{ default: QuasarLanguage }>>
47
+ allowedCodes?: [keyof ReturnType<typeof useFlagsLang>['value']['languages']]
48
+ }
49
+ const {
50
+ modelValue,
51
+ allowedCodes = ['en-US', 'nl'],
52
+ languageImports
53
+ } = defineProps<Props>()
54
+ const $q = useQuasar()
55
+
56
+ const flagsLang = useFlagsLang()
57
+
58
+ const languageOptions = computed(() => {
59
+ const options = []
60
+ for (let lang of Object.keys(flagsLang.value.languages) as Array<
61
+ keyof (typeof flagsLang.value)['languages']
62
+ >) {
63
+ if (!allowedCodes.length || allowedCodes.includes(lang)) {
64
+ options.push({
65
+ label: flagsLang.value.languages[lang],
66
+ value: lang
67
+ })
68
+ }
69
+ }
70
+ return options
71
+ })
72
+
73
+ // const languageOptions = [
74
+ // {
75
+ // label: enUsLanguage.value,
76
+ // value: 'en-US'
77
+ // },
78
+ // {
79
+ // label: nlLanguage.value,
80
+ // value: 'nl'
81
+ // }
82
+ // ]
83
+
84
+ watch(
85
+ () => modelValue,
86
+ (langIso: string) => {
87
+ try {
88
+ languageImports[langIso]().then(
89
+ // langList[`../../../node_modules/quasar/lang/${langIso}.mjs`]().then(
90
+ (lang) => {
91
+ $q.lang.set(lang.default)
92
+ }
93
+ )
94
+ } catch (e) {
95
+ console.error(e)
96
+ }
97
+ }
98
+ )
99
+ </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <q-card ref="qCardRef">
2
+ <q-card ref="qCardRef" style="max-width: 300px">
3
3
  <slot name="image" />
4
4
 
5
5
  <q-card-section>
@@ -58,4 +58,4 @@ defineExpose({
58
58
  })
59
59
  </script>
60
60
 
61
- <style lang="sass" scoped></style>
61
+ <style scoped></style>
@@ -18,7 +18,7 @@
18
18
  round
19
19
  size="lg"
20
20
  dense
21
- icon="add"
21
+ :icon="icons.add"
22
22
  class="q-mr-sm bg-primary text-white"
23
23
  @click="create"
24
24
  />
@@ -30,7 +30,7 @@
30
30
  round
31
31
  size="lg"
32
32
  dense
33
- icon="edit"
33
+ :icon="icons.edit"
34
34
  class="q-mr-sm bg-primary text-white"
35
35
  @click="update"
36
36
  />
@@ -44,7 +44,7 @@
44
44
  v-if="type === 'create'"
45
45
  :disable="disabled"
46
46
  :label="lang.add"
47
- icon="add"
47
+ :icon="icons.add"
48
48
  outline
49
49
  @click="create"
50
50
  />
@@ -52,7 +52,7 @@
52
52
  v-else-if="type === 'update'"
53
53
  :disable="disabled"
54
54
  :label="lang.edit"
55
- icon="edit"
55
+ :icon="icons.edit"
56
56
  outline
57
57
  @click="update"
58
58
  />
@@ -80,12 +80,20 @@ export interface Props {
80
80
  disabled?: boolean
81
81
  topBarFab?: boolean
82
82
  topBarShrink?: boolean
83
+ icons?: {
84
+ add: string
85
+ edit: string
86
+ }
83
87
  }
84
88
  const props = withDefaults(defineProps<Props>(), {
85
89
  type: undefined,
86
90
  disabled: false,
87
91
  topBarFab: false,
88
- topBarShrink: true
92
+ topBarShrink: true,
93
+ icons: () => ({
94
+ add: 'add',
95
+ edit: 'edit'
96
+ })
89
97
  })
90
98
 
91
99
  const emit = defineEmits<{