adata-ui 2.1.41-beta.12 → 2.1.41-beta.13
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/components/forms/input/AInputV2.vue +21 -1
- package/components/forms/input/password/AInputPasswordV2.vue +72 -0
- package/components/forms/password/APasswordRequirements.vue +50 -0
- package/components/modals/id/IdConfirmAccountOtpModal.vue +19 -22
- package/components/modals/id/IdConfirmSuccessfulModal.vue +18 -15
- package/components/modals/id/IdLoginModal.vue +150 -119
- package/components/modals/id/IdModals.vue +66 -24
- package/components/modals/id/IdNewPasswordModal.vue +93 -52
- package/components/modals/id/IdOtpInput.vue +14 -14
- package/components/modals/id/IdPasswordSuccessfulModal.vue +11 -11
- package/components/modals/id/IdRecoveryModal.vue +57 -42
- package/components/modals/id/IdRegistrationModal.vue +136 -94
- package/components/modals/id/IdResetPasswordOtpModal.vue +19 -30
- package/components/modals/id/IdTwoFactorModal.vue +14 -29
- package/icons/google.vue +10 -32
- package/icons/mailru.vue +12 -27
- package/icons/yandex.vue +10 -20
- package/lang/en.ts +30 -4
- package/lang/kk.ts +30 -4
- package/lang/ru.ts +30 -4
- package/package.json +1 -1
- package/utils/apiErrorMessage.ts +22 -0
- package/utils/passwordRules.ts +19 -0
package/lang/en.ts
CHANGED
|
@@ -477,6 +477,12 @@ const EnLocale: RuLocale = {
|
|
|
477
477
|
title: 'Our Clients',
|
|
478
478
|
},
|
|
479
479
|
forms: {
|
|
480
|
+
password_requirements: {
|
|
481
|
+
minLength: 'At least {length} characters',
|
|
482
|
+
uppercase: 'Uppercase letter',
|
|
483
|
+
digit: 'Digit',
|
|
484
|
+
special: 'Special character',
|
|
485
|
+
},
|
|
480
486
|
feedback: {
|
|
481
487
|
value: 'FEEDBACK',
|
|
482
488
|
title: 'Still have questions about the check?',
|
|
@@ -572,6 +578,8 @@ const EnLocale: RuLocale = {
|
|
|
572
578
|
confirm: 'Confirm',
|
|
573
579
|
"topUp": "Top up",
|
|
574
580
|
update: 'Update',
|
|
581
|
+
showPassword: 'Show password',
|
|
582
|
+
hidePassword: 'Hide password',
|
|
575
583
|
},
|
|
576
584
|
modals: {
|
|
577
585
|
id: {
|
|
@@ -594,8 +602,13 @@ const EnLocale: RuLocale = {
|
|
|
594
602
|
remember_me: 'Remember me',
|
|
595
603
|
forget_password: 'Forgot password?',
|
|
596
604
|
first_time: 'First time using our service?',
|
|
605
|
+
social_divider: 'or sign in with',
|
|
597
606
|
labels: {
|
|
598
|
-
email: '
|
|
607
|
+
email: 'Email',
|
|
608
|
+
password: 'Password',
|
|
609
|
+
},
|
|
610
|
+
placeholders: {
|
|
611
|
+
email: 'you@company.kz',
|
|
599
612
|
password: 'Enter password',
|
|
600
613
|
},
|
|
601
614
|
},
|
|
@@ -603,10 +616,15 @@ const EnLocale: RuLocale = {
|
|
|
603
616
|
title: 'Registration',
|
|
604
617
|
subtitle: 'Enter your details to register',
|
|
605
618
|
labels: {
|
|
606
|
-
email: '
|
|
607
|
-
password: '
|
|
619
|
+
email: 'Email',
|
|
620
|
+
password: 'Password',
|
|
608
621
|
password_confirmation: 'Confirm password',
|
|
609
622
|
},
|
|
623
|
+
placeholders: {
|
|
624
|
+
email: 'you@company.kz',
|
|
625
|
+
password: 'Create a password',
|
|
626
|
+
password_confirmation: 'Repeat password',
|
|
627
|
+
},
|
|
610
628
|
alert: 'The password must be at least 8 characters long and contain (an uppercase letter, a number, and a special character)',
|
|
611
629
|
agreement: {
|
|
612
630
|
text: 'I have read the {link} and fully agree with them.',
|
|
@@ -620,6 +638,9 @@ const EnLocale: RuLocale = {
|
|
|
620
638
|
minLength: 'The password must be at least 8 characters long',
|
|
621
639
|
passwordRequirements: 'must contain (an uppercase letter, a number, and a special character)',
|
|
622
640
|
sameAs: 'Passwords do not match',
|
|
641
|
+
uppercase: 'The password must contain an uppercase letter',
|
|
642
|
+
digit: 'The password must contain a digit',
|
|
643
|
+
special: 'The password must contain a special character',
|
|
623
644
|
},
|
|
624
645
|
},
|
|
625
646
|
confirmAccount: {
|
|
@@ -628,7 +649,8 @@ const EnLocale: RuLocale = {
|
|
|
628
649
|
recovery: {
|
|
629
650
|
title: 'Password recovery',
|
|
630
651
|
content: 'Enter your email address',
|
|
631
|
-
|
|
652
|
+
label: 'Email',
|
|
653
|
+
placeholder: 'you@company.kz',
|
|
632
654
|
},
|
|
633
655
|
resetPasswordOtp: {
|
|
634
656
|
title: 'Confirm action',
|
|
@@ -640,6 +662,10 @@ const EnLocale: RuLocale = {
|
|
|
640
662
|
title: 'Create a new password',
|
|
641
663
|
content: 'Come up with your new password',
|
|
642
664
|
alert: 'The password must be at least 8 characters long and contain (an uppercase letter, a number)',
|
|
665
|
+
labels: {
|
|
666
|
+
password: 'New password',
|
|
667
|
+
password_confirmation: 'Confirm password',
|
|
668
|
+
},
|
|
643
669
|
placeholder: {
|
|
644
670
|
1: 'Enter new password',
|
|
645
671
|
2: 'Repeat password',
|
package/lang/kk.ts
CHANGED
|
@@ -478,6 +478,12 @@ const KkLocale: RuLocale = {
|
|
|
478
478
|
title: 'Бізге сенеді',
|
|
479
479
|
},
|
|
480
480
|
forms: {
|
|
481
|
+
password_requirements: {
|
|
482
|
+
minLength: 'Кемінде {length} таңба',
|
|
483
|
+
uppercase: 'Бас әріп',
|
|
484
|
+
digit: 'Сан',
|
|
485
|
+
special: 'Арнайы таңба',
|
|
486
|
+
},
|
|
481
487
|
feedback: {
|
|
482
488
|
value: 'КЕРІ БАЙЛАНЫС ',
|
|
483
489
|
title: 'Тексеру бойынша сұрақтарыңыз қалды ма?',
|
|
@@ -573,6 +579,8 @@ const KkLocale: RuLocale = {
|
|
|
573
579
|
confirm: 'Растау',
|
|
574
580
|
"topUp": "Толықтыру",
|
|
575
581
|
update: 'Жаңарту',
|
|
582
|
+
showPassword: 'Құпия сөзді көрсету',
|
|
583
|
+
hidePassword: 'Құпия сөзді жасыру',
|
|
576
584
|
},
|
|
577
585
|
modals: {
|
|
578
586
|
id: {
|
|
@@ -595,8 +603,13 @@ const KkLocale: RuLocale = {
|
|
|
595
603
|
remember_me: 'Мені есте сақтау',
|
|
596
604
|
forget_password: 'Құпия сөзді ұмыттыңыз ба?',
|
|
597
605
|
first_time: 'Біздің сервисті алғаш рет қолданудасыз ба?',
|
|
606
|
+
social_divider: 'немесе арқылы кіріңіз',
|
|
598
607
|
labels: {
|
|
599
|
-
email: 'Email
|
|
608
|
+
email: 'Email',
|
|
609
|
+
password: 'Құпия сөз',
|
|
610
|
+
},
|
|
611
|
+
placeholders: {
|
|
612
|
+
email: 'you@company.kz',
|
|
600
613
|
password: 'Құпия сөз енгізіңіз',
|
|
601
614
|
},
|
|
602
615
|
},
|
|
@@ -604,10 +617,15 @@ const KkLocale: RuLocale = {
|
|
|
604
617
|
title: 'Тіркелу',
|
|
605
618
|
subtitle: 'Тіркелу үшін деректерді енгізіңіз',
|
|
606
619
|
labels: {
|
|
607
|
-
email: 'Email
|
|
608
|
-
password: 'Құпия сөз
|
|
620
|
+
email: 'Email',
|
|
621
|
+
password: 'Құпия сөз',
|
|
609
622
|
password_confirmation: 'Құпия сөзді растаңыз',
|
|
610
623
|
},
|
|
624
|
+
placeholders: {
|
|
625
|
+
email: 'you@company.kz',
|
|
626
|
+
password: 'Құпия сөз ойлап табыңыз',
|
|
627
|
+
password_confirmation: 'Құпия сөзді қайталаңыз',
|
|
628
|
+
},
|
|
611
629
|
alert: 'Құпия сөз кемінде 8 таңбадан тұруы және (бас әріп, сан және арнайы таңба) қамтуы керек',
|
|
612
630
|
agreement: {
|
|
613
631
|
text: 'Мен {link} оқыдым және толықтай келісемін.',
|
|
@@ -621,6 +639,9 @@ const KkLocale: RuLocale = {
|
|
|
621
639
|
minLength: 'Құпия сөз кемінде 8 таңбадан тұруы керек',
|
|
622
640
|
passwordRequirements: '(бас әріп, сан және арнайы таңба) қамтуы тиіс',
|
|
623
641
|
sameAs: 'Құпия сөздер сәйкес емес',
|
|
642
|
+
uppercase: 'Құпия сөзде бас әріп болуы керек',
|
|
643
|
+
digit: 'Құпия сөзде сан болуы керек',
|
|
644
|
+
special: 'Құпия сөзде арнайы таңба болуы керек',
|
|
624
645
|
},
|
|
625
646
|
},
|
|
626
647
|
confirmAccount: {
|
|
@@ -629,7 +650,8 @@ const KkLocale: RuLocale = {
|
|
|
629
650
|
recovery: {
|
|
630
651
|
title: 'Құпия сөзді қалпына келтіру',
|
|
631
652
|
content: 'Электрондық поштаңызды енгізіңіз',
|
|
632
|
-
|
|
653
|
+
label: 'Email',
|
|
654
|
+
placeholder: 'you@company.kz',
|
|
633
655
|
},
|
|
634
656
|
resetPasswordOtp: {
|
|
635
657
|
title: 'Әрекетті растау',
|
|
@@ -641,6 +663,10 @@ const KkLocale: RuLocale = {
|
|
|
641
663
|
title: 'Жаңа құпия сөз құру',
|
|
642
664
|
content: 'Жаңа құпия сөзді ойлап табыңыз',
|
|
643
665
|
alert: 'Құпия сөз кемінде 8 таңбадан тұруы және (бас әріп, сан) қамтуы керек',
|
|
666
|
+
labels: {
|
|
667
|
+
password: 'Жаңа құпия сөз',
|
|
668
|
+
password_confirmation: 'Құпия сөзді растаңыз',
|
|
669
|
+
},
|
|
644
670
|
placeholder: {
|
|
645
671
|
1: 'Жаңа құпия сөз енгізіңіз',
|
|
646
672
|
2: 'Құпия сөзді қайталаңыз',
|
package/lang/ru.ts
CHANGED
|
@@ -477,6 +477,12 @@ const RuLocale = {
|
|
|
477
477
|
title: 'Нам доверяют',
|
|
478
478
|
},
|
|
479
479
|
forms: {
|
|
480
|
+
password_requirements: {
|
|
481
|
+
minLength: 'Не менее {length} символов',
|
|
482
|
+
uppercase: 'Заглавная буква',
|
|
483
|
+
digit: 'Цифра',
|
|
484
|
+
special: 'Специальный символ',
|
|
485
|
+
},
|
|
480
486
|
feedback: {
|
|
481
487
|
value: 'ОБРАТНАЯ СВЯЗЬ',
|
|
482
488
|
title: 'Остались вопросы по проверке?',
|
|
@@ -573,6 +579,8 @@ const RuLocale = {
|
|
|
573
579
|
confirm: 'Подтвердить',
|
|
574
580
|
topUp: 'Пополнить',
|
|
575
581
|
update: 'Обновить',
|
|
582
|
+
showPassword: 'Показать пароль',
|
|
583
|
+
hidePassword: 'Скрыть пароль',
|
|
576
584
|
},
|
|
577
585
|
modals: {
|
|
578
586
|
id: {
|
|
@@ -595,8 +603,13 @@ const RuLocale = {
|
|
|
595
603
|
remember_me: 'Запомнить меня',
|
|
596
604
|
forget_password: 'Забыли пароль?',
|
|
597
605
|
first_time: 'Впервые в нашем сервисе?',
|
|
606
|
+
social_divider: 'или войдите через',
|
|
598
607
|
labels: {
|
|
599
|
-
email: '
|
|
608
|
+
email: 'Email',
|
|
609
|
+
password: 'Пароль',
|
|
610
|
+
},
|
|
611
|
+
placeholders: {
|
|
612
|
+
email: 'you@company.kz',
|
|
600
613
|
password: 'Введите пароль',
|
|
601
614
|
},
|
|
602
615
|
},
|
|
@@ -604,10 +617,15 @@ const RuLocale = {
|
|
|
604
617
|
title: 'Регистрация ',
|
|
605
618
|
subtitle: 'Введите данные для регистрации',
|
|
606
619
|
labels: {
|
|
607
|
-
email: '
|
|
608
|
-
password: '
|
|
620
|
+
email: 'Email',
|
|
621
|
+
password: 'Пароль',
|
|
609
622
|
password_confirmation: 'Подтвердите пароль',
|
|
610
623
|
},
|
|
624
|
+
placeholders: {
|
|
625
|
+
email: 'you@company.kz',
|
|
626
|
+
password: 'Придумайте пароль',
|
|
627
|
+
password_confirmation: 'Повторите пароль',
|
|
628
|
+
},
|
|
611
629
|
alert: 'Пароль должен состоять минимум из 8 символов и содержать (заглавную букву, цифру и специальный символ)',
|
|
612
630
|
agreement: {
|
|
613
631
|
text: 'Я ознакомился(лась) с {link} и полностью согласен(а) с ними.',
|
|
@@ -621,6 +639,9 @@ const RuLocale = {
|
|
|
621
639
|
minLength: 'Пароль должен состоять минимум из 8 символов',
|
|
622
640
|
passwordRequirements: 'содержать (заглавную букву, цифру и специальный символ)',
|
|
623
641
|
sameAs: 'Пароли не совпадают',
|
|
642
|
+
uppercase: 'Пароль должен содержать заглавную букву',
|
|
643
|
+
digit: 'Пароль должен содержать цифру',
|
|
644
|
+
special: 'Пароль должен содержать специальный символ',
|
|
624
645
|
},
|
|
625
646
|
},
|
|
626
647
|
confirmAccount: {
|
|
@@ -629,7 +650,8 @@ const RuLocale = {
|
|
|
629
650
|
recovery: {
|
|
630
651
|
title: 'Восстановление пароля',
|
|
631
652
|
content: 'Укажите Вашу электронную почту',
|
|
632
|
-
|
|
653
|
+
label: 'Email',
|
|
654
|
+
placeholder: 'you@company.kz',
|
|
633
655
|
},
|
|
634
656
|
resetPasswordOtp: {
|
|
635
657
|
title: 'Подтвердите действие',
|
|
@@ -641,6 +663,10 @@ const RuLocale = {
|
|
|
641
663
|
title: 'Создание нового пароля',
|
|
642
664
|
content: 'Придумайте ваш новый пароль',
|
|
643
665
|
alert: 'Пароль должен состоять минимум из 8 символов и содержать (заглавную букву, цифру)',
|
|
666
|
+
labels: {
|
|
667
|
+
password: 'Новый пароль',
|
|
668
|
+
password_confirmation: 'Подтвердите пароль',
|
|
669
|
+
},
|
|
644
670
|
placeholder: {
|
|
645
671
|
1: 'Введите новый пароль',
|
|
646
672
|
2: 'Повторите пароль',
|
package/package.json
CHANGED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Достаёт человекочитаемое сообщение из ошибки auth-API.
|
|
3
|
+
*
|
|
4
|
+
* Бэкенд отдаёт `data.message` то строкой, то объектом с полями формы
|
|
5
|
+
* (`{ email: '…' }`, `{ password: ['…'] }`), поэтому прямые обращения вида
|
|
6
|
+
* `error.data.message.password[0]` падали с TypeError на любом ответе другой
|
|
7
|
+
* формы и прятали настоящую причину сбоя.
|
|
8
|
+
*/
|
|
9
|
+
export function apiErrorMessage(error: unknown, fallback: string): string {
|
|
10
|
+
const message = (error as { data?: { message?: unknown } })?.data?.message
|
|
11
|
+
|
|
12
|
+
if (typeof message === 'string' && message) return message
|
|
13
|
+
|
|
14
|
+
if (message && typeof message === 'object') {
|
|
15
|
+
for (const value of Object.values(message as Record<string, unknown>)) {
|
|
16
|
+
if (typeof value === 'string' && value) return value
|
|
17
|
+
if (Array.isArray(value) && typeof value[0] === 'string') return value[0]
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return fallback
|
|
22
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Единый источник истины для требований к паролю: одни и те же предикаты
|
|
3
|
+
* используются и чеклистом `<a-password-requirements>`, и zod-схемами форм
|
|
4
|
+
* регистрации / смены пароля. Ключ правила = ключ i18n
|
|
5
|
+
* `forms.password_requirements.<key>` и `error.password.<key>`.
|
|
6
|
+
*/
|
|
7
|
+
export interface PasswordRule {
|
|
8
|
+
key: 'minLength' | 'uppercase' | 'digit' | 'special'
|
|
9
|
+
test: (password: string) => boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const PASSWORD_MIN_LENGTH = 8
|
|
13
|
+
|
|
14
|
+
export const PASSWORD_RULES: readonly PasswordRule[] = [
|
|
15
|
+
{ key: 'minLength', test: password => password.length >= PASSWORD_MIN_LENGTH },
|
|
16
|
+
{ key: 'uppercase', test: password => /[A-Z]/.test(password) },
|
|
17
|
+
{ key: 'digit', test: password => /\d/.test(password) },
|
|
18
|
+
{ key: 'special', test: password => /[^\dA-Z]/i.test(password) },
|
|
19
|
+
]
|