adata-ui 2.0.13 → 2.0.15

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.
@@ -0,0 +1,81 @@
1
+ <script setup lang="ts">
2
+
3
+ const emit = defineEmits<{
4
+ (e: 'resend'): void
5
+ (e: 'close'): void
6
+ }>()
7
+
8
+ const timer = ref(60)
9
+ const isResend = ref(false)
10
+ const route = useRoute()
11
+ const appConfig = useAppConfig()
12
+ const landingUrl = appConfig.myLayer.landingUrl
13
+
14
+ function runTimer() {
15
+ timer.value = 60
16
+ const intervalId = setInterval(() => {
17
+ if (timer.value <= 0) {
18
+ isResend.value = true
19
+ clearInterval(intervalId);
20
+ return;
21
+ }
22
+ timer.value--;
23
+ }, 1000);
24
+ }
25
+
26
+ onMounted(() => resend())
27
+
28
+ const resend = () => {
29
+ isResend.value = false
30
+ runTimer()
31
+ emit('resend')
32
+ }
33
+ const goToMain = () => {
34
+ if (route.query.url) {
35
+ document.location.replace(route.query.url)
36
+ } else {
37
+ document.location.replace(landingUrl)
38
+ }
39
+ emit('close')
40
+
41
+ }
42
+ </script>
43
+
44
+ <template>
45
+ <div class="flex flex-col justify-center items-center gap-5">
46
+ <p class="heading-02">
47
+ {{ $t('login.modal.title') }}
48
+ </p>
49
+ <a-ill-mail />
50
+ <p class="body-400 text-center">
51
+ {{ $t('login.modal.subtitle1') }}
52
+ </p>
53
+ <p class="body-400 text-center">
54
+ {{ $t('login.modal.subtitle2') }}
55
+ </p>
56
+ <p
57
+ v-if="!isResend"
58
+ class="heading-02"
59
+ >
60
+ {{ timer }} {{ $t('login.modal.seconds') }}
61
+ </p>
62
+ <a-button
63
+ v-else
64
+ class="w-full"
65
+ view="outline"
66
+ @click="resend"
67
+ >
68
+ {{ $t('login.modal.resend') }}
69
+ </a-button>
70
+ <a-button
71
+ class="w-full"
72
+ @click="goToMain"
73
+ >
74
+ {{ $t('login.modal.back') }}
75
+ </a-button>
76
+ </div>
77
+ </template>
78
+
79
+ <style scoped>
80
+
81
+ </style>
@@ -0,0 +1,140 @@
1
+ <script lang="ts" setup>
2
+ const length = 6 // Длина OTP
3
+ const showError = defineModel('error')
4
+ const otp = defineModel()
5
+ const otpRefs = ref([])
6
+ const { t } = useI18n()
7
+
8
+ function onInput(event, index) {
9
+ const value = event.target.value
10
+ showError.value = false
11
+
12
+ // Разрешить только цифры
13
+ if (/\D/.test(value)) {
14
+ otp.value[index] = ''
15
+ return
16
+ }
17
+
18
+ otp.value[index] = value
19
+
20
+ // Перемещаем фокус на следующий элемент, если введен символ
21
+ if (value && index < length - 1) {
22
+ // setTimeout(() => otpRefs.value[index + 1]?.focus(), 0)
23
+ otpRefs.value[index + 1]?.focus()
24
+ }
25
+ }
26
+
27
+ function onBackspace(index, event) {
28
+ showError.value = false
29
+ if (otp.value[index] || index > 0) {
30
+ if (otp.value[index] !== '') {
31
+ otp.value[index] = ''
32
+ return
33
+ }
34
+ otp.value[index] = ''
35
+ if (index > 0) {
36
+ otp.value[index - 1] = ''
37
+ setTimeout(() => {
38
+ const prevInput = otpRefs.value[index - 1]
39
+ prevInput?.focus()
40
+ prevInput?.setSelectionRange(0, 1)
41
+ }, 0)
42
+ }
43
+ event.preventDefault()
44
+ }
45
+ }
46
+
47
+ function onPaste(event) {
48
+ showError.value = false
49
+ const pastedData = event.clipboardData.getData('text').slice(0, length)
50
+
51
+ if (/\D/.test(pastedData)) {
52
+ event.preventDefault()
53
+ return
54
+ }
55
+
56
+ // Заполняем ячейки значениями из буфера обмена
57
+ pastedData.split('').forEach((char, index) => {
58
+ if (index < length) {
59
+ otp.value[index] = char
60
+ }
61
+ })
62
+
63
+ // Ставим фокус на следующий незаполненный элемент
64
+ const firstEmptyIndex = otp.value.findIndex(val => val === '')
65
+ if (firstEmptyIndex !== -1) {
66
+ otpRefs.value[firstEmptyIndex]?.focus()
67
+ }
68
+ else {
69
+ otpRefs.value[length - 1]?.focus()
70
+ }
71
+
72
+ event.preventDefault()
73
+ }
74
+
75
+ // Фокус на первый пустой инпут при фокусе если все пустые
76
+ function autoTarget() {
77
+ for (let i = 0; i < length; i++) {
78
+ if (otp.value[i].length) {
79
+ return
80
+ }
81
+ }
82
+ otpRefs.value[0]?.focus()
83
+ }
84
+
85
+ // макс сайз = 1 и если в ячейке есть цифра, она перезаписывается
86
+ function inputValid(index: number, event: InputEvent) {
87
+ if (otp.value[index]) {
88
+ event.target.value = ''
89
+ }
90
+ }
91
+
92
+ function moveFocus(index: number, to: string) {
93
+ if (to === 'left') {
94
+ if (index > 0) {
95
+ otpRefs.value[index - 1]?.focus()
96
+ }
97
+ }
98
+ else if (to === 'right') {
99
+ if (index < length - 1) {
100
+ otpRefs.value[index + 1]?.focus()
101
+ }
102
+ }
103
+ }
104
+ </script>
105
+
106
+ <template>
107
+ <div>
108
+ <div class="mb-1 flex gap-2">
109
+ <input
110
+ v-for="(digit, index) in otp"
111
+ :key="index"
112
+ :ref="el => otpRefs[index] = el"
113
+ v-model="otp[index]"
114
+ type="text"
115
+ maxlength="1"
116
+ class="bg-deepblue-900/5 dark:bg-[#E3E5E80D] size-10 rounded text-center text-lg focus:border-blue-500 focus:outline-none focus:border caret-transparent"
117
+ :class="{ 'border border-[#E74135] dark:border-[#F47E75] dark:bg-[#F47E751A] bg-[#E741351A]': showError }"
118
+ @input="onInput($event, index)"
119
+ @keydown.backspace="onBackspace(index, $event)"
120
+ @keydown.enter.prevent
121
+ @paste="onPaste"
122
+ @keydown.left="moveFocus(index, 'left')"
123
+ @keydown.right="moveFocus(index, 'right')"
124
+ @focus="autoTarget"
125
+ @beforeinput="inputValid(index, $event)"
126
+ >
127
+ </div>
128
+ <a-alert
129
+ v-show="showError"
130
+ color="red"
131
+ size="sm"
132
+ icon-type="triangle"
133
+ >
134
+ {{ t('twoFactor.error') }}
135
+ </a-alert>
136
+ </div>
137
+ </template>
138
+
139
+ <style scoped>
140
+ </style>
@@ -0,0 +1,78 @@
1
+ <script setup lang="ts">
2
+ import OtpInput from '#adata-ui/components/modals/two-factor/otp-input.vue'
3
+
4
+ interface Props {
5
+ loading: boolean
6
+ }
7
+ const props = defineProps<Props>()
8
+ const emit = defineEmits<{
9
+ (e: 'confirm', otp: string): void
10
+ (e: 'close'): void
11
+ }>()
12
+ const isOpen = defineModel()
13
+ const showError = defineModel('error')
14
+ const otp = ref(['', '', '', '', '', ''])
15
+ const otpFormatted = computed(() => {
16
+ return otp.value.join('')
17
+ })
18
+ function confirm() {
19
+ if (otpFormatted.value.length < 6) return
20
+ emit('confirm', otpFormatted.value)
21
+ }
22
+ function close() {
23
+ otp.value = ['', '', '', '', '', '']
24
+ showError.value = false
25
+ emit('close')
26
+ }
27
+
28
+ function handleEnter(e: KeyboardEvent) {
29
+ if (e.key === 'Enter') {
30
+ confirm()
31
+ }
32
+ }
33
+
34
+ onMounted(() => {
35
+ document.addEventListener('keyup', handleEnter)
36
+ })
37
+
38
+ onBeforeUnmount(() => {
39
+ document.removeEventListener('keyup', handleEnter)
40
+ })
41
+ </script>
42
+
43
+ <template>
44
+ <a-modal @close="close" v-model="isOpen">
45
+ <div class="flex flex-col items-center justify-center gap-5">
46
+ <p class="heading-02 text-center">
47
+ {{ $t('twoFactor.title') }}
48
+ </p>
49
+ <a-icon-hand-with-phone-light class="dark:hidden size-32" />
50
+ <a-icon-hand-with-phone-dark class="hidden dark:block size-32" />
51
+ <otp-input v-model="otp" v-model:error="showError" />
52
+ <p class="body-400 text-center">
53
+ {{ $t('twoFactor.code') }}
54
+ </p>
55
+ <div class="flex w-full gap-2">
56
+ <a-button
57
+ class="w-full"
58
+ view="outline"
59
+ @click="close"
60
+ >
61
+ {{ $t('twoFactor.close') }}
62
+ </a-button>
63
+ <a-button
64
+ :loading="loading"
65
+ :disabled="otpFormatted.length < 6"
66
+ class="w-full"
67
+ @click="confirm"
68
+ >
69
+ {{ $t('twoFactor.confirm') }}
70
+ </a-button>
71
+ </div>
72
+ </div>
73
+ </a-modal>
74
+ </template>
75
+
76
+ <style scoped>
77
+
78
+ </style>
@@ -118,7 +118,7 @@ function isCurrentModule(currentModule: string) {
118
118
  <div class="flex gap-[10px] divide-x divide-gray-500/50">
119
119
  <div class="flex flex-col gap-5 w-[290px]">
120
120
  <nav-list
121
- v-for="module in filteredItems.slice(0,2)"
121
+ v-for="module in filteredItems.slice(0,3)"
122
122
  :id="module.key"
123
123
  :key="module.key"
124
124
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
@@ -130,7 +130,7 @@ function isCurrentModule(currentModule: string) {
130
130
  </div>
131
131
  <div class="flex flex-col gap-5 w-[290px] pl-[10px]">
132
132
  <nav-list
133
- v-for="module in filteredItems.slice(2,5)"
133
+ v-for="module in filteredItems.slice(3,6)"
134
134
  :id="module.key"
135
135
  :key="module.key"
136
136
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
@@ -142,7 +142,7 @@ function isCurrentModule(currentModule: string) {
142
142
  </div>
143
143
  <div class="flex flex-col gap-5 w-[330px] pl-[10px]">
144
144
  <nav-list
145
- v-for="module in filteredItems.slice(5,8)"
145
+ v-for="module in filteredItems.slice(6,8)"
146
146
  :id="module.key"
147
147
  :key="module.key"
148
148
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
@@ -64,6 +64,19 @@ export const useHeaderNavigationLinks = () => {
64
64
  }
65
65
  ]
66
66
  },
67
+ {
68
+ key: 'compliance',
69
+ name: t('header.products.compliance.label'),
70
+ icon: AIconId,
71
+ items: [
72
+ {
73
+ title: t('header.products.compliance.items.l.t'),
74
+ subtitle: t('header.products.compliance.items.l.st'),
75
+ icon: IconProfile,
76
+ to: buildLocalizedUrl(locale, `${myLayer.complianceUrl}/compliance`, '')
77
+ }
78
+ ]
79
+ },
67
80
  {
68
81
  key: 'pk',
69
82
  name: t('header.products.counterparties.label'),
@@ -268,19 +281,6 @@ export const useHeaderNavigationLinks = () => {
268
281
  },
269
282
  ]
270
283
  },
271
- {
272
- key: 'compliance',
273
- name: t('header.products.compliance.label'),
274
- icon: AIconId,
275
- items: [
276
- {
277
- title: t('header.products.compliance.items.l.t'),
278
- subtitle: t('header.products.compliance.items.l.st'),
279
- icon: IconProfile,
280
- to: buildLocalizedUrl(locale, `${myLayer.complianceUrl}/compliance`, '')
281
- }
282
- ]
283
- },
284
284
 
285
285
  ]
286
286
  })
@@ -1,7 +1,13 @@
1
1
  <script lang="ts" setup></script>
2
2
 
3
3
  <template>
4
- <svg fill="none" height="24" viewBox="0 0 24 24" width="24" xmlns="https://www.w3.org/2000/svg">
4
+ <svg
5
+ fill="none"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ width="24"
9
+ xmlns="https://www.w3.org/2000/svg"
10
+ >
5
11
  <path
6
12
  d="M22.501 12.2331C22.501 11.3698 22.4296 10.7398 22.2748 10.0864H12.2153V13.983H18.12C18.001 14.9514 17.3582 16.4097 15.9296 17.3897L15.9096 17.5202L19.0902 19.9349L19.3106 19.9564C21.3343 18.1247 22.501 15.4297 22.501 12.2331Z"
7
13
  fill="#4285F4"
@@ -0,0 +1,41 @@
1
+
2
+
3
+ <script lang="ts" setup>
4
+ </script>
5
+
6
+ <template>
7
+ <svg
8
+ width="32"
9
+ height="32"
10
+ viewBox="0 0 32 32"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ >
14
+ <rect
15
+ x="0.5"
16
+ y="0.5"
17
+ width="31"
18
+ height="31"
19
+ rx="5.5"
20
+ stroke="#9DA3AC"
21
+ />
22
+ <path
23
+ d="M26.501 16.2332C26.501 15.3699 26.4296 14.7399 26.2748 14.0865H16.2153V17.9832H22.12C22.001 18.9515 21.3582 20.4099 19.9296 21.3898L19.9096 21.5203L23.0902 23.935L23.3106 23.9565C25.3343 22.1249 26.501 19.4298 26.501 16.2332Z"
24
+ fill="#4285F4"
25
+ />
26
+ <path
27
+ d="M16.2147 26.5C19.1075 26.5 21.5361 25.5666 23.3099 23.9566L19.929 21.3898C19.0242 22.0082 17.8099 22.4399 16.2147 22.4399C13.3814 22.4399 10.9767 20.6082 10.1195 18.0765L9.99382 18.087L6.68656 20.5954L6.64331 20.7132C8.40519 24.1432 12.0242 26.5 16.2147 26.5Z"
28
+ fill="#34A853"
29
+ />
30
+ <path
31
+ d="M10.12 18.0766C9.89379 17.4233 9.76289 16.7232 9.76289 15.9999C9.76289 15.2765 9.89379 14.5766 10.1081 13.9232L10.1021 13.7841L6.75337 11.2355L6.64381 11.2865C5.91765 12.7099 5.50098 14.3083 5.50098 15.9999C5.50098 17.6916 5.91765 19.2899 6.64381 20.7132L10.12 18.0766Z"
32
+ fill="#FBBC05"
33
+ />
34
+ <path
35
+ d="M16.2148 9.55997C18.2267 9.55997 19.5838 10.4116 20.3576 11.1233L23.3814 8.23C21.5243 6.53834 19.1076 5.5 16.2148 5.5C12.0243 5.5 8.4052 7.85665 6.64331 11.2866L10.1076 13.9233C10.9767 11.3917 13.3815 9.55997 16.2148 9.55997Z"
36
+ fill="#EB4335"
37
+ />
38
+ </svg>
39
+ </template>
40
+
41
+ <style scoped></style>
@@ -0,0 +1,34 @@
1
+ <template>
2
+ <svg
3
+ width="32"
4
+ height="32"
5
+ viewBox="0 0 32 32"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <rect
10
+ x="0.5"
11
+ y="0.5"
12
+ width="31"
13
+ height="31"
14
+ rx="5.5"
15
+ stroke="#9DA3AC"
16
+ />
17
+ <g clip-path="url(#clip0_680_206687)">
18
+ <path
19
+ d="M19.1585 15.5C19.1585 17.2417 17.7417 18.6585 16 18.6585C14.2583 18.6585 12.8415 17.2417 12.8415 15.5C12.8415 13.7583 14.2583 12.3415 16 12.3415C17.7417 12.3415 19.1585 13.7583 19.1585 15.5ZM16 5C10.2106 5 5.5 9.71056 5.5 15.5C5.5 21.2894 10.2106 26 16 26C18.121 26 20.1665 25.3687 21.9148 24.1737L21.945 24.1527L20.5301 22.5081L20.5065 22.5238C19.1605 23.3894 17.6019 23.8475 16 23.8475C11.3971 23.8475 7.6525 20.1029 7.6525 15.5C7.6525 10.8971 11.3971 7.1525 16 7.1525C20.6029 7.1525 24.3475 10.8971 24.3475 15.5C24.3475 16.0965 24.2812 16.7003 24.1506 17.2942C23.8868 18.3777 23.1282 18.7097 22.5586 18.6657C21.9857 18.6192 21.3156 18.211 21.311 17.2122V16.4509V15.5C21.311 12.5712 18.9288 10.189 16 10.189C13.0712 10.189 10.689 12.5712 10.689 15.5C10.689 18.4288 13.0712 20.811 16 20.811C17.4227 20.811 18.7569 20.2545 19.7629 19.2432C20.3477 20.1535 21.3012 20.7244 22.386 20.811C22.4792 20.8189 22.5743 20.8228 22.6688 20.8228C23.432 20.8228 24.1893 20.5676 24.7997 20.1036C25.429 19.6258 25.8989 18.9348 26.1588 18.1047C26.2001 17.9708 26.2762 17.6637 26.2769 17.6617L26.2788 17.6505C26.4317 16.9844 26.5 16.3203 26.5 15.5C26.5 9.71056 21.7894 5 16 5Z"
20
+ fill="#FF9E00"
21
+ />
22
+ </g>
23
+ <defs>
24
+ <clipPath id="clip0_680_206687">
25
+ <rect
26
+ width="21"
27
+ height="21"
28
+ fill="white"
29
+ transform="translate(5.5 5)"
30
+ />
31
+ </clipPath>
32
+ </defs>
33
+ </svg>
34
+ </template>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <svg
3
+ width="32"
4
+ height="32"
5
+ viewBox="0 0 32 32"
6
+ fill="none"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ >
9
+ <rect
10
+ x="0.5"
11
+ y="0.5"
12
+ width="31"
13
+ height="31"
14
+ rx="5.5"
15
+ stroke="#9DA3AC"
16
+ />
17
+ <circle
18
+ cx="16"
19
+ cy="16"
20
+ r="10.5"
21
+ fill="#FC3F1D"
22
+ />
23
+ <path
24
+ d="M19.75 22.75H17.3928V11.076H16.3409C14.4125 11.076 13.3995 12.0469 13.3995 13.4845C13.3995 15.1158 14.1008 15.8736 15.5421 16.845L16.7304 17.6415L13.3019 22.75H10.75L13.8279 18.1853C12.0553 16.9224 11.0618 15.6988 11.0618 13.6206C11.0618 11.0174 12.8736 9.25 16.3215 9.25H19.75V22.75Z"
25
+ fill="white"
26
+ />
27
+ </svg>
28
+ </template>
package/lang/en.ts CHANGED
@@ -460,6 +460,9 @@ const EnLocale: RuLocale = {
460
460
  showMore: 'Show more',
461
461
  close: 'Close',
462
462
  send: 'Send',
463
+ login: 'Кіру',
464
+ register: 'Тіркелу',
465
+ toTariffs: 'Тарифтерге өту'
463
466
  },
464
467
  modals: {
465
468
  auth: {
@@ -587,7 +590,80 @@ const EnLocale: RuLocale = {
587
590
  login: 'Log In',
588
591
  },
589
592
  },
590
- all_services: 'All services'
593
+ all_services: 'All services',
594
+ login: {
595
+ pageTitle: 'Authorization',
596
+ successfully: 'Successfully',
597
+ form: {
598
+ title: 'Login',
599
+ subtitle: 'Welcome to the Adata.kz service',
600
+ remember_me: 'Remember me',
601
+ forget_password: 'Forgot password?',
602
+ first_time: 'First time on our service?',
603
+ labels: {
604
+ email: 'Enter email',
605
+ password: 'Enter password',
606
+ },
607
+ },
608
+ modal: {
609
+ title: 'Confirmation',
610
+ subtitle1: 'An email has been sent to your inbox with a link to confirm your account',
611
+ subtitle2: 'Waiting for confirmation, you can resend the email in:',
612
+ confirmationEmail: 'If you did not receive the confirmation email',
613
+ seconds: 'seconds',
614
+ resend: 'Resend',
615
+ back: 'Return to home',
616
+ },
617
+ },
618
+ register: {
619
+ pageTitle: 'Registration',
620
+ form: {
621
+ title: 'Registration',
622
+ subtitle: 'Enter data for registration',
623
+ labels: {
624
+ email: 'Enter email',
625
+ password: 'Enter password',
626
+ password_confirmation: 'Confirm password',
627
+ },
628
+ alert: 'Password must be at least 8 characters long and contain (uppercase letter, digit and special symbol)',
629
+ agreement: {
630
+ text: 'I have read the {link} and fully agree with them.',
631
+ link: 'service terms',
632
+ },
633
+ continue: 'Continue',
634
+ haveAcc: 'Do you already have an account?',
635
+ enter: 'Login',
636
+ errors: {
637
+ required: 'Required field',
638
+ low_security: 'Low security level',
639
+ email: 'Invalid email',
640
+ minLength: 'Password must be at least 8 characters long',
641
+ passwordRequirements: 'contain (uppercase letter, digit)',
642
+ sameAs: 'Passwords do not match',
643
+ },
644
+ },
645
+ modal: {
646
+ title: 'Confirmation',
647
+ subtitle1: 'An email has been sent to your inbox with a link to confirm your account',
648
+ subtitle2: 'Waiting for confirmation, you can resend the email in',
649
+ confirmationEmail: 'If you did not receive the confirmation email',
650
+ seconds: 'seconds',
651
+ resend: 'Resend',
652
+ back: 'Return to home',
653
+ },
654
+ },
655
+ error: {
656
+ required: 'Required field',
657
+ validation: 'Validation failed',
658
+ user_canceled_auth: 'You canceled the authorization',
659
+ email_not_verified: 'Email is not verified',
660
+ authorization_error_with_yandex: 'Failed to sign in with Yandex',
661
+ authorization_error_with_google: 'Failed to sign in with Google',
662
+ authorization_error_with_mailru: 'Failed to sign in with Mail.ru',
663
+ },
664
+ info: {
665
+ userAgreement: 'I, the user of the information system "Adata", continuing to work on the portal, confirm my agreement that I bear responsibility for all actions taken in accordance with the legislation of the Republic of Kazakhstan',
666
+ },
591
667
  }
592
668
 
593
669
  export default EnLocale
package/lang/kk.ts CHANGED
@@ -461,6 +461,9 @@ const KkLocale: RuLocale = {
461
461
  showMore: 'Көбірек көрсету',
462
462
  close: 'Жабу',
463
463
  send: 'Жіберу',
464
+ login: 'Login',
465
+ register: 'Register',
466
+ toTariffs: 'Go to tariffs'
464
467
  },
465
468
  modals: {
466
469
  auth: {
@@ -588,7 +591,80 @@ const KkLocale: RuLocale = {
588
591
  login: 'Кіру',
589
592
  },
590
593
  },
591
- all_services: 'Барлық қызметтер'
594
+ all_services: 'Барлық қызметтер',
595
+ login: {
596
+ pageTitle: 'Авторизация',
597
+ successfully: 'Сәтті',
598
+ form: {
599
+ title: 'Кіру',
600
+ subtitle: 'Adata.kz қызметіне қош келдіңіз',
601
+ remember_me: 'Мені есте сақта',
602
+ forget_password: 'Парольді ұмыттыңыз ба?',
603
+ first_time: 'Біздің қызметте алғаш рет пе?',
604
+ labels: {
605
+ email: 'Email енгізіңіз',
606
+ password: 'Пароль енгізіңіз',
607
+ },
608
+ },
609
+ modal: {
610
+ title: 'Растау',
611
+ subtitle1: 'Сіздің электрондық поштаңызға аккаунтты растау сілтемесі бар хат жіберілді.',
612
+ subtitle2: 'Растау күтілуде. Хатты қайта жіберу үшін:',
613
+ confirmationEmail: 'Егер сіз растайтын хатты алмадыңыз',
614
+ seconds: 'секунд',
615
+ resend: 'Қайта жіберу',
616
+ back: 'Басты бетке оралу',
617
+ },
618
+ },
619
+ register: {
620
+ pageTitle: 'Тіркелу',
621
+ form: {
622
+ title: 'Тіркелу',
623
+ subtitle: 'Тіркелу үшін деректерді енгізіңіз',
624
+ labels: {
625
+ email: 'Email енгізіңіз',
626
+ password: 'Пароль енгізіңіз',
627
+ password_confirmation: 'Парольді растаңыз',
628
+ },
629
+ alert: 'Пароль кемінде 8 символдан тұруы тиіс және (бас әріп, цифр және арнайы таңба) қамтуы керек',
630
+ agreement: {
631
+ text: 'Мен {link} таныстым және онымен толық келісемін.',
632
+ link: 'қызмет шарттары',
633
+ },
634
+ continue: 'Жалғастыру',
635
+ haveAcc: 'Сізде аккаунт бар ма?',
636
+ enter: 'Кіру',
637
+ errors: {
638
+ required: 'Міндетті өріс',
639
+ low_security: 'Төмен қауіпсіздік деңгейі',
640
+ email: 'Дұрыс емес email',
641
+ minLength: 'Пароль кемінде 8 символдан тұруы тиіс',
642
+ passwordRequirements: 'қамтуы тиіс (бас әріп, цифр)',
643
+ sameAs: 'Парольдер сәйкес келмейді',
644
+ },
645
+ },
646
+ modal: {
647
+ title: 'Растау',
648
+ subtitle1: 'Сіздің электрондық поштаңызға аккаунтты растау сілтемесі бар хат жіберілді.',
649
+ subtitle2: 'Растау күтілуде. Хатты қайта жіберу үшін:',
650
+ confirmationEmail: 'Егер сіз растайтын хатты алмадыңыз',
651
+ seconds: 'секунд',
652
+ resend: 'Қайта жіберу',
653
+ back: 'Басты бетке оралу',
654
+ },
655
+ },
656
+ error: {
657
+ required: 'Міндетті өріс',
658
+ validation: 'Тексеру сәтсіз аяқталды',
659
+ user_canceled_auth: 'Сіз авторизацияны тоқтаттыңыз',
660
+ email_not_verified: 'Электрондық пошта расталмаған',
661
+ authorization_error_with_yandex: 'Yandex арқылы кіру сәтсіз аяқталды',
662
+ authorization_error_with_google: 'Google арқылы кіру сәтсіз аяқталды',
663
+ authorization_error_with_mailru: 'Mail.ru арқылы кіру сәтсіз аяқталды',
664
+ },
665
+ info: {
666
+ userAgreement: 'Мен, "Adata" ақпараттық жүйесінің пайдаланушысы, порталдағы жұмысымды жалғастыра отырып, Қазақстан Республикасының заңнамасына сәйкес жүзеге асырылған барлық әрекеттер үшін жауапкершілікті өз мойныма алатынымды растаймын',
667
+ },
592
668
  }
593
669
 
594
670
  export default KkLocale