@live-change/user-frontend 0.9.32 → 0.9.33
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.
- package/front/locales/en.json +3 -1
- package/front/src/App.vue +32 -1
- package/front/src/Index.vue +3 -3
- package/front/src/NavBar.vue +8 -8
- package/front/src/SettingsTabs.vue +1 -1
- package/front/src/config.js +19 -0
- package/front/src/connected/ConnectEmail.vue +13 -10
- package/front/src/connected/ConnectFinished.vue +4 -4
- package/front/src/connected/ConnectPhone.vue +13 -9
- package/front/src/connected/Connected.vue +13 -13
- package/front/src/delete/Delete.vue +5 -5
- package/front/src/delete/DeleteFeedbackSent.vue +4 -4
- package/front/src/delete/DeleteFinished.vue +6 -6
- package/front/src/google-access/GoogleAccess.vue +4 -4
- package/front/src/google-access/GoogleAccessGained.vue +6 -6
- package/front/src/identification/IdentificationSettings.vue +16 -13
- package/front/src/identification/UserIdentification.vue +8 -8
- package/front/src/locale/LocaleSettings.vue +9 -7
- package/front/src/message-auth/MessageLink.vue +12 -12
- package/front/src/message-auth/MessageSent.vue +20 -17
- package/front/src/message-auth/email/ConnectEmail.vue +1 -1
- package/front/src/message-auth/email/ResetPasswordEmail.vue +1 -1
- package/front/src/message-auth/email/SignInEmail.vue +1 -1
- package/front/src/message-auth/email/SignUpEmail.vue +1 -1
- package/front/src/nav/UserIcon.vue +11 -12
- package/front/src/nav/UserMenu.vue +20 -15
- package/front/src/notifications/NotificationButtons.vue +3 -3
- package/front/src/notifications/NotificationListPage.vue +2 -2
- package/front/src/notifications/NotificationsIcon.vue +12 -10
- package/front/src/notifications/NotificationsList.vue +4 -4
- package/front/src/notifications/NotificationsSettings.vue +4 -4
- package/front/src/notifications/SimpleNotification.vue +3 -3
- package/front/src/password/ChangePassword.vue +19 -14
- package/front/src/password/ChangePasswordFinished.vue +4 -4
- package/front/src/password/Password.vue +406 -449
- package/front/src/password/ResetPassword.vue +11 -8
- package/front/src/password/ResetPasswordFinished.vue +4 -4
- package/front/src/password/ResetPasswordForm.vue +22 -19
- package/front/src/phone/CountryInput.vue +13 -15
- package/front/src/phone/PhoneInput.vue +3 -3
- package/front/src/settings/Settings.vue +5 -5
- package/front/src/settings/SettingsIndex.vue +4 -4
- package/front/src/settings/SettingsMenu.vue +10 -10
- package/front/src/sign/GoogleAuth.vue +4 -4
- package/front/src/sign/GoogleAuthReturn.vue +4 -4
- package/front/src/sign/LinkedinAuth.vue +4 -4
- package/front/src/sign/LinkedinAuthReturn.vue +4 -4
- package/front/src/sign/SignInEmail.vue +22 -21
- package/front/src/sign/SignInFinished.vue +6 -6
- package/front/src/sign/SignOut.vue +5 -5
- package/front/src/sign/SignOutFinished.vue +4 -4
- package/front/src/sign/SignUpEmail.vue +14 -13
- package/front/src/sign/SignUpFinished.vue +19 -16
- package/package.json +26 -26
package/front/locales/en.json
CHANGED
|
@@ -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>
|
package/front/src/Index.vue
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-full lg:w-6 md:w-9">
|
|
3
|
-
<div class="surface-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
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>
|
package/front/src/NavBar.vue
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="surface-
|
|
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
|
|
8
|
-
<img src="/images/logo.svg" class="w-
|
|
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:
|
|
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
|
|
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',
|
|
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-
|
|
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
|
package/front/src/config.js
CHANGED
|
@@ -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-
|
|
4
|
-
<div class="text-center mb-
|
|
5
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
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-
|
|
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" :
|
|
16
|
+
aria-describedby="email-help" :invalid="!!data.emailError"
|
|
17
17
|
v-model="data.email" />
|
|
18
|
-
<
|
|
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-
|
|
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-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
5
|
-
<div class="mt-0 p-0
|
|
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-
|
|
4
|
-
<div class="text-center mb-
|
|
5
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
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-
|
|
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
|
-
<
|
|
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-
|
|
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-
|
|
8
|
-
<div class="text-900 font-medium mb-
|
|
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-
|
|
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
|
|
14
|
-
<div class="flex flex-row
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
5
|
-
<div class="text-center mb-
|
|
6
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
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-
|
|
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-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
5
|
-
<p class="mt-0 p-0
|
|
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-
|
|
4
|
-
<div class="text-center mb-
|
|
5
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
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-
|
|
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
|
|
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-
|
|
3
|
-
<div class="surface-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
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
|
|
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-
|
|
4
|
-
<div class="text-900 font-medium mb-
|
|
5
|
-
<p class="mt-0 p-0
|
|
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
|
|
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-
|
|
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-
|
|
4
|
-
<div class="text-center mb-
|
|
5
|
-
<div class="text-900 text-3xl font-medium mb-
|
|
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
|
|
11
|
-
<div class="relative mb-
|
|
12
|
-
<Image v-if="userData?.image" :image="userData.image" class="mr-2
|
|
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
13
|
domResize width="200" height="200" />
|
|
14
|
-
<img v-else :src="identiconUrl" class="mr-2
|
|
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-
|
|
21
|
-
<div class="p-field flex flex-
|
|
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
|
-
:
|
|
23
|
+
:invalid="!!data.nameError"
|
|
24
24
|
class="p-inputtext-lg" placeholder="Your name" />
|
|
25
|
-
<
|
|
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-
|
|
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
|
|
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
|
|
10
|
-
<span class="text-
|
|
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-
|
|
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
|
|
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
|
|
26
|
-
<span class="text-
|
|
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
|
|
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-
|
|
5
|
-
<div class="text-900 font-medium mb-
|
|
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-
|
|
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
|
-
<
|
|
27
|
+
<Message v-if="data.languageError" severity="error" variant="simple" size="small">
|
|
28
28
|
{{ t(`errors.${data.languageError}`) }}
|
|
29
|
-
</
|
|
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-
|
|
5
|
-
<div class="text-900 font-medium mb-
|
|
6
|
-
<p class="mt-0 mb-2 p-0
|
|
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-
|
|
10
|
-
<div class="text-900 font-medium mb-
|
|
11
|
-
<p class="mt-0 mb-2 p-0
|
|
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-
|
|
15
|
-
<div class="text-900 font-medium mb-
|
|
16
|
-
<p class="mt-0 mb-
|
|
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-
|
|
21
|
-
<ProgressSpinner class="m-
|
|
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>
|