@live-change/user-frontend 0.9.32 → 0.9.34

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 (54) hide show
  1. package/front/locales/en.json +3 -1
  2. package/front/src/App.vue +32 -1
  3. package/front/src/Index.vue +3 -3
  4. package/front/src/NavBar.vue +8 -8
  5. package/front/src/SettingsTabs.vue +1 -1
  6. package/front/src/config.js +19 -0
  7. package/front/src/connected/ConnectEmail.vue +13 -10
  8. package/front/src/connected/ConnectFinished.vue +4 -4
  9. package/front/src/connected/ConnectPhone.vue +13 -9
  10. package/front/src/connected/Connected.vue +13 -13
  11. package/front/src/delete/Delete.vue +5 -5
  12. package/front/src/delete/DeleteFeedbackSent.vue +4 -4
  13. package/front/src/delete/DeleteFinished.vue +6 -6
  14. package/front/src/google-access/GoogleAccess.vue +4 -4
  15. package/front/src/google-access/GoogleAccessGained.vue +6 -6
  16. package/front/src/identification/IdentificationSettings.vue +17 -14
  17. package/front/src/identification/UserIdentification.vue +8 -8
  18. package/front/src/locale/LocaleSettings.vue +9 -7
  19. package/front/src/message-auth/MessageLink.vue +12 -12
  20. package/front/src/message-auth/MessageSent.vue +20 -17
  21. package/front/src/message-auth/email/ConnectEmail.vue +1 -1
  22. package/front/src/message-auth/email/ResetPasswordEmail.vue +1 -1
  23. package/front/src/message-auth/email/SignInEmail.vue +1 -1
  24. package/front/src/message-auth/email/SignUpEmail.vue +1 -1
  25. package/front/src/nav/UserIcon.vue +11 -12
  26. package/front/src/nav/UserMenu.vue +20 -15
  27. package/front/src/notifications/NotificationButtons.vue +3 -3
  28. package/front/src/notifications/NotificationListPage.vue +2 -2
  29. package/front/src/notifications/NotificationsIcon.vue +12 -10
  30. package/front/src/notifications/NotificationsList.vue +4 -4
  31. package/front/src/notifications/NotificationsSettings.vue +4 -4
  32. package/front/src/notifications/SimpleNotification.vue +3 -3
  33. package/front/src/password/ChangePassword.vue +19 -14
  34. package/front/src/password/ChangePasswordFinished.vue +4 -4
  35. package/front/src/password/Password.vue +406 -449
  36. package/front/src/password/ResetPassword.vue +11 -8
  37. package/front/src/password/ResetPasswordFinished.vue +4 -4
  38. package/front/src/password/ResetPasswordForm.vue +22 -19
  39. package/front/src/phone/CountryInput.vue +13 -15
  40. package/front/src/phone/PhoneInput.vue +3 -3
  41. package/front/src/settings/Settings.vue +5 -5
  42. package/front/src/settings/SettingsIndex.vue +4 -4
  43. package/front/src/settings/SettingsMenu.vue +10 -10
  44. package/front/src/sign/GoogleAuth.vue +4 -4
  45. package/front/src/sign/GoogleAuthReturn.vue +4 -4
  46. package/front/src/sign/LinkedinAuth.vue +4 -4
  47. package/front/src/sign/LinkedinAuthReturn.vue +4 -4
  48. package/front/src/sign/SignInEmail.vue +22 -21
  49. package/front/src/sign/SignInFinished.vue +6 -6
  50. package/front/src/sign/SignOut.vue +5 -5
  51. package/front/src/sign/SignOutFinished.vue +4 -4
  52. package/front/src/sign/SignUpEmail.vue +14 -13
  53. package/front/src/sign/SignUpFinished.vue +19 -16
  54. package/package.json +26 -26
@@ -3,7 +3,9 @@
3
3
  "emailTaken": "Email is already registered, try to sign-in.",
4
4
  "phoneTaken": "Phone is already registered, try to sign-in.",
5
5
  "codeNotFound": "Secret code not recognized.",
6
- "codeExpired": "Secret code expired."
6
+ "codeExpired": "Secret code expired.",
7
+ "wrongPassword": "Wrong password.",
8
+ "emailNotFound": "Email not found."
7
9
  },
8
10
  "app": {
9
11
  "updateAvailable": "Update available!",
package/front/src/App.vue CHANGED
@@ -7,7 +7,6 @@
7
7
  </template>
8
8
 
9
9
  <script setup>
10
- import 'primevue/resources/themes/lara-light-blue/theme.css'
11
10
 
12
11
  import { useLocale } from '@live-change/vue3-components'
13
12
  const locale = useLocale()
@@ -48,3 +47,35 @@
48
47
  api.validators.password = passwordValidator
49
48
 
50
49
  </script>
50
+
51
+ <style>
52
+ @import "tailwindcss";
53
+ @plugin "tailwindcss-primeui";
54
+
55
+ @custom-variant dark (&:where(.app-dark-mode, .app-dark-mode *));
56
+
57
+ :root { font-family: 'Verdana', sans-serif; }
58
+ @supports (font-variation-settings: normal) {
59
+ :root { font-family: 'Verdana var', sans-serif; }
60
+ }
61
+ html,body
62
+ {
63
+ min-height:100%;
64
+ font-family: 'Verdana var', 'Verdana', sans-serif;
65
+ }
66
+
67
+ @layer base {
68
+ a {
69
+ color: var(--p-blue-700);
70
+ text-decoration: underline;
71
+ }
72
+ a:hover {
73
+ color: var(--p-blue-900);
74
+ text-decoration: none;
75
+ }
76
+ a:visited {
77
+ color: var(--p-purple-800);
78
+ }
79
+ }
80
+
81
+ </style>
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9">
3
- <div class="surface-card border-round shadow-2 p-4">
4
- <div class="text-900 font-medium mb-3 text-xl">Test Index</div>
2
+ <div class="w-full lg:w-6/12 md:w-9/12">
3
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
+ <div class="text-surface-900 dark:text-surface-0 text-red-500 font-medium mb-4 text-xl">Test Index</div>
5
5
  <div>
6
6
  <Button @click="testNotification" label="Add test notification" />
7
7
  </div>
@@ -1,12 +1,12 @@
1
1
  <template>
2
- <div class="surface-overlay py-3 px-6 shadow-2 flex align-items-center justify-content-between
2
+ <div class="bg-surface-0 dark:bg-surface-900 py-1 px-6 shadow flex items-center justify-content-between
3
3
  relative md:sticky top-0 z-5"
4
4
  style="min-height: 80px" key="navbar">
5
5
 
6
6
  <router-link :to="{ name: 'index' }" class="no-underline text-gray-700 text-2xl font-medium">
7
- <div class="flex align-items-center">
8
- <img src="/images/logo.svg" class="w-3rem mr-4">
9
- <span>
7
+ <div class="flex items-center">
8
+ <img src="/images/logo.svg" class="w-12 mr-6">
9
+ <span class="text-surface-700 dark:text-surface-400">
10
10
  User
11
11
  </span>
12
12
  </div>
@@ -14,7 +14,7 @@
14
14
 
15
15
  <div class="align-items-center flex-grow-1 justify-content-between hidden lg:block absolute lg:static w-full
16
16
  surface-overlay left-0 top-100 z-1 shadow-2 lg:shadow-none top-menu">
17
- <!-- <ul class="list-none p-0 m-0 flex lg:align-items-center select-none flex-column lg:flex-row-reverse">
17
+ <!-- <ul class="list-none p-0 m-0 flex lg:items-center select-none flex-col lg:flex-row-reverse">
18
18
  <li>
19
19
  <router-link :to="{ name: 'xml:search' }" v-ripple
20
20
  class="flex px-6 p-3 lg:px-3 lg:py-2 align-items-center text-600 hover:text-900
@@ -36,14 +36,14 @@
36
36
  </ul>-->
37
37
  </div>
38
38
 
39
- <div class="flex flex-grow-1"></div>
39
+ <div class="flex grow"></div>
40
40
 
41
41
  <NotificationsIcon />
42
42
 
43
43
  <UserIcon />
44
44
 
45
- <a v-ripple class="cursor-pointer block lg:hidden text-700 p-ripple ml-2 hover:surface-100 p-2"
46
- v-styleclass="{ selector: '.top-menu', enterClass: 'hidden', leaveToClass: 'hidden', hideOnOutsideClick: true }">
45
+ <a v-ripple class="cursor-pointer block lg:hidden text-surface-700 dark:text-surface-100 p-ripple ml-2 hover:bg-surface-100 dark:hover:bg-surface-700 p-2"
46
+ v-styleclass="{ selector: '.top-menu', enterFromClass: 'hidden', leaveToClass: 'hidden', hideOnOutsideClick: true }">
47
47
  <i class="pi pi-bars text-4xl"></i>
48
48
  </a>
49
49
 
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <ul class="surface-card p-0 m-0 list-none flex overflow-x-auto select-none">
2
+ <ul class="bg-surface-0 dark:bg-surface-900 p-0 m-0 list-none flex overflow-x-auto select-none">
3
3
  <li v-for="tab in tabs">
4
4
  <router-link v-ripple :to="{ name: tab.route }"
5
5
  class="cursor-pointer px-4 py-3 flex align-items-center border-bottom-2 hover:border-500
@@ -3,8 +3,27 @@ import deepmerge from 'deepmerge';
3
3
  import * as en from "../locales/en.js"
4
4
  import { locales as autoFormLocales } from "@live-change/frontend-auto-form"
5
5
 
6
+ import Aura from '@primevue/themes/aura'
7
+
6
8
  export default {
7
9
  defaultLocale: 'en',
10
+
11
+ primeVue: {
12
+ theme: {
13
+ preset: Aura,
14
+ options: {
15
+ prefix: 'p',
16
+ darkModeSelector: '.app-dark-mode, .app-dark-mode *',
17
+ //cssLayer: false
18
+ cssLayer: {
19
+ name: "primevue",
20
+ order: "base, primevue",
21
+ },
22
+ }
23
+ },
24
+ ripple: true
25
+ },
26
+
8
27
  i18n: {
9
28
  messages: {
10
29
  en: deepmerge.all([
@@ -1,27 +1,29 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card p-4 shadow-2 border-round">
4
- <div class="text-center mb-5">
5
- <div class="text-900 text-3xl font-medium mb-3">Add email</div>
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
+ <div class="text-center mb-8">
5
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Add email</div>
6
6
  </div>
7
7
 
8
8
  <command-form service="messageAuthentication" action="connectEmail" v-slot="{ data }"
9
9
  @done="handleSent" keepOnDone>
10
10
 
11
- <div class="p-field mb-3">
12
- <label for="email" class="block text-900 font-medium mb-2">
11
+ <div class="p-field mb-4">
12
+ <label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
13
13
  Email address
14
14
  </label>
15
15
  <InputText id="email" type="text" class="w-full"
16
- aria-describedby="email-help" :class="{ 'p-invalid': data.emailError}"
16
+ aria-describedby="email-help" :invalid="!!data.emailError"
17
17
  v-model="data.email" />
18
- <small v-if="data.emailError" id="email-help" class="p-error">{{ t(`errors.${data.emailError}`) }}</small>
18
+ <Message v-if="data.emailError" severity="error" variant="simple" size="small">
19
+ {{ t(`errors.${data.emailError}`) }}
20
+ </Message>
19
21
  </div>
20
22
 
21
23
  <Button label="Add Email" icon="pi pi-envelope" class="w-full" type="submit" />
22
24
 
23
- <Divider align="center" class="my-4">
24
- <span class="text-600 font-normal text-sm">OR</span>
25
+ <Divider align="center" class="my-6">
26
+ <span class="text-surface-600 dark:text-surface-200 font-normal text-sm">OR</span>
25
27
  </Divider>
26
28
 
27
29
  <router-link :to="{ name: 'user:connect-phone' }">
@@ -41,6 +43,7 @@
41
43
  import Checkbox from "primevue/checkbox"
42
44
  import Button from "primevue/button"
43
45
  import Divider from "primevue/divider"
46
+ import Message from "primevue/message"
44
47
 
45
48
  import { useRouter } from 'vue-router'
46
49
  const router = useRouter()
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card border-round shadow-2 p-4">
4
- <div class="text-900 font-medium mb-4 text-xl">Account connected</div>
5
- <div class="mt-0 p-0 line-height-3">Congratulations! You have successfully connected accounts.</div>
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-6 text-xl">Account connected</div>
5
+ <div class="mt-0 p-0 leading-normal">Congratulations! You have successfully connected accounts.</div>
6
6
  </div>
7
7
  </div>
8
8
  </template>
@@ -1,27 +1,29 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card p-4 shadow-2 border-round">
4
- <div class="text-center mb-5">
5
- <div class="text-900 text-3xl font-medium mb-3">Add phone number</div>
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
+ <div class="text-center mb-8">
5
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Add phone number</div>
6
6
  </div>
7
7
 
8
8
  <command-form service="messageAuthentication" action="connectPhone" v-slot="{ data }"
9
9
  @done="handleSent" keepOnDone>
10
10
 
11
- <div class="p-field mb-3">
12
- <label for="email" class="block text-900 font-medium mb-2">
11
+ <div class="p-field mb-4">
12
+ <label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
13
13
  Phone number
14
14
  </label>
15
15
  <PhoneInput id="phone" class="w-full"
16
16
  aria-describedby="phone-help" :class="{ 'p-invalid': data.phoneError }"
17
17
  v-model="data.phone" />
18
- <small v-if="data.phoneError" id="phone-help" class="p-error">{{ t(`errors.${data.phoneError}`) }}</small>
18
+ <Message v-if="data.phoneError" severity="error" variant="simple" size="small">
19
+ {{ t(`errors.${data.phoneError}`) }}
20
+ </Message>
19
21
  </div>
20
22
 
21
23
  <Button label="Add Phone" icon="pi pi-mobile" class="w-full" type="submit" />
22
24
 
23
- <Divider align="center" class="my-4">
24
- <span class="text-600 font-normal text-sm">OR</span>
25
+ <Divider align="center" class="my-6">
26
+ <span class="text-surface-600 dark:text-surface-200 font-normal text-sm">OR</span>
25
27
  </Divider>
26
28
 
27
29
  <router-link :to="{ name: 'user:connect-email' }">
@@ -41,6 +43,8 @@
41
43
  import Checkbox from "primevue/checkbox"
42
44
  import Button from "primevue/button"
43
45
  import Divider from "primevue/divider"
46
+ import Message from "primevue/message"
47
+
44
48
  import PhoneInput from "../phone/PhoneInput.vue"
45
49
 
46
50
  import { useI18n } from 'vue-i18n'
@@ -1,39 +1,39 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9">
2
+ <div class="w-full lg:w-6/12 md:w-9/12">
3
3
 
4
4
  <ConfirmPopup v-if="isMounted" />
5
5
  <Toast v-if="isMounted" />
6
6
 
7
- <div class="surface-card border-round shadow-2 p-4">
8
- <div class="text-900 font-medium mb-3 text-xl">Connected accounts</div>
7
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
8
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Connected accounts</div>
9
9
 
10
- <ul class="list-none p-0 m-0 mt-5 mb-4">
10
+ <ul class="list-none p-0 m-0 mt-8 mb-6">
11
11
 
12
12
  <li v-for="contact in contacts"
13
- class="flex flex-row align-items-center justify-content-between mb-2">
14
- <div class="flex flex-row align-items-center">
13
+ class="flex flex-row items-center justify-between mb-2">
14
+ <div class="flex flex-row items-center">
15
15
  <i v-if="contact.contactType.contactType === 'email'" class="pi pi-envelope mr-2"></i>
16
16
  <i v-if="contact.contactType.contactType === 'phone'" class="pi pi-mobile mr-2"></i>
17
17
  <span v-if="contact.contactType.contactType === 'phone'"
18
- class="block text-900 font-medium text-lg">{{ formatPhoneNumber(contact.id) }}</span>
18
+ class="block text-surface-900 dark:text-surface-0 font-medium text-lg">{{ formatPhoneNumber(contact.id) }}</span>
19
19
  <span v-else
20
- class="block text-900 font-medium text-lg">{{ contact.id }}</span>
20
+ class="block text-surface-900 dark:text-surface-0 font-medium text-lg">{{ contact.id }}</span>
21
21
  </div>
22
22
  <Button class="p-button-text p-button-plain p-button-rounded mr-1" icon="pi pi-times"
23
23
  v-if="canDelete"
24
24
  @click="event => disconnectContact(event, contact)" />
25
25
  </li>
26
26
  <li v-for="account in accounts"
27
- class="flex flex-row align-items-center justify-content-between mb-2">
27
+ class="flex flex-row items-center justify-between mb-2">
28
28
  <div v-if="account.accountType.accountType === 'google'"
29
- class="flex flex-row align-items-center">
29
+ class="flex flex-row items-center">
30
30
  <i class="pi pi-google mr-2"></i>
31
- <span class="block text-900 font-medium text-lg">{{ account.email }}</span>
31
+ <span class="block text-surface-900 dark:text-surface-0 font-medium text-lg">{{ account.email }}</span>
32
32
  </div>
33
33
  <div v-else-if="account.accountType.accountType === 'linkedin'"
34
- class="flex flex-row align-items-center">
34
+ class="flex flex-row items-center">
35
35
  <i class="pi pi-linkedin mr-2"></i>
36
- <span class="block text-900 font-medium text-lg">{{ account.name }}</span>
36
+ <span class="block text-surface-900 dark:text-surface-0 font-medium text-lg">{{ account.name }}</span>
37
37
  </div>
38
38
  <pre v-else>{{ account }}</pre>
39
39
  <Button class="p-button-text p-button-plain p-button-rounded mr-1" icon="pi pi-times"
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
 
4
- <div class="surface-card p-4 shadow-2 border-round">
5
- <div class="text-center mb-5">
6
- <div class="text-900 text-3xl font-medium mb-3">Delete account</div>
4
+ <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
5
+ <div class="text-center mb-8">
6
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Delete account</div>
7
7
  </div>
8
8
 
9
9
  <div v-if="client.user">
@@ -11,7 +11,7 @@
11
11
  Account deletion is irreversible, check the box below only if you are
12
12
  100% sure that you want to delete your account.
13
13
  </p>
14
- <div class="p-field-checkbox mb-3">
14
+ <div class="p-field-checkbox mb-4">
15
15
  <Checkbox id="deleteCheckbox" v-model="wantDelete" :binary="true" />
16
16
  <label for="deleteCheckbox" class="ml-2">I want to delete my account.</label>
17
17
  </div>
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card border-round shadow-2 p-4">
4
- <div class="text-900 font-medium mb-3 text-xl mb-4">Feedback sent</div>
5
- <p class="mt-0 p-0 line-height-3">Thank you for your feedback.</p>
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Feedback sent</div>
5
+ <p class="mt-0 p-0 leading-normal">Thank you for your feedback.</p>
6
6
  </div>
7
7
  </div>
8
8
  </template>
@@ -1,16 +1,16 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card p-4 shadow-2 border-round">
4
- <div class="text-center mb-5">
5
- <div class="text-900 text-3xl font-medium mb-3">Account deleted</div>
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
+ <div class="text-center mb-8">
5
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">Account deleted</div>
6
6
  </div>
7
7
 
8
- <div class="mb-3">
8
+ <div class="mb-4">
9
9
  Account has been deleted, please leave feedback why you are leaving us.
10
10
  </div>
11
11
 
12
12
  <Textarea class="w-full" :autoResize="true" rows="4" cols="30" />
13
- <div class="flex flex-row align-items-end">
13
+ <div class="flex flex-row items-end">
14
14
  <Button label="Send" icon="pi pi-send" class="ml-auto p-button-lg"></Button>
15
15
  </div>
16
16
 
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <div v-if="additionalScopes.length > 0" class="w-full flex flex-row justify-content-center">
3
- <div class="surface-card border-round shadow-2 p-4 w-30rem">
4
- <div class="text-900 font-medium mb-3 text-xl mb-4">Google API Access</div>
2
+ <div v-if="additionalScopes.length > 0" class="w-full flex flex-row justify-center">
3
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6 w-[30rem]">
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Google API Access</div>
5
5
  <div v-if="currentAccess.length > 0">
6
- <p class="mt-0 p-0 line-height-3">
6
+ <p class="mt-0 p-0 leading-normal">
7
7
  You are currently granting us access to the following Google API features:
8
8
  </p>
9
9
  <ul>
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
- <div class="surface-card border-round shadow-2 p-4">
4
- <div class="text-900 font-medium mb-3 text-xl mb-4">Signed In</div>
5
- <p class="mt-0 p-0 line-height-3">
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
4
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl mb-6">Signed In</div>
5
+ <p class="mt-0 p-0 leading-normal">
6
6
  Congratulations! You added offline access to your account. Now your account have access to:
7
7
  <ul>
8
8
  <li v-for="access in accessList">
@@ -11,11 +11,11 @@
11
11
  </ul>
12
12
  <!-- <pre>{{ offlineAccess }}</pre>-->
13
13
  </p>
14
- <div v-if="afterGoogleAccessGained" class="flex flex-row align-items-center">
14
+ <div v-if="afterGoogleAccessGained" class="flex flex-row items-center">
15
15
  <router-link :to="afterGoogleAccessGained" class="no-underline">
16
16
  <Button label="Next" v-ripple />
17
17
  </router-link>
18
- <p class="ml-4" v-if="isMounted && redirectTime">
18
+ <p class="ml-6" v-if="isMounted && redirectTime">
19
19
  Redirect in {{ pluralize('second', Math.ceil((redirectTime - currentTime) / 1000), true) }}...
20
20
  </p>
21
21
  </div>
@@ -1,30 +1,32 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9">
3
- <div class="surface-card p-4 shadow-2 border-round">
4
- <div class="text-center mb-5">
5
- <div class="text-900 text-3xl font-medium mb-3">
2
+ <div class="w-full lg:w-6/12 md:w-9/12">
3
+ <div class="bg-surface-0 dark:bg-surface-900 p-6 shadow rounded-border">
4
+ <div class="text-center mb-8">
5
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
6
6
  Profile
7
7
  </div>
8
8
  </div>
9
9
 
10
- <div class="flex flex-wrap align-items-center justify-content-center" v-if="userData !== undefined">
11
- <div class="relative mb-3" @click="openImageEditor">
12
- <Image v-if="userData?.image" :image="userData.image" class="mr-2 border-circle profile-image"
13
- domResize width="200" height="200" />
14
- <img v-else :src="identiconUrl" class="mr-2 border-circle profile-image">
10
+ <div class="flex flex-wrap items-center justify-center" v-if="userData !== undefined">
11
+ <div class="relative mb-4" @click="openImageEditor">
12
+ <Image v-if="userData?.image" :image="userData.image" class="mr-2 rounded-full profile-image"
13
+ domResize width="200" height="200" />
14
+ <img v-else :src="identiconUrl" class="mr-2 rounded-full profile-image">
15
15
  </div>
16
16
  <command-form service="userIdentification" :action="updateMethod"
17
17
  :initialValues="{ name: userData?.name }"
18
18
  :parameters="{ image: userData?.image }" v-slot="{ data }"
19
19
  keepOnDone @done="handleNameSaved"
20
- class="ml-3 mb-3 flex flex-column">
21
- <div class="p-field flex flex-column">
20
+ class="ml-4 mb-4 flex flex-col">
21
+ <div class="p-field flex flex-col">
22
22
  <InputText type="text" v-model="data.name"
23
- :class="{ 'p-invalid': data.nameError }"
23
+ :invalid="!!data.nameError"
24
24
  class="p-inputtext-lg" placeholder="Your name" />
25
- <small v-if="data.nameError" id="currentPassword-help" class="p-error">{{ t(`errors.${data.nameError}`) }}</small>
25
+ <Message v-if="data.nameError" severity="error" variant="simple" size="small">
26
+ {{ t(`errors.${data.nameError}`) }}
27
+ </Message>
26
28
  </div>
27
- <Button type="submit" label="Save name" class="mt-3" icon="pi pi-save" />
29
+ <Button type="submit" label="Save name" class="mt-4" icon="pi pi-save" />
28
30
  </command-form>
29
31
  </div>
30
32
 
@@ -39,6 +41,7 @@
39
41
  import { useDialog } from 'primevue/usedialog'
40
42
  import InputText from 'primevue/inputtext'
41
43
  import Button from 'primevue/button'
44
+ import Message from "primevue/message"
42
45
  const dialog = useDialog()
43
46
 
44
47
  import { shallowRef, ref, inject, computed } from 'vue'
@@ -4,10 +4,10 @@
4
4
  :to="{ name: 'user:profile', params: { user: owner } }"
5
5
  v-ripple
6
6
  :class="inline ? inlineClass : blockClass">
7
- <Image v-if="userData?.image" :image="userData.image" class="mr-2 border-circle"
7
+ <Image v-if="userData?.image" :image="userData.image" class="mr-2 rounded-full"
8
8
  :style="imageStyle"/>
9
- <img v-else :src="identiconUrl" class="mr-2 border-circle" :style="imageStyle" domResize />
10
- <span class="text-overflow-ellipsis white-space-nowrap overflow-hidden"
9
+ <img v-else :src="identiconUrl" class="mr-2 rounded-full" :style="imageStyle" domResize />
10
+ <span class="text-ellipsis whitespace-nowrap overflow-hidden"
11
11
  :class="[ ownerType === 'user_User' ? 'font-medium' : 'font-italic' ]">
12
12
  {{ name }}
13
13
  </span>
@@ -15,15 +15,15 @@
15
15
  <span v-else-if="ownerType === 'email_Email'">
16
16
  <i class="pi pi-envelope mr-2 ml-1"
17
17
  style="font-size: 1.3rem; margin-right: 0.7rem !important; position: relative; top: 3px;" />
18
- <span class="text-overflow-ellipsis white-space-nowrap overflow-hidden">
18
+ <span class="text-ellipsis whitespace-nowrap overflow-hidden">
19
19
  {{ owner }}
20
20
  </span>
21
21
  </span>
22
22
  <span v-else :class="inline ? inlineClass : blockClass">
23
- <Image v-if="userData?.image" :image="userData.image" class="mr-2 border-circle"
23
+ <Image v-if="userData?.image" :image="userData.image" class="mr-2 rounded-full"
24
24
  :style="imageStyle"/>
25
- <img v-else :src="identiconUrl" class="mr-2 border-circle" :style="imageStyle" domResize />
26
- <span class="text-overflow-ellipsis white-space-nowrap overflow-hidden"
25
+ <img v-else :src="identiconUrl" class="mr-2 rounded-full" :style="imageStyle" domResize />
26
+ <span class="text-ellipsis whitespace-nowrap overflow-hidden"
27
27
  :class="[ ownerType === 'user_User' ? 'font-medium' : 'font-italic' ]">
28
28
  {{ name }}
29
29
  </span>
@@ -60,7 +60,7 @@
60
60
  })
61
61
 
62
62
  const inlineClass = ""
63
- const blockClass = "flex align-items-center cursor-pointer text-700 hover:surface-100 border-round p-ripple"
63
+ const blockClass = "flex items-center cursor-pointer text-surface-700 dark:text-surface-100 hover:bg-surface-100 dark:hover:bg-surface-700 rounded-border p-ripple"
64
64
  const inlineImageSize = '1em'
65
65
  const blockImageSize = '28px'
66
66
 
@@ -1,8 +1,8 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9">
2
+ <div class="w-full lg:w-6/12 md:w-9/12">
3
3
 
4
- <div class="surface-card border-round shadow-2 p-4">
5
- <div class="text-900 font-medium mb-3 text-xl">Locale settings</div>
4
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6">
5
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Locale settings</div>
6
6
 
7
7
  <command-form service="localeSettings" action="setOrUpdateMyLocaleSettings"
8
8
  :initialValues="{
@@ -15,8 +15,8 @@
15
15
  }"
16
16
  v-slot="{ data }" keepOnDone @done="handleSettingsUpdated">
17
17
 
18
- <div class="p-field mb-3">
19
- <label for="title" class="block text-900 font-medium mb-2">
18
+ <div class="p-field mb-4">
19
+ <label for="title" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
20
20
  Language
21
21
  </label>
22
22
  <Dropdown v-model="data.language" :options="availableLocales"
@@ -24,9 +24,9 @@
24
24
  :filter="availableLocales.length > 10"
25
25
  placeholder="Auto-detect"
26
26
  class="w-full" />
27
- <small v-if="data.languageError" id="language-help" class="p-error">
27
+ <Message v-if="data.languageError" severity="error" variant="simple" size="small">
28
28
  {{ t(`errors.${data.languageError}`) }}
29
- </small>
29
+ </Message>
30
30
  </div>
31
31
 
32
32
  <Button type="submit" label="Apply" class="mt-1" icon="pi pi-save" />
@@ -42,6 +42,8 @@
42
42
  </template>
43
43
 
44
44
  <script setup>
45
+ import Message from "primevue/message"
46
+
45
47
  import { usePath, live, useApi } from '@live-change/vue3-ssr'
46
48
  const api = useApi()
47
49
  const path = usePath()
@@ -1,24 +1,24 @@
1
1
  <template>
2
- <div class="w-full lg:w-6 md:w-9" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
2
+ <div class="w-full lg:w-6/12 md:w-9/12" v-shared-element:form="{ duration: '300ms', includeChildren: true }">
3
3
 
4
- <div class="surface-card border-round shadow-2 p-4" v-if="isUnknown">
5
- <div class="text-900 font-medium mb-3 text-xl">Unknown link</div>
6
- <p class="mt-0 mb-2 p-0 line-height-3">We can't find your secret link. Check if you copied the address correctly.</p>
4
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUnknown">
5
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Unknown link</div>
6
+ <p class="mt-0 mb-2 p-0 leading-normal">We can't find your secret link. Check if you copied the address correctly.</p>
7
7
  </div>
8
8
 
9
- <div class="surface-card border-round shadow-2 p-4" v-if="isUsed">
10
- <div class="text-900 font-medium mb-3 text-xl">Link used</div>
11
- <p class="mt-0 mb-2 p-0 line-height-3">This link was already used.</p>
9
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isUsed">
10
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link used</div>
11
+ <p class="mt-0 mb-2 p-0 leading-normal">This link was already used.</p>
12
12
  </div>
13
13
 
14
- <div class="surface-card border-round shadow-2 p-4" v-if="isExpired && !isUsed">
15
- <div class="text-900 font-medium mb-3 text-xl">Link expired</div>
16
- <p class="mt-0 mb-4 p-0 line-height-3">Your secret link already expired. To send another link click button below.</p>
14
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6" v-if="isExpired && !isUsed">
15
+ <div class="text-surface-900 dark:text-surface-0 font-medium mb-4 text-xl">Link expired</div>
16
+ <p class="mt-0 mb-6 p-0 leading-normal">Your secret link already expired. To send another link click button below.</p>
17
17
  <Button label="Resend" class="p-button-lg" @click="resend"></Button>
18
18
  </div>
19
19
 
20
- <div class="surface-card border-round shadow-2 p-4 flex justify-content-center" v-if="isReady">
21
- <ProgressSpinner class="m-3" />
20
+ <div class="bg-surface-0 dark:bg-surface-900 rounded-border shadow p-6 flex justify-center" v-if="isReady">
21
+ <ProgressSpinner class="m-4" />
22
22
  </div>
23
23
  </div>
24
24
  </template>