@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
@@ -1,12 +1,7 @@
1
- import { QList } from 'quasar';
2
- declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
3
1
  declare var __VLS_6: {};
4
- type __VLS_Slots = __VLS_PrettifyGlobal<__VLS_OmitStringIndex<typeof __VLS_ctx.$slots> & {
2
+ type __VLS_Slots = {} & {
5
3
  default?: (props: typeof __VLS_6) => any;
6
- }>;
7
- declare const __VLS_self: import("vue").DefineComponent<{}, {
8
- QList: typeof QList;
9
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
4
+ };
10
5
  declare const __VLS_component: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
11
6
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
12
7
  export default _default;
@@ -1,11 +1,14 @@
1
1
  import { QuasarLanguage } from 'quasar';
2
- import { useLang as useFlagsLang } from '../flags/lang/index.js';
2
+ import type { Language as FormLanguage } from '../form/lang/index.js';
3
3
  export interface Props {
4
- modelValue: string;
5
- languageImports: Record<string, () => Promise<{
4
+ modelValue: keyof FormLanguage['countries'];
5
+ languageImports: Record<keyof FormLanguage['countries'], () => Promise<{
6
6
  default: QuasarLanguage;
7
7
  }>>;
8
- allowedCodes?: [keyof ReturnType<typeof useFlagsLang>['value']['languages']];
8
+ locales: {
9
+ icon: string;
10
+ isoName: keyof FormLanguage['languages'];
11
+ }[];
9
12
  }
10
13
  declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
14
  export default _default;
@@ -6,11 +6,15 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {
6
6
  variables: import("vue").Ref<{}, {}>;
7
7
  functions: import("vue").Ref<{}, {}>;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
9
- image?: ((props: {}) => any) | undefined;
10
- title?: ((props: {}) => any) | undefined;
11
- subtitle?: ((props: {}) => any) | undefined;
12
- default?: ((props: {}) => any) | undefined;
13
- actions?: ((props: {}) => any) | undefined;
9
+ image?: (props: {}) => any;
10
+ } & {
11
+ title?: (props: {}) => any;
12
+ } & {
13
+ subtitle?: (props: {}) => any;
14
+ } & {
15
+ default?: (props: {}) => any;
16
+ } & {
17
+ actions?: (props: {}) => any;
14
18
  }>;
15
19
  export default _default;
16
20
  type __VLS_WithSlots<T, S> = T & {
@@ -5,7 +5,7 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {
5
5
  variables: import("vue").Ref<{}, {}>;
6
6
  functions: import("vue").Ref<{}, {}>;
7
7
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
8
- leftDrawerItems?: ((props: {}) => any) | undefined;
8
+ leftDrawerItems?: (props: {}) => any;
9
9
  }>;
10
10
  export default _default;
11
11
  type __VLS_WithSlots<T, S> = T & {
@@ -20,7 +20,7 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {},
20
20
  color: string;
21
21
  loading: boolean;
22
22
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
23
- default?: ((props: {}) => any) | undefined;
23
+ default?: (props: {}) => any;
24
24
  }>;
25
25
  export default _default;
26
26
  type __VLS_WithSlots<T, S> = T & {
@@ -3,6 +3,10 @@ export interface Props {
3
3
  disabled?: boolean;
4
4
  topBarFab?: boolean;
5
5
  topBarShrink?: boolean;
6
+ icons?: {
7
+ add: string;
8
+ edit: string;
9
+ };
6
10
  }
7
11
  declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
12
  update: (args_0: {
@@ -24,15 +28,23 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {},
24
28
  }) => any) | undefined;
25
29
  }>, {
26
30
  type: "create" | "update";
31
+ icons: {
32
+ add: string;
33
+ edit: string;
34
+ };
27
35
  disabled: boolean;
28
36
  topBarFab: boolean;
29
37
  topBarShrink: boolean;
30
38
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
31
- default?: ((props: {}) => any) | undefined;
32
- fab?: ((props: {}) => any) | undefined;
33
- header?: ((props: {}) => any) | undefined;
34
- 'top-bar-buttons'?: ((props: {}) => any) | undefined;
35
- 'header-side'?: ((props: {}) => any) | undefined;
39
+ default?: (props: {}) => any;
40
+ } & {
41
+ fab?: (props: {}) => any;
42
+ } & {
43
+ header?: (props: {}) => any;
44
+ } & {
45
+ 'top-bar-buttons'?: (props: {}) => any;
46
+ } & {
47
+ 'header-side'?: (props: {}) => any;
36
48
  }>;
37
49
  export default _default;
38
50
  type __VLS_WithSlots<T, S> = T & {
@@ -1,8 +1,10 @@
1
1
  export interface Props {
2
2
  display?: boolean;
3
3
  buttonType?: 'submit' | 'send';
4
- closeIcon?: string;
5
4
  padding?: boolean;
5
+ icons?: {
6
+ close: string;
7
+ };
6
8
  }
7
9
  declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {
8
10
  variables: import("vue").Ref<{}, {}>;
@@ -28,11 +30,14 @@ declare const _default: __VLS_WithSlots<import("vue").DefineComponent<Props, {
28
30
  done: (success?: boolean) => void;
29
31
  }) => any) | undefined;
30
32
  }>, {
33
+ icons: {
34
+ close: string;
35
+ };
31
36
  buttonType: "submit" | "send";
32
- closeIcon: string;
33
37
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
34
- title?: ((props: {}) => any) | undefined;
35
- default?: ((props: {}) => any) | undefined;
38
+ title?: (props: {}) => any;
39
+ } & {
40
+ default?: (props: {}) => any;
36
41
  }>;
37
42
  export default _default;
38
43
  type __VLS_WithSlots<T, S> = T & {
@@ -0,0 +1,31 @@
1
+ interface Props {
2
+ ready?: boolean;
3
+ }
4
+ declare var __VLS_22: {}, __VLS_44: {
5
+ showSticky: boolean;
6
+ }, __VLS_46: {}, __VLS_48: {}, __VLS_54: {}, __VLS_64: {
7
+ showSticky: boolean;
8
+ };
9
+ type __VLS_Slots = {} & {
10
+ 'header-toolbar'?: (props: typeof __VLS_22) => any;
11
+ } & {
12
+ fabs?: (props: typeof __VLS_44) => any;
13
+ } & {
14
+ 'drawer-mini-navigation'?: (props: typeof __VLS_46) => any;
15
+ } & {
16
+ drawer?: (props: typeof __VLS_48) => any;
17
+ } & {
18
+ footer?: (props: typeof __VLS_54) => any;
19
+ } & {
20
+ fabs?: (props: typeof __VLS_64) => any;
21
+ };
22
+ declare const __VLS_component: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
23
+ ready: boolean;
24
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
25
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
26
+ export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -0,0 +1,14 @@
1
+ interface Props {
2
+ type?: 'add' | 'edit';
3
+ showSticky?: boolean;
4
+ busEmits: {
5
+ add?: string;
6
+ edit?: string;
7
+ };
8
+ icons?: {
9
+ add: string;
10
+ edit: string;
11
+ };
12
+ }
13
+ declare const _default: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export { default as NavigationRailFabs } from './NavigationRailFabs.vue';
2
+ export { default as Md3Layout } from './Md3Layout.vue';
3
+ export { useLang, loadLang } from './lang/index.js';
@@ -0,0 +1,3 @@
1
+ import type { Language } from '../lang';
2
+ declare const lang: Language;
3
+ export default lang;
@@ -0,0 +1,12 @@
1
+ export interface Language {
2
+ isoName: string;
3
+ }
4
+ import type { Ref } from 'vue';
5
+ export declare const lang: Ref<{
6
+ isoName: string;
7
+ }, Language | {
8
+ isoName: string;
9
+ }>;
10
+ export declare const defineLang: (lang: Language) => Language;
11
+ export declare const useLang: () => Ref<Language>;
12
+ export declare const loadLang: (isoName: string) => Promise<void>;
@@ -0,0 +1,3 @@
1
+ import type { Language } from '../lang';
2
+ declare const lang: Language;
3
+ export default lang;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simsustech/quasar-components",
3
- "version": "0.11.9",
3
+ "version": "0.11.11",
4
4
  "author": "Stefan van Herwijnen",
5
5
  "description": "High level components for Quasar Framework",
6
6
  "license": "MIT",
@@ -32,6 +32,11 @@
32
32
  "import": "./dist/form.js",
33
33
  "src": "./src/ui/form/index.ts"
34
34
  },
35
+ "./md3": {
36
+ "types": "./dist/types/ui/md3/index.d.ts",
37
+ "import": "./dist/md3.js",
38
+ "src": "./src/ui/md3/index.ts"
39
+ },
35
40
  "./css": {
36
41
  "import": "./dist/quasar-components.css"
37
42
  },
@@ -46,37 +51,39 @@
46
51
  },
47
52
  "bugs": "https://github.com/simsusech/quasar-components/issues",
48
53
  "dependencies": {
54
+ "@vueuse/core": "^13.1.0",
49
55
  "validator": "^13.15.0"
50
56
  },
51
57
  "peerDependencies": {
52
58
  "quasar": "^2.18.1"
53
59
  },
54
60
  "devDependencies": {
55
- "@types/node": "^22.14.0",
56
- "@types/validator": "^13.12.3",
61
+ "@iconify-json/flagpack": "^1.2.2",
62
+ "@types/node": "^22.15.3",
63
+ "@types/validator": "^13.15.0",
57
64
  "@types/ws": "^8.18.1",
58
- "@typescript-eslint/eslint-plugin": "^8.29.0",
59
- "@typescript-eslint/parser": "^8.29.0",
65
+ "@typescript-eslint/eslint-plugin": "^8.31.1",
66
+ "@typescript-eslint/parser": "^8.31.1",
60
67
  "@vitejs/plugin-vue": "^5.2.3",
61
68
  "@vue/server-renderer": "^3.5.13",
62
- "eslint": "^9.24.0",
63
- "eslint-config-prettier": "^10.1.1",
69
+ "eslint": "^9.25.1",
70
+ "eslint-config-prettier": "^10.1.2",
64
71
  "eslint-plugin-prettier": "^5.2.6",
65
72
  "eslint-plugin-prettier-vue": "^5.0.0",
66
- "eslint-plugin-vue": "^10.0.0",
67
- "glob": "^11.0.1",
73
+ "eslint-plugin-vue": "^10.1.0",
74
+ "glob": "^11.0.2",
68
75
  "local-pkg": "^1.1.1",
69
76
  "prettier": "^3.5.3",
70
77
  "quasar": "^2.18.1",
71
78
  "rimraf": "^6.0.1",
72
79
  "typescript": "5.8.3",
73
- "typescript-eslint": "^8.29.0",
74
- "unplugin-vue-components": "^28.4.1",
75
- "vite": "^6.2.5",
80
+ "typescript-eslint": "^8.31.1",
81
+ "unplugin-vue-components": "^28.5.0",
82
+ "vite": "^6.3.4",
76
83
  "vue": "^3.5.13",
77
84
  "vue-eslint-parser": "^10.1.3",
78
- "vue-router": "^4.5.0",
79
- "vue-tsc": "^2.2.8"
85
+ "vue-router": "^4.5.1",
86
+ "vue-tsc": "^2.2.10"
80
87
  },
81
88
  "scripts": {
82
89
  "build:plugin": "vite build",
@@ -17,17 +17,17 @@
17
17
  </q-tr>
18
18
  </template>
19
19
  <template #top-right>
20
- <q-btn icon="search" flat>
20
+ <q-btn :icon="searchIcon" flat>
21
21
  <q-menu>
22
22
  <div class="q-pa-sm">
23
23
  <q-input v-model="name" :label="lang.account.fields.name">
24
24
  <template #append>
25
25
  <q-icon
26
26
  v-if="name"
27
- name="cancel"
28
- @click="name = ''"
29
27
  class="q-field__focusable-action"
30
28
  role="button"
29
+ :name="cancelIcon"
30
+ @click="name = ''"
31
31
  />
32
32
  </template>
33
33
  </q-input>
@@ -35,10 +35,10 @@
35
35
  <template #append>
36
36
  <q-icon
37
37
  v-if="email"
38
- name="cancel"
39
- @click="email = ''"
40
38
  class="q-field__focusable-action"
41
39
  role="button"
40
+ :name="cancelIcon"
41
+ @click="email = ''"
42
42
  />
43
43
  </template>
44
44
  </q-input>
@@ -55,10 +55,10 @@
55
55
  <template #append>
56
56
  <q-icon
57
57
  v-if="roles.length"
58
- name="cancel"
59
- @click="roles = []"
60
58
  class="q-field__focusable-action"
61
59
  role="button"
60
+ :name="cancelIcon"
61
+ @click="roles = []"
62
62
  />
63
63
  </template>
64
64
  </q-select>
@@ -72,7 +72,7 @@
72
72
  {{ col.value }}
73
73
  </q-td>
74
74
  <q-td auto-width>
75
- <q-btn size="sm" round flat icon="more_vert">
75
+ <q-btn size="sm" round flat :icon="moreVertIcon">
76
76
  <q-menu>
77
77
  <q-list>
78
78
  <q-item clickable @click="openAddRoleDialog(props.row)">
@@ -127,6 +127,11 @@ const props = defineProps<{
127
127
  pagination: Pagination
128
128
  mappedRoles: Record<string, string> // value: label
129
129
  columns?: QTableColumn[]
130
+ icons?: {
131
+ search: string
132
+ cancel: string
133
+ moreVert: string
134
+ }
130
135
  }>()
131
136
 
132
137
  const emit = defineEmits<{
@@ -136,7 +141,7 @@ const emit = defineEmits<{
136
141
  (e: 'removeRole', { id, role }: { id: number; role: string }): void
137
142
  }>()
138
143
 
139
- const { modelValue, count, mappedRoles, columns } = toRefs(props)
144
+ const { modelValue, count, mappedRoles, columns, icons } = toRefs(props)
140
145
 
141
146
  // const { useQuery } = await createUseTrpc()
142
147
  const lang = useLang()
@@ -275,4 +280,8 @@ const openRemoveRoleDialog = (account: Account) => {
275
280
  emit('removeRole', { id: account.id, role })
276
281
  })
277
282
  }
283
+
284
+ const searchIcon = icons.value?.search ?? 'search'
285
+ const cancelIcon = icons.value?.cancel ?? 'cancel'
286
+ const moreVertIcon = icons.value?.moreVert ?? 'more_vert'
278
287
  </script>
@@ -2,7 +2,7 @@
2
2
  <q-list>
3
3
  <q-item v-for="scope in scopes" :key="scope.name">
4
4
  <q-item-section avatar>
5
- <q-icon color="green" name="check" />
5
+ <q-icon color="green" :name="checkIcon" />
6
6
  </q-item-section>
7
7
  <q-item-section>
8
8
  {{ scope.name }}
@@ -10,7 +10,7 @@
10
10
  </q-item>
11
11
  <q-item v-for="claim in claims" :key="claim.name">
12
12
  <q-item-section avatar>
13
- <q-icon color="green" name="check" />
13
+ <q-icon color="green" :name="checkIcon" />
14
14
  </q-item-section>
15
15
  <q-item-section>
16
16
  {{ claim.name }}
@@ -18,7 +18,7 @@
18
18
  </q-item>
19
19
  <q-item v-for="resourceScope in resourceScopes" :key="resourceScope.name">
20
20
  <q-item-section avatar>
21
- <q-icon color="green" name="check" />
21
+ <q-icon color="green" :name="checkIcon" />
22
22
  </q-item-section>
23
23
  <q-item-section>
24
24
  {{ resourceScope.name }}
@@ -34,7 +34,7 @@ export default {
34
34
  </script>
35
35
 
36
36
  <script setup lang="ts">
37
- import { computed, ref, watch } from 'vue'
37
+ import { computed, ref, toRefs, watch } from 'vue'
38
38
  import { useQuasar } from 'quasar'
39
39
  import { useLang, loadLang } from './lang'
40
40
 
@@ -48,21 +48,14 @@ export interface Props {
48
48
  resourceScopes?: {
49
49
  name: string
50
50
  }[]
51
+ icons?: {
52
+ check: string
53
+ }
51
54
  }
52
- defineProps<Props>()
53
- // const attrs = useAttrs();
54
- // const emit = defineEmits<{
55
- // (
56
- // e: "asyncEmit",
57
- // {
58
- // value,
59
- // done,
60
- // }: {
61
- // value: string;
62
- // done: () => void;
63
- // }
64
- // ): void;
65
- // }>();
55
+ const props = defineProps<Props>()
56
+
57
+ const { icons } = toRefs(props)
58
+
66
59
  const $q = useQuasar()
67
60
  const lang = useLang()
68
61
  if (lang.value.isoName !== $q.lang.isoName) loadLang($q.lang.isoName)
@@ -74,6 +67,8 @@ const message = computed(() => lang.value.consent.message)
74
67
  const allow = computed(() => lang.value.consent.allow)
75
68
  const deny = computed(() => lang.value.consent.deny)
76
69
 
70
+ const checkIcon = icons.value?.check ?? 'check'
71
+
77
72
  const variables = ref({
78
73
  message,
79
74
  allow,
@@ -44,7 +44,7 @@
44
44
  >
45
45
  <template #append>
46
46
  <q-icon
47
- :name="showPassword ? 'visibility' : 'visibility_off'"
47
+ :name="showPassword ? visibilityIcon : visibilityOffIcon"
48
48
  class="cursor-pointer"
49
49
  @click="showPassword = !showPassword"
50
50
  />
@@ -69,7 +69,7 @@ export default {
69
69
  </script>
70
70
 
71
71
  <script setup lang="ts">
72
- import { ref, computed, watch } from 'vue'
72
+ import { ref, computed, watch, toRefs } from 'vue'
73
73
  import { useQuasar, QFormProps, QForm, QInputProps } from 'quasar'
74
74
  import { useLang, loadLang } from './lang'
75
75
  import isEmail from 'validator/es/lib/isEmail'
@@ -92,8 +92,14 @@ export interface Props {
92
92
  | 'autofocus'
93
93
  | ('label' & { style?: Partial<CSSStyleDeclaration> })
94
94
  >
95
+ icons?: {
96
+ visibility: string
97
+ visibilifyOff: string
98
+ }
95
99
  }
96
- defineProps<Props>()
100
+ const props = defineProps<Props>()
101
+ const { icons } = toRefs(props)
102
+
97
103
  // const attrs = useAttrs();
98
104
  const emit = defineEmits<{
99
105
  (
@@ -154,6 +160,9 @@ const submit: InstanceType<typeof QSubmitButton>['$props']['onSubmit'] = (
154
160
  })
155
161
  }
156
162
 
163
+ const visibilityIcon = icons.value?.visibility ?? 'visibility'
164
+ const visibilityOffIcon = icons.value?.visibilifyOff ?? 'visibility_off'
165
+
157
166
  const variables = ref({
158
167
  header,
159
168
  createAccount,
@@ -0,0 +1,31 @@
1
+ <template>
2
+ <q-submit-button>
3
+ <slot name="icon" />
4
+ {{ lang.logout.logout }}
5
+ </q-submit-button>
6
+ </template>
7
+
8
+ <script lang="ts">
9
+ export default {
10
+ name: 'LogoutButton'
11
+ }
12
+ </script>
13
+
14
+ <script setup lang="ts">
15
+ import { watch } from 'vue'
16
+ import { useQuasar } from 'quasar'
17
+ import { useLang, loadLang } from './lang/index.js'
18
+ import QSubmitButton from '../general/QSubmitButton.vue'
19
+
20
+ export interface Props {
21
+ withNetwork?: string
22
+ }
23
+ defineProps<Props>()
24
+
25
+ const $q = useQuasar()
26
+ const lang = useLang()
27
+ if (lang.value.isoName !== $q.lang.isoName) loadLang($q.lang.isoName)
28
+ watch($q.lang, (val) => {
29
+ loadLang($q.lang.isoName)
30
+ })
31
+ </script>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ {{ lang.logout.confirmation }}
3
+ <q-form
4
+ ref="formRef"
5
+ data-allow-mismatch="props"
6
+ class="q-gutter-md"
7
+ v-bind="form"
8
+ method="post"
9
+ :action="action"
10
+ >
11
+ <input type="hidden" name="xsrf" :value="xsrfSecret" />
12
+ <slot name="default" />
13
+ </q-form>
14
+ </template>
15
+
16
+ <script lang="ts">
17
+ export default {
18
+ name: 'LoginForm'
19
+ }
20
+ </script>
21
+
22
+ <script setup lang="ts">
23
+ import { ref, watch } from 'vue'
24
+ import { useQuasar, QFormProps, QForm } from 'quasar'
25
+ import { useLang, loadLang } from './lang'
26
+
27
+ export interface Props {
28
+ form?: QFormProps & Partial<HTMLFormElement> & Partial<HTMLDivElement>
29
+ action: string
30
+ xsrfSecret: string
31
+ }
32
+ defineProps<Props>()
33
+
34
+ const $q = useQuasar()
35
+ const lang = useLang()
36
+ if (lang.value.isoName !== $q.lang.isoName) loadLang($q.lang.isoName)
37
+ watch($q.lang, (val) => {
38
+ loadLang($q.lang.isoName)
39
+ })
40
+
41
+ const formRef = ref<QForm>()
42
+
43
+ const variables = ref({})
44
+ const functions = ref({})
45
+ defineExpose({
46
+ variables,
47
+ functions
48
+ })
49
+ </script>
@@ -19,7 +19,7 @@
19
19
  >
20
20
  <template #append>
21
21
  <q-icon
22
- :name="showPassword ? 'visibility' : 'visibility_off'"
22
+ :name="showPassword ? icons.visibility : icons.visibilityOff"
23
23
  class="cursor-pointer"
24
24
  @click="showPassword = !showPassword"
25
25
  />
@@ -38,7 +38,7 @@
38
38
  >
39
39
  <template #append>
40
40
  <q-icon
41
- :name="showRepeatPassword ? 'visibility' : 'visibility_off'"
41
+ :name="showRepeatPassword ? icons.visibility : icons.visibilityOff"
42
42
  class="cursor-pointer"
43
43
  @click="showRepeatPassword = !showRepeatPassword"
44
44
  />
@@ -79,11 +79,19 @@ export interface Props {
79
79
  | 'autofocus'
80
80
  | ('label' & { style?: Partial<CSSStyleDeclaration> })
81
81
  >
82
+ icons?: {
83
+ visibility: string
84
+ visibilityOff: string
85
+ }
82
86
  }
83
87
  const props = withDefaults(defineProps<Props>(), {
84
88
  minimumPasswordLength: 8,
85
89
  form: undefined,
86
- input: undefined
90
+ input: undefined,
91
+ icons: () => ({
92
+ visibility: 'visibility',
93
+ visibilityOff: 'visibility_off'
94
+ })
87
95
  })
88
96
  // const attrs = useAttrs();
89
97
  const emit = defineEmits<{
@@ -50,7 +50,7 @@
50
50
  >
51
51
  <template #append>
52
52
  <q-icon
53
- :name="showPassword ? 'visibility' : 'visibility_off'"
53
+ :name="showPassword ? icons.visibility : icons.visibilityOff"
54
54
  class="cursor-pointer"
55
55
  @click="showPassword = !showPassword"
56
56
  />
@@ -68,7 +68,7 @@
68
68
  >
69
69
  <template #append>
70
70
  <q-icon
71
- :name="showPassword ? 'visibility' : 'visibility_off'"
71
+ :name="showPassword ? icons.visibility : icons.visibilityOff"
72
72
  class="cursor-pointer"
73
73
  @click="showPassword = !showPassword"
74
74
  />
@@ -115,12 +115,20 @@ export interface Props {
115
115
  | 'autofocus'
116
116
  | ('label' & { style?: Partial<CSSStyleDeclaration> })
117
117
  >
118
+ icons?: {
119
+ visibility: string
120
+ visibilityOff: string
121
+ }
118
122
  }
119
123
  const props = withDefaults(defineProps<Props>(), {
120
124
  minimumPasswordLength: 8,
121
125
  extraFields: undefined,
122
126
  form: undefined,
123
- input: undefined
127
+ input: undefined,
128
+ icons: () => ({
129
+ visibility: 'visibility',
130
+ visibilityOff: 'visibility_off'
131
+ })
124
132
  })
125
133
  // const attrs = useAttrs();
126
134
  const emit = defineEmits<{