- {{ t('workouts.SPORT', 1) }}
+ {{ $t('workouts.SPORT', 1) }}
- {{ capitalize(t('workouts.WORKOUT', 1)) }}
+ {{ capitalize($t('workouts.WORKOUT', 1)) }}
- {{ t('workouts.DATE') }}
+ {{ $t('workouts.DATE') }}
{{
format(
@@ -64,25 +64,25 @@
|
- {{ t('workouts.DISTANCE') }}
+ {{ $t('workouts.DISTANCE') }}
{{ Number(workout.distance).toFixed(2) }} km
|
- {{ t('workouts.DURATION') }}
+ {{ $t('workouts.DURATION') }}
{{ workout.moving }}
|
- {{ t('workouts.AVE_SPEED') }}
+ {{ $t('workouts.AVE_SPEED') }}
{{ workout.ave_speed }} km/h
|
- {{ t('workouts.MAX_SPEED') }}
+ {{ $t('workouts.MAX_SPEED') }}
{{ workout.max_speed }} km/h
|
@@ -94,7 +94,7 @@
@@ -112,9 +112,8 @@
watch,
onBeforeMount,
} from 'vue'
- import { useI18n } from 'vue-i18n'
- import SportImage from '@/components/Common/SportImage/index.vue'
+ import SportImage from '@/components/Common/Images/SportImage/index.vue'
import StaticMap from '@/components/Common/StaticMap.vue'
import NoWorkouts from '@/components/Workouts/NoWorkouts.vue'
import { WORKOUTS_STORE } from '@/store/constants'
@@ -147,7 +146,6 @@
},
setup(props) {
const store = useStore()
- const { t } = useI18n()
const workouts: ComputedRef = computed(
() => store.getters[WORKOUTS_STORE.GETTERS.USER_WORKOUTS]
)
@@ -189,7 +187,6 @@
return {
moreWorkoutsExist,
- t,
workouts,
capitalize,
format,
diff --git a/fittrackee_client/src/locales/en/common.json b/fittrackee_client/src/locales/en/common.json
index ad93e543..5ca44079 100644
--- a/fittrackee_client/src/locales/en/common.json
+++ b/fittrackee_client/src/locales/en/common.json
@@ -1,5 +1,6 @@
{
"CONFIRMATION": "Confirmation",
"DAY": "day | days",
- "HOME": "Home"
+ "HOME": "Home",
+ "HERE": "here"
}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/en/user.json b/fittrackee_client/src/locales/en/user.json
index ebba0960..a1d4ff0c 100644
--- a/fittrackee_client/src/locales/en/user.json
+++ b/fittrackee_client/src/locales/en/user.json
@@ -1,12 +1,20 @@
{
"CONFIRM_ACCOUNT_DELETION": "Are you sure you want to delete your account? All data will be deleted, this cannot be undone",
"EMAIL": "Email",
+ "ENTER_EMAIL": "Enter an email address",
+ "ENTER_PASSWORD": "Enter a password",
+ "ENTER_PASSWORD_CONFIRMATION": "Confirm the password",
+ "INVALID_TOKEN": "Invalid token, please request a new password reset.",
"LANGUAGE": "Language",
"LOGIN": "Login",
"LOGOUT": "Logout",
"PASSWORD": "Password",
"PASSWORD_CONFIRM": "Confirm Password",
"PASSWORD_CONFIRMATION": "Password confirmation",
+ "PASSWORD_FORGOTTEN": "Forgot password?",
+ "PASSWORD_RESET": "Password reset",
+ "PASSWORD_SENT_EMAIL_TEXT": "Check your email. If your address is in our database, you'll received an email with a link to reset your password.",
+ "PASSWORD_UPDATED": "Your password have been updated. Click {0} to log in.",
"PROFILE": {
"BACK_TO_PROFILE": "Back to profile",
"BIO": "Bio",
@@ -36,6 +44,7 @@
},
"REGISTER": "Register",
"REGISTER_DISABLED": "Sorry, registration is disabled.",
+ "RESET_PASSWORD": "Reset your password",
"USER_PICTURE": "user picture",
"USERNAME": "Username"
}
diff --git a/fittrackee_client/src/locales/fr/common.json b/fittrackee_client/src/locales/fr/common.json
index a47e2d40..49435aea 100644
--- a/fittrackee_client/src/locales/fr/common.json
+++ b/fittrackee_client/src/locales/fr/common.json
@@ -1,5 +1,6 @@
{
"CONFIRMATION": "Confirmation",
"DAY": "jour | jours",
- "HOME": "Accueil"
+ "HOME": "Accueil",
+ "HERE": "ici"
}
\ No newline at end of file
diff --git a/fittrackee_client/src/locales/fr/user.json b/fittrackee_client/src/locales/fr/user.json
index cc8ae5bc..a07b83ae 100644
--- a/fittrackee_client/src/locales/fr/user.json
+++ b/fittrackee_client/src/locales/fr/user.json
@@ -1,12 +1,20 @@
{
"CONFIRM_ACCOUNT_DELETION": "Etes-vous sûr de vouloir supprimer votre compte ? Toutes les données seront définitivement effacés.",
"EMAIL": "Email",
+ "ENTER_EMAIL": "Saisir une adresse email",
+ "ENTER_PASSWORD": "Saisir un mot de passe",
+ "ENTER_PASSWORD_CONFIRMATION": "Confirmer le mot de passe",
+ "INVALID_TOKEN": "Jeton invalide, veullez demander une nouvelle réinitialisation de mot de passe.",
"LANGUAGE": "Langue",
"LOGIN": "Se connecter",
"LOGOUT": "Se déconnecter",
"PASSWORD": "Mot de passe",
"PASSWORD_CONFIRM": "Confirmation du mot de passe",
"PASSWORD_CONFIRMATION": "Confirmation du mot de passe",
+ "PASSWORD_FORGOTTEN": "Mot de passe oublié ?",
+ "PASSWORD_RESET": "Réinitialisation du mot de passe",
+ "PASSWORD_SENT_EMAIL_TEXT": "Vérifiez vore boite mail. Si vote adresse est dans notre base de données, vous recevrez un email avec un lien pour réinitialiser votre mot de passe.",
+ "PASSWORD_UPDATED": "Votre mot de passe a été mis à jour. Cliquez {0} pour vous connecter.",
"PROFILE": {
"BACK_TO_PROFILE": "Revenir au profil",
"BIO": "Bio",
@@ -36,6 +44,7 @@
},
"REGISTER": "S'inscrire",
"REGISTER_DISABLED": "Désolé, les inscriptions sont désactivées.",
+ "RESET_PASSWORD": "Réinitialiser votre mot de passe",
"USER_PICTURE": "photo de l'utilisateur",
"USERNAME": "Nom d'utilisateur"
}
\ No newline at end of file
diff --git a/fittrackee_client/src/router/index.ts b/fittrackee_client/src/router/index.ts
index cd6fac95..8ebb2112 100644
--- a/fittrackee_client/src/router/index.ts
+++ b/fittrackee_client/src/router/index.ts
@@ -6,6 +6,7 @@ import AddWorkout from '@/views/AddWorkout.vue'
import Dashboard from '@/views/DashBoard.vue'
import LoginOrRegister from '@/views/LoginOrRegister.vue'
import NotFoundView from '@/views/NotFoundView.vue'
+import PasswordResetView from '@/views/PasswordResetView.vue'
import ProfileView from '@/views/ProfileView.vue'
import StatisticsView from '@/views/StatisticsView.vue'
import EditWorkout from '@/views/workouts/EditWorkout.vue'
@@ -36,6 +37,30 @@ const routes: Array = [
component: ProfileView,
props: { edition: false, tab: 'PROFILE' },
},
+ {
+ path: '/password-reset/sent',
+ name: 'PasswordEmailSent',
+ component: PasswordResetView,
+ props: { action: 'request-sent' },
+ },
+ {
+ path: '/password-reset/request',
+ name: 'PasswordResetRequest',
+ component: PasswordResetView,
+ props: { action: 'reset-request' },
+ },
+ {
+ path: '/password-reset/password-updated',
+ name: 'PasswordUpdated',
+ component: PasswordResetView,
+ props: { action: 'password-updated' },
+ },
+ {
+ path: '/password-reset',
+ name: 'PasswordReset',
+ component: PasswordResetView,
+ props: { action: 'reset' },
+ },
{
path: '/profile/edit/picture',
name: 'UserPictureEdition',
@@ -100,18 +125,27 @@ const router = createRouter({
routes,
})
+const pathsWithoutAuthentication = [
+ '/login',
+ '/password-reset',
+ '/password-reset/password-updated',
+ '/password-reset/request',
+ '/password-reset/sent',
+ '/register',
+]
+
router.beforeEach((to, from, next) => {
store
.dispatch(USER_STORE.ACTIONS.CHECK_AUTH_USER)
.then(() => {
if (
store.getters[USER_STORE.GETTERS.IS_AUTHENTICATED] &&
- ['/login', '/register'].includes(to.path)
+ pathsWithoutAuthentication.includes(to.path)
) {
return next('/')
} else if (
!store.getters[USER_STORE.GETTERS.IS_AUTHENTICATED] &&
- !['/login', '/register'].includes(to.path)
+ !pathsWithoutAuthentication.includes(to.path)
) {
const path =
to.path === '/'
diff --git a/fittrackee_client/src/scss/colors.scss b/fittrackee_client/src/scss/colors.scss
index 8539d732..816c6823 100644
--- a/fittrackee_client/src/scss/colors.scss
+++ b/fittrackee_client/src/scss/colors.scss
@@ -62,4 +62,6 @@
--cell-heading-bg-color: #eeeeee;
--cell-heading-color: #696969;
+ --svg-filter: drop-shadow(10px 10px 10px var(--app-shadow-color))
+
}
\ No newline at end of file
diff --git a/fittrackee_client/src/store/modules/user/actions.ts b/fittrackee_client/src/store/modules/user/actions.ts
index 81b0e4b5..f879f739 100644
--- a/fittrackee_client/src/store/modules/user/actions.ts
+++ b/fittrackee_client/src/store/modules/user/actions.ts
@@ -16,6 +16,8 @@ import { IUserActions, IUserState } from '@/store/modules/user/types'
import {
ILoginOrRegisterData,
IUserDeletionPayload,
+ IUserPasswordPayload,
+ IUserPasswordResetPayload,
IUserPayload,
IUserPicturePayload,
IUserPreferencesPayload,
@@ -214,4 +216,36 @@ export const actions: ActionTree & IUserActions = {
context.commit(USER_STORE.MUTATIONS.UPDATE_USER_LOADING, false)
)
},
+ [USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](
+ context: ActionContext,
+ payload: IUserPasswordPayload
+ ): void {
+ context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
+ api
+ .post('auth/password/reset-request', payload)
+ .then((res) => {
+ if (res.data.status === 'success') {
+ router.push('/password-reset/sent')
+ } else {
+ handleError(context, null)
+ }
+ })
+ .catch((error) => handleError(context, error))
+ },
+ [USER_STORE.ACTIONS.RESET_USER_PASSWORD](
+ context: ActionContext,
+ payload: IUserPasswordResetPayload
+ ): void {
+ context.commit(ROOT_STORE.MUTATIONS.EMPTY_ERROR_MESSAGES)
+ api
+ .post('auth/password/update', payload)
+ .then((res) => {
+ if (res.data.status === 'success') {
+ router.push('/password-reset/password-updated')
+ } else {
+ handleError(context, null)
+ }
+ })
+ .catch((error) => handleError(context, error))
+ },
}
diff --git a/fittrackee_client/src/store/modules/user/enums.ts b/fittrackee_client/src/store/modules/user/enums.ts
index 27e1a335..93076112 100644
--- a/fittrackee_client/src/store/modules/user/enums.ts
+++ b/fittrackee_client/src/store/modules/user/enums.ts
@@ -5,6 +5,8 @@ export enum UserActions {
GET_USER_PROFILE = 'GET_USER_PROFILE',
LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',
LOGOUT = 'LOGOUT',
+ SEND_PASSWORD_RESET_REQUEST = 'SEND_PASSWORD_RESET_REQUEST',
+ RESET_USER_PASSWORD = 'RESET_USER_PASSWORD',
UPDATE_USER_PICTURE = 'UPDATE_USER_PICTURE',
UPDATE_USER_PROFILE = 'UPDATE_USER_PROFILE',
UPDATE_USER_PREFERENCES = 'UPDATE_USER_PREFERENCES',
diff --git a/fittrackee_client/src/store/modules/user/types.ts b/fittrackee_client/src/store/modules/user/types.ts
index 97f5da51..168ead28 100644
--- a/fittrackee_client/src/store/modules/user/types.ts
+++ b/fittrackee_client/src/store/modules/user/types.ts
@@ -11,6 +11,8 @@ import {
IAuthUserProfile,
ILoginOrRegisterData,
IUserDeletionPayload,
+ IUserPasswordPayload,
+ IUserPasswordResetPayload,
IUserPayload,
IUserPicturePayload,
IUserPreferencesPayload,
@@ -55,6 +57,16 @@ export interface IUserActions {
payload: IUserPicturePayload
): void
+ [USER_STORE.ACTIONS.SEND_PASSWORD_RESET_REQUEST](
+ context: ActionContext,
+ payload: IUserPasswordPayload
+ ): void
+
+ [USER_STORE.ACTIONS.RESET_USER_PASSWORD](
+ context: ActionContext,
+ payload: IUserPasswordResetPayload
+ ): void
+
[USER_STORE.ACTIONS.DELETE_ACCOUNT](
context: ActionContext,
payload: IUserDeletionPayload
diff --git a/fittrackee_client/src/types/user.ts b/fittrackee_client/src/types/user.ts
index 1e6fd697..83e0f790 100644
--- a/fittrackee_client/src/types/user.ts
+++ b/fittrackee_client/src/types/user.ts
@@ -42,6 +42,16 @@ export interface IUserPicturePayload {
picture: File
}
+export interface IUserPasswordPayload {
+ email: string
+}
+
+export interface IUserPasswordResetPayload {
+ password: string
+ password_conf: string
+ token: string
+}
+
export interface IUserDeletionPayload {
username: string
}
diff --git a/fittrackee_client/src/views/LoginOrRegister.vue b/fittrackee_client/src/views/LoginOrRegister.vue
index d02a2714..02304877 100644
--- a/fittrackee_client/src/views/LoginOrRegister.vue
+++ b/fittrackee_client/src/views/LoginOrRegister.vue
@@ -15,7 +15,7 @@
import { defineComponent } from 'vue'
import BikePic from '@/components/BikePic.vue'
- import LoginOrRegisterForm from '@/components/User/LoginOrRegisterForm.vue'
+ import LoginOrRegisterForm from '@/components/User/UserAuthForm.vue'
export default defineComponent({
name: 'NavBar',
diff --git a/fittrackee_client/src/views/PasswordResetView.vue b/fittrackee_client/src/views/PasswordResetView.vue
new file mode 100644
index 00000000..86de4863
--- /dev/null
+++ b/fittrackee_client/src/views/PasswordResetView.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
diff --git a/fittrackee_client/src/views/workouts/WorkoutsView.vue b/fittrackee_client/src/views/workouts/WorkoutsView.vue
index ed11fc3d..dd7e21f4 100644
--- a/fittrackee_client/src/views/workouts/WorkoutsView.vue
+++ b/fittrackee_client/src/views/workouts/WorkoutsView.vue
@@ -11,7 +11,7 @@
aria-hidden="true"
/>
- {{ t(`workouts.${hiddenFilters ? 'DISPLAY' : 'HIDE'}_FILTERS`) }}
+ {{ $t(`workouts.${hiddenFilters ? 'DISPLAY' : 'HIDE'}_FILTERS`) }}
@@ -71,7 +71,6 @@
authUser,
hiddenFilters,
params,
- t,
translatedSports,
toggleFilters,
updateParams,
diff --git a/fittrackee_client/yarn.lock b/fittrackee_client/yarn.lock
index ea1b69f8..aa3b1be6 100644
--- a/fittrackee_client/yarn.lock
+++ b/fittrackee_client/yarn.lock
@@ -976,6 +976,18 @@
"@intlify/shared" "9.1.7"
"@intlify/vue-devtools" "9.1.7"
+"@intlify/core-base@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.1.9.tgz#e4e8c951010728e4af3a0d13d74cf3f9e7add7f6"
+ integrity sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==
+ dependencies:
+ "@intlify/devtools-if" "9.1.9"
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ "@intlify/vue-devtools" "9.1.9"
+
"@intlify/core@^9.1.6":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/core/-/core-9.1.7.tgz#69c00dc31111f1b61d79fbd9ad1838196e73c94a"
@@ -990,6 +1002,13 @@
dependencies:
"@intlify/shared" "9.1.7"
+"@intlify/devtools-if@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.1.9.tgz#a30e1dd1256ff2c5c98d8d75d075384fba898e5d"
+ integrity sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==
+ dependencies:
+ "@intlify/shared" "9.1.9"
+
"@intlify/message-compiler@9.1.7", "@intlify/message-compiler@^9.1.6":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.7.tgz#4663fcc2a190f3cc6970e12565c8d6f22beeb719"
@@ -999,11 +1018,25 @@
"@intlify/shared" "9.1.7"
source-map "0.6.1"
+"@intlify/message-compiler@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.1.9.tgz#1193cbd224a71c2fb981455b8534a3c766d2948d"
+ integrity sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ source-map "0.6.1"
+
"@intlify/message-resolver@9.1.7":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.7.tgz#a95d13866c8de85784358039c8845668152e4162"
integrity sha512-WTK+OaXJYjyquLGhuCyDvU2WHkG+kXzXeHagmVFHn+s118Jf2143zzkLLUrapP5CtZ/csuyjmYg7b3xQRQAmvw==
+"@intlify/message-resolver@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/message-resolver/-/message-resolver-9.1.9.tgz#3155ccd2f5e6d0dc16cad8b7f1d8e97fcda05bfc"
+ integrity sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==
+
"@intlify/runtime@9.1.7":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.7.tgz#67e0d6b2fd85a5b0b301a151c2f436f93154c3c6"
@@ -1013,11 +1046,25 @@
"@intlify/message-resolver" "9.1.7"
"@intlify/shared" "9.1.7"
+"@intlify/runtime@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/runtime/-/runtime-9.1.9.tgz#2c12ce29518a075629efed0a8ed293ee740cb285"
+ integrity sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==
+ dependencies:
+ "@intlify/message-compiler" "9.1.9"
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
"@intlify/shared@9.1.7", "@intlify/shared@^9.1.6":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.7.tgz#e7d8bc90cb59dc17dd7b4c85a73db16fcb7891fc"
integrity sha512-zt0zlUdalumvT9AjQNxPXA36UgOndUyvBMplh8uRZU0fhWHAwhnJTcf0NaG9Qvr8I1n3HPSs96+kLb/YdwTavQ==
+"@intlify/shared@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.1.9.tgz#0baaf96128b85560666bec784ffb01f6623cc17a"
+ integrity sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==
+
"@intlify/vue-devtools@9.1.7":
version "9.1.7"
resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.7.tgz#b08d39bb5f21ba9b1954eab9466e9408129425a7"
@@ -1027,6 +1074,15 @@
"@intlify/runtime" "9.1.7"
"@intlify/shared" "9.1.7"
+"@intlify/vue-devtools@9.1.9":
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz#2be8f4dbe7f7ed4115676eb32348141d411e426b"
+ integrity sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==
+ dependencies:
+ "@intlify/message-resolver" "9.1.9"
+ "@intlify/runtime" "9.1.9"
+ "@intlify/shared" "9.1.9"
+
"@intlify/vue-i18n-loader@^2.1.0":
version "2.1.2"
resolved "https://registry.yarnpkg.com/@intlify/vue-i18n-loader/-/vue-i18n-loader-2.1.2.tgz#91a0858e26275dfc2c9c27aef9883028cada45ae"
@@ -9877,14 +9933,14 @@ vue-i18n@^8.17.0:
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.25.0.tgz#1037d9295fa2845a230b771de473481edb2cfc4c"
integrity sha512-ynhcL+PmTxuuSE1T10htiSXzjBozxYIE3ffbM1RfgAkVbr/v1SP+9Mi/7/uv8ZVV1yGuKjFAYp9BXq+X7op6MQ==
-vue-i18n@^9.1.0:
- version "9.1.7"
- resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.1.7.tgz#6f28dd2135197066508e2e65ab204a019750d773"
- integrity sha512-ujuuDanoHqtEd4GejWrbG/fXE9nrP51ElsEGxp0WBHfv+/ki0/wyUqkO+4fLikki2obGtXdviTPH0VNpas5K6g==
+vue-i18n@^9.1.9:
+ version "9.1.9"
+ resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.1.9.tgz#cb53e06ab5cc5b7eed59332f151caf48d47be9bb"
+ integrity sha512-JeRdNVxS2OGp1E+pye5XB6+M6BBkHwAv9C80Q7+kzoMdUDGRna06tjC0vCB/jDX9aWrl5swxOMFcyAr7or8XTA==
dependencies:
- "@intlify/core-base" "9.1.7"
- "@intlify/shared" "9.1.7"
- "@intlify/vue-devtools" "9.1.7"
+ "@intlify/core-base" "9.1.9"
+ "@intlify/shared" "9.1.9"
+ "@intlify/vue-devtools" "9.1.9"
"@vue/devtools-api" "^6.0.0-beta.7"
"vue-loader-v16@npm:vue-loader@^16.1.0":
|