adata-ui 2.1.40-beta.18 → 2.1.40-beta.19
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/.playground/app.vue +102 -0
- package/assets/styles/index.scss +67 -5
- package/components/elements/a-select-row/ASelectRowV2.vue +214 -0
- package/components/elements/a-select-row/index.vue +3 -5
- package/components/elements/accordion/AAccordion.vue +5 -3
- package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +3 -3
- package/components/elements/alert/AAlert.vue +34 -47
- package/components/elements/bg-block/ABgBlock.vue +1 -1
- package/components/elements/button/AButton.vue +3 -3
- package/components/elements/button/AButtonV2.vue +133 -0
- package/components/elements/button-login/index.vue +6 -10
- package/components/elements/chip-wrapper/AChipWrapper.vue +1 -1
- package/components/elements/chips/AChips.vue +2 -2
- package/components/elements/companies/AOurClients.vue +3 -1
- package/components/elements/curve-block-v2/ACurveBlockV2.vue +85 -0
- package/components/elements/digit-badge/ADigitBadge.vue +24 -22
- package/components/elements/feature-description/AFeatureDescription.vue +1 -1
- package/components/elements/leave-note/ALeaveNote.vue +39 -18
- package/components/elements/pagination/APagination.vue +7 -7
- package/components/elements/segmented/ASegmentedV2.vue +151 -0
- package/components/elements/select/ASelect.vue +4 -4
- package/components/elements/select/ASelectMobile.vue +2 -2
- package/components/elements/select/ASelectV2.vue +588 -0
- package/components/elements/select/ui/select-button.vue +1 -1
- package/components/elements/show-more/AShowMoreV2.vue +26 -0
- package/components/elements/slider/ASlider.vue +174 -0
- package/components/elements/slider/ASliderItem.vue +31 -0
- package/components/elements/slider/types.ts +21 -0
- package/components/elements/star-rating/AStarRating.vue +12 -4
- package/components/elements/status-badge/AStatusBadge.vue +91 -44
- package/components/elements/step-slider/AStepSliderColCard.vue +232 -0
- package/components/elements/step-slider/AStepSliderColNumber.vue +178 -0
- package/components/elements/table/ATable.vue +1 -1
- package/components/elements/table/table.config.ts +2 -2
- package/components/elements/tree-select/ATreeSelect.vue +97 -113
- package/components/elements/tree-select/TreeService.ts +142 -207
- package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -0
- package/components/elements/tree-select/types.ts +40 -11
- package/components/elements/tree-select/utils.ts +30 -0
- package/components/elements/tree-select-modal/ATreeSelectModal.vue +217 -0
- package/components/features/color-mode/AColorMode.client.vue +74 -32
- package/components/features/dropdown/ADropdownV2.vue +140 -0
- package/components/features/lang-switcher/lang-switcher.vue +125 -40
- package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -3
- package/components/features/payment/banner/PaymentBanner.vue +3 -3
- package/components/features/payment/banner/UpSellBanner.vue +3 -3
- package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +45 -27
- package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +34 -23
- package/components/features/payment/process/PaymentMethodSidePanel.vue +66 -49
- package/components/features/payment/process/PaymentProcess.vue +6 -6
- package/components/features/payment/process/PaymentTopUpSidePanel.vue +49 -63
- package/components/features/pk-mobile-services/APkMobileServices.vue +6 -28
- package/components/features//321/201hange-version/AChangeVersion.vue +2 -2
- package/components/forms/checkbox/ACheckbox.vue +1 -1
- package/components/forms/checkbox/ACheckboxV2.vue +229 -0
- package/components/forms/feedback-form/FeedbackForm.vue +8 -8
- package/components/forms/feedback-form/FeedbackFormV2.vue +182 -0
- package/components/forms/input/AInputV2.vue +542 -0
- package/components/forms/input/date/AInputDate.vue +2 -2
- package/components/forms/input/password/AInputPassword.vue +8 -2
- package/components/forms/input/standard/AInputStandard.vue +3 -3
- package/components/forms/input/textarea/ATextarea.vue +2 -2
- package/components/forms/input/textarea/ATextareaV2.vue +248 -0
- package/components/forms/toggle/AToggle.vue +2 -3
- package/components/forms/toggle/AToggleV2.vue +71 -0
- package/components/modals/AnotherDeviceModal.vue +22 -18
- package/components/modals/ApplicationAcceptedModal.vue +12 -15
- package/components/modals/ConnectingTariffModal.vue +13 -20
- package/components/modals/ContactsMobileModel.vue +1 -1
- package/components/modals/ContentNavigationModal.vue +77 -333
- package/components/modals/Insufficient-funds-modal.vue +18 -33
- package/components/modals/LimitReachedModal.vue +17 -14
- package/components/modals/NoAccessModal.vue +9 -11
- package/components/modals/PaymentMethodModal.vue +1 -1
- package/components/modals/ReportBugConfirmModal.vue +12 -10
- package/components/modals/ReportBugModal.vue +46 -38
- package/components/modals/Resend.vue +9 -10
- package/components/modals/SubmitApplicationModal.vue +27 -24
- package/components/modals/id/IdBanner.vue +3 -3
- package/components/modals/id/IdConfirmAccountOtpModal.vue +4 -9
- package/components/modals/id/IdLoginModal.vue +3 -8
- package/components/modals/id/IdModals.vue +23 -10
- package/components/modals/id/IdRecoveryModal.vue +1 -1
- package/components/modals/id/IdTwoFactorModal.vue +3 -8
- package/components/navigation/bottom-navigation/ABottomNavigation.vue +1 -1
- package/components/navigation/breadcrumbs/ABreadcrumbs.vue +106 -45
- package/components/navigation/breadcrumbs/types.ts +3 -0
- package/components/navigation/footer/AFooter.vue +39 -40
- package/components/navigation/footer/ui/a-footer-accordion.vue +9 -9
- package/components/navigation/header/AHeader.vue +68 -51
- package/components/navigation/header/AlmatyContacts.vue +78 -78
- package/components/navigation/header/CardGallery.vue +9 -7
- package/components/navigation/header/ContactMenu.vue +26 -92
- package/components/navigation/header/HeaderLink.vue +181 -213
- package/components/navigation/header/HeaderUsage.vue +139 -0
- package/components/navigation/header/ListItem.vue +2 -2
- package/components/navigation/header/NavCard.vue +1 -1
- package/components/navigation/header/NavList.vue +33 -92
- package/components/navigation/header/NotificationsMenu.vue +2 -3
- package/components/navigation/header/ProductMenu.vue +81 -127
- package/components/navigation/header/ProfileMenu.vue +122 -151
- package/components/navigation/header/SystemNotification.vue +108 -0
- package/components/navigation/mobile-navigation/AMobileNavigation.vue +23 -15
- package/components/navigation/pill-tabs/APillTabs.vue +2 -2
- package/components/navigation/pill-tabs/APillTabsV2.vue +226 -0
- package/components/overlays/drawer/ADrawerV2.vue +335 -0
- package/components/overlays/modal/AModal.vue +4 -4
- package/components/overlays/modal/AModalV2.vue +397 -0
- package/components/overlays/side-panel/ASidePanel.vue +10 -7
- package/components/overlays/sideover/ASlideover.vue +6 -6
- package/components/overlays/tooltip/ATooltip.vue +1 -1
- package/components/overlays/tooltip/ATooltipV2.vue +223 -0
- package/components/overlays/tooltip/types.ts +26 -0
- package/components/overlays/tooltip/useTooltipTrigger.ts +101 -0
- package/components/transitions/ATransitionHeight.vue +1 -1
- package/composables/useAccessTokenCookie.ts +25 -0
- package/composables/useActiveNavigation.ts +84 -0
- package/composables/useChipOverflow.ts +92 -0
- package/composables/useHeaderNavigationLinks.ts +140 -98
- package/icons/archive.vue +16 -0
- package/icons/arrow/arrow-left-right.vue +8 -0
- package/icons/arrow/arrow-right.vue +14 -0
- package/icons/arrow/arrows-in.vue +11 -0
- package/icons/arrow/arrows-out.vue +11 -0
- package/icons/arrow/arrows-resize-in.vue +38 -0
- package/icons/arrow/arrows-resize-out.vue +17 -0
- package/icons/bill.vue +3 -0
- package/icons/bot.vue +52 -0
- package/icons/briefcase.vue +14 -0
- package/icons/building.vue +9 -0
- package/icons/car-side.vue +16 -0
- package/icons/cart.vue +15 -0
- package/icons/chart-no-axes-column.vue +3 -0
- package/icons/clock-time.vue +24 -0
- package/icons/cloud/cloud-upload.vue +3 -0
- package/icons/code.vue +9 -0
- package/icons/compare-outlined.vue +8 -0
- package/icons/dots-horizontal.vue +31 -0
- package/icons/download-line.vue +13 -0
- package/icons/download-rounded.vue +15 -0
- package/icons/egov.vue +41 -0
- package/icons/elicense.vue +38 -0
- package/icons/favourite-bookmark-outline.vue +17 -0
- package/icons/file/file-check-corner.vue +3 -0
- package/icons/file/file-spreadsheet.vue +3 -0
- package/icons/file-pen.vue +31 -0
- package/icons/file-stack.vue +31 -0
- package/icons/file-types/excel.vue +131 -0
- package/icons/file-types/html.vue +13 -0
- package/icons/file-types/jpeg.vue +16 -0
- package/icons/file-types/pdf.vue +11 -0
- package/icons/file-types/png.vue +11 -0
- package/icons/file-types/rar.vue +11 -0
- package/icons/file-types/word.vue +50 -0
- package/icons/file-types/zip.vue +11 -0
- package/icons/gauge.vue +17 -0
- package/icons/git-compare.vue +38 -0
- package/icons/git-fork.vue +3 -0
- package/icons/graduation-cap.vue +31 -0
- package/icons/graph-loading.vue +34 -0
- package/icons/headset.vue +6 -0
- package/icons/help-question-circle.vue +26 -0
- package/icons/in-row-type.vue +46 -0
- package/icons/in-table-type.vue +29 -0
- package/icons/landmark.vue +3 -0
- package/icons/layers.vue +3 -0
- package/icons/letter/letter-a.vue +6 -0
- package/icons/letter/letter-b.vue +6 -0
- package/icons/letter/letter-c.vue +6 -0
- package/icons/letter/letter-d.vue +6 -0
- package/icons/letter/letter-e.vue +6 -0
- package/icons/link-url.vue +3 -0
- package/icons/list-tree.vue +3 -0
- package/icons/mail-question-mark.vue +8 -0
- package/icons/message/message-square.vue +3 -0
- package/icons/message-dotted.vue +30 -0
- package/icons/network.vue +3 -0
- package/icons/newspaper.vue +3 -0
- package/icons/notification-error.vue +17 -0
- package/icons/person.vue +22 -0
- package/icons/phone-call.vue +6 -0
- package/icons/phone-reversed.vue +3 -0
- package/icons/route.vue +7 -0
- package/icons/scan-search.vue +3 -0
- package/icons/settings.vue +26 -0
- package/icons/shield-alert.vue +31 -0
- package/icons/shield-verified.vue +14 -0
- package/icons/socials/facebook-color.vue +16 -0
- package/icons/socials/globe-color.vue +16 -0
- package/icons/socials/instagram-color.vue +46 -0
- package/icons/socials/linkedin-color.vue +14 -0
- package/icons/socials/telegram-color.vue +16 -0
- package/icons/socials/tiktok-color.vue +14 -0
- package/icons/socials/vk-color.vue +16 -0
- package/icons/socials/youtube-color.vue +16 -0
- package/icons/sparkles.vue +3 -0
- package/icons/sun.vue +13 -3
- package/icons/users-round.vue +3 -0
- package/icons/view-eye-open.vue +13 -0
- package/icons/workflow.vue +3 -0
- package/icons/zap.vue +3 -0
- package/lang/en.ts +49 -5
- package/lang/kk.ts +50 -6
- package/lang/ru.ts +51 -7
- package/package.json +1 -1
- package/plugins/toast.client.ts +38 -55
- package/shared/constans/pages.ts +8 -2
- package/tailwind.config.ts +147 -116
- package/utils/twMerge.ts +34 -0
- package/components/elements/tree-select/components/tree-select-nodes.vue +0 -91
- package/components/navigation/header/TopHeader.vue +0 -196
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import AFooterAccordion from '#adata-ui/components/navigation/footer/ui/a-footer-accordion.vue'
|
|
3
|
+
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
2
4
|
import AdataLogo from '#adata-ui/icons/adata-logo.vue'
|
|
3
5
|
import LinkedinIcon from '#adata-ui/icons/linkedin.vue'
|
|
4
|
-
import
|
|
6
|
+
import FaceBookIcon from '#adata-ui/icons/socials/face-book.vue'
|
|
5
7
|
import InstagramIcon from '#adata-ui/icons/socials/instagram.vue'
|
|
6
8
|
import TelegramIcon from '#adata-ui/icons/socials/telegram.vue'
|
|
7
|
-
import FaceBookIcon from '#adata-ui/icons/socials/face-book.vue'
|
|
8
9
|
import TikTokIcon from '#adata-ui/icons/socials/tik-tok.vue'
|
|
9
|
-
import
|
|
10
|
-
import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
|
|
10
|
+
import YouTubeIcon from '#adata-ui/icons/socials/youtube.vue'
|
|
11
11
|
import { PAGES } from '#adata-ui/shared/constans/pages'
|
|
12
|
+
import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
|
|
12
13
|
import { AIconExpandWindow, AIconLocation, AIconMail, AIconPhone } from '#components'
|
|
13
|
-
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
14
14
|
|
|
15
15
|
const year = new Date().getFullYear()
|
|
16
16
|
const { t, locale } = useI18n()
|
|
@@ -20,33 +20,33 @@ const socialMedia = [
|
|
|
20
20
|
{
|
|
21
21
|
icon: LinkedinIcon,
|
|
22
22
|
link: 'https://www.linkedin.com/company/adata-kz/?viewAsMember=true',
|
|
23
|
-
name: 'Linkedin'
|
|
23
|
+
name: 'Linkedin',
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
26
|
icon: YouTubeIcon,
|
|
27
27
|
link: 'https://www.youtube.com/channel/UCPkbtgwgTZbMJXjmTi3R8Uw/featured',
|
|
28
|
-
name: 'YouTube'
|
|
28
|
+
name: 'YouTube',
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
icon: InstagramIcon,
|
|
32
32
|
link: 'https://www.instagram.com/adata.kz/?igshid=253i4qxg3els',
|
|
33
|
-
name: 'Instagram'
|
|
33
|
+
name: 'Instagram',
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
icon: TelegramIcon,
|
|
37
37
|
link: 'https://t.me/adatakz_official',
|
|
38
|
-
name: 'Telegram'
|
|
38
|
+
name: 'Telegram',
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
icon: FaceBookIcon,
|
|
42
42
|
link: 'https://www.facebook.com/adata.kz',
|
|
43
|
-
name: 'Facebook'
|
|
43
|
+
name: 'Facebook',
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
icon: TikTokIcon,
|
|
47
47
|
link: 'https://www.tiktok.com/@adata.kz?lang=ru-RU',
|
|
48
|
-
name: 'Tiktok'
|
|
49
|
-
}
|
|
48
|
+
name: 'Tiktok',
|
|
49
|
+
},
|
|
50
50
|
]
|
|
51
51
|
|
|
52
52
|
const mainLinks = computed(() => ({
|
|
@@ -74,27 +74,27 @@ const mainLinks = computed(() => ({
|
|
|
74
74
|
{
|
|
75
75
|
title: t('footer.zakupki.title'),
|
|
76
76
|
link: urls.zakupki + PAGES.tender.main,
|
|
77
|
-
isNew: true
|
|
78
|
-
}
|
|
77
|
+
isNew: true,
|
|
78
|
+
},
|
|
79
79
|
],
|
|
80
80
|
[
|
|
81
81
|
{
|
|
82
82
|
title: t('footer.compliance.title'),
|
|
83
83
|
link: buildLocalizedUrl(locale.value, urls.compliance, PAGES.compliance.l),
|
|
84
|
-
isNew: true
|
|
84
|
+
isNew: true,
|
|
85
85
|
},
|
|
86
86
|
{
|
|
87
87
|
title: t('header.products.edo.label'),
|
|
88
88
|
link: urls.edo_docs,
|
|
89
|
-
isNew: true
|
|
89
|
+
isNew: true,
|
|
90
90
|
},
|
|
91
91
|
{
|
|
92
92
|
title: t('footer.fea.title'),
|
|
93
93
|
link: buildLocalizedUrl(locale.value, urls.tnved, PAGES.fea.main),
|
|
94
|
-
isNew: true
|
|
94
|
+
isNew: true,
|
|
95
95
|
},
|
|
96
|
-
]
|
|
97
|
-
]
|
|
96
|
+
],
|
|
97
|
+
],
|
|
98
98
|
},
|
|
99
99
|
useful: {
|
|
100
100
|
title: t('footer.useful'),
|
|
@@ -123,11 +123,11 @@ const mainLinks = computed(() => ({
|
|
|
123
123
|
},
|
|
124
124
|
{
|
|
125
125
|
title: t('footer.info.onlineServices'),
|
|
126
|
-
link: buildLocalizedUrl(locale.value, urls.pk, PAGES.services
|
|
126
|
+
link: buildLocalizedUrl(locale.value, urls.pk, `${PAGES.services}/taxpayer`),
|
|
127
127
|
},
|
|
128
|
-
]
|
|
129
|
-
]
|
|
130
|
-
}
|
|
128
|
+
],
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
131
|
}))
|
|
132
132
|
|
|
133
133
|
const contactLinks = computed(() => ({
|
|
@@ -161,16 +161,15 @@ const contactLinks = computed(() => ({
|
|
|
161
161
|
},
|
|
162
162
|
],
|
|
163
163
|
}))
|
|
164
|
-
|
|
165
164
|
</script>
|
|
166
165
|
|
|
167
166
|
<template>
|
|
168
167
|
<footer
|
|
169
168
|
id="footer"
|
|
170
|
-
class="bg-deepblue-900 dark:bg-gray-900
|
|
169
|
+
class="rounded-t-2xl bg-deepblue-900 py-4 dark:bg-gray-900 lg:py-5"
|
|
171
170
|
>
|
|
172
|
-
<div class="a-container mobile-padding py-5 text-white
|
|
173
|
-
<div class="flex flex-col gap-8
|
|
171
|
+
<div class="a-container mobile-padding flex flex-col justify-between gap-8 py-5 text-white lg:flex-row">
|
|
172
|
+
<div class="flex flex-col justify-between gap-8">
|
|
174
173
|
<div class="flex flex-col gap-4">
|
|
175
174
|
<adata-logo
|
|
176
175
|
filled
|
|
@@ -178,11 +177,11 @@ const contactLinks = computed(() => ({
|
|
|
178
177
|
class="shrink-0"
|
|
179
178
|
/>
|
|
180
179
|
|
|
181
|
-
<p class="text-
|
|
180
|
+
<p class="text-body-md">
|
|
182
181
|
{{ t('footer.subtitle') }}
|
|
183
182
|
</p>
|
|
184
183
|
|
|
185
|
-
<div class="hidden lg:flex
|
|
184
|
+
<div class="hidden gap-8 lg:flex">
|
|
186
185
|
<nuxt-link
|
|
187
186
|
v-for="(social, idx) in socialMedia"
|
|
188
187
|
:key="idx"
|
|
@@ -201,13 +200,13 @@ const contactLinks = computed(() => ({
|
|
|
201
200
|
</div>
|
|
202
201
|
</div>
|
|
203
202
|
|
|
204
|
-
<p class="hidden lg:block
|
|
203
|
+
<p class="hidden text-body-sm lg:block">
|
|
205
204
|
{{ year }} © {{ t('footer.LLP') }} "Alldata"
|
|
206
205
|
</p>
|
|
207
206
|
</div>
|
|
208
207
|
|
|
209
|
-
<div class="flex gap-6 lg:
|
|
210
|
-
<div class="flex gap-[18px] lg:
|
|
208
|
+
<div class="flex flex-col gap-6 lg:flex-row lg:gap-[75px]">
|
|
209
|
+
<div class="flex flex-col gap-[18px] lg:flex-row lg:gap-[75px]">
|
|
211
210
|
<div
|
|
212
211
|
v-for="(item, idx) in mainLinks"
|
|
213
212
|
:key="idx"
|
|
@@ -219,10 +218,10 @@ const contactLinks = computed(() => ({
|
|
|
219
218
|
/>
|
|
220
219
|
</div>
|
|
221
220
|
</div>
|
|
222
|
-
<!--noindex-->
|
|
223
|
-
<div class="flex flex-col gap-2
|
|
221
|
+
<!-- noindex -->
|
|
222
|
+
<div class="flex flex-col items-start gap-2" data-nosnippet>
|
|
224
223
|
<nuxt-link
|
|
225
|
-
class="
|
|
224
|
+
class="cursor-pointer border-b-[0.5px] border-white pb-3 pr-4 text-body-md-strong"
|
|
226
225
|
:to="contactLinks.link?.replace(/\/$/, '')"
|
|
227
226
|
>
|
|
228
227
|
{{ contactLinks.title }}
|
|
@@ -232,10 +231,10 @@ const contactLinks = computed(() => ({
|
|
|
232
231
|
<div
|
|
233
232
|
v-for="(link, idx) in contactLinks.items"
|
|
234
233
|
:key="idx"
|
|
235
|
-
class="flex gap-2
|
|
234
|
+
class="flex items-center gap-2"
|
|
236
235
|
>
|
|
237
236
|
<nuxt-link
|
|
238
|
-
class="
|
|
237
|
+
class="flex cursor-pointer items-center gap-2 text-body-sm-medium"
|
|
239
238
|
:class="link.class"
|
|
240
239
|
:to="link.link?.replace(/\/$/, '')"
|
|
241
240
|
>
|
|
@@ -256,10 +255,10 @@ const contactLinks = computed(() => ({
|
|
|
256
255
|
</div>
|
|
257
256
|
</div>
|
|
258
257
|
</div>
|
|
259
|
-
|
|
258
|
+
<!-- /noindex -->
|
|
260
259
|
</div>
|
|
261
260
|
|
|
262
|
-
<div class="
|
|
261
|
+
<div class="flex flex-wrap gap-8 lg:hidden">
|
|
263
262
|
<nuxt-link
|
|
264
263
|
v-for="(social, idx) in socialMedia"
|
|
265
264
|
:key="idx"
|
|
@@ -276,7 +275,7 @@ const contactLinks = computed(() => ({
|
|
|
276
275
|
</nuxt-link>
|
|
277
276
|
</div>
|
|
278
277
|
|
|
279
|
-
<p class="lg:hidden
|
|
278
|
+
<p class="text-body-sm lg:hidden">
|
|
280
279
|
{{ year }} © {{ t('footer.LLP') }} "Alldata"
|
|
281
280
|
</p>
|
|
282
281
|
</div>
|
|
@@ -18,7 +18,7 @@ const isDesktop = useMediaQuery('(max-width: 1024px)')
|
|
|
18
18
|
|
|
19
19
|
const open = ref(false)
|
|
20
20
|
function toFinalValues(el: HTMLDivElement) {
|
|
21
|
-
el.style.height = el.scrollHeight
|
|
21
|
+
el.style.height = `${el.scrollHeight}px`
|
|
22
22
|
el.style.opacity = '1'
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -37,17 +37,17 @@ const filterCheck = computed(() => {
|
|
|
37
37
|
</script>
|
|
38
38
|
|
|
39
39
|
<template>
|
|
40
|
-
<div class="flex flex-col gap-2
|
|
41
|
-
<div class="flex
|
|
40
|
+
<div class="flex flex-col items-start gap-2">
|
|
41
|
+
<div class="flex w-full justify-between gap-2">
|
|
42
42
|
<nuxt-link
|
|
43
|
-
class="
|
|
43
|
+
class="cursor-default text-body-md-strong lg:border-b-[0.5px] lg:border-white lg:pb-3 lg:pr-4"
|
|
44
44
|
:class="{ 'cursor-pointer': link }"
|
|
45
45
|
:to="link?.replace(/\/$/, '')"
|
|
46
46
|
>
|
|
47
47
|
{{ label }}
|
|
48
48
|
</nuxt-link>
|
|
49
49
|
|
|
50
|
-
<div class="transition-all lg:hidden
|
|
50
|
+
<div class="cursor-pointer transition-all lg:hidden">
|
|
51
51
|
<a-icon-chevron-down
|
|
52
52
|
v-if="content.length"
|
|
53
53
|
filled
|
|
@@ -67,7 +67,7 @@ const filterCheck = computed(() => {
|
|
|
67
67
|
>
|
|
68
68
|
<div
|
|
69
69
|
v-if="filterCheck"
|
|
70
|
-
class="flex gap-3 lg:
|
|
70
|
+
class="flex flex-col gap-3 lg:flex-row lg:gap-6"
|
|
71
71
|
>
|
|
72
72
|
<div
|
|
73
73
|
v-for="(subItem, subIdx) in content"
|
|
@@ -77,10 +77,10 @@ const filterCheck = computed(() => {
|
|
|
77
77
|
<div
|
|
78
78
|
v-for="(link, idx) in subItem"
|
|
79
79
|
:key="idx"
|
|
80
|
-
class="flex gap-2
|
|
80
|
+
class="flex items-center gap-2"
|
|
81
81
|
>
|
|
82
82
|
<nuxt-link
|
|
83
|
-
class="
|
|
83
|
+
class="flex cursor-pointer items-center gap-2 text-body-sm lg:font-medium"
|
|
84
84
|
:to="link.link?.replace(/\/$/, '')"
|
|
85
85
|
>
|
|
86
86
|
{{ link.title }}
|
|
@@ -88,7 +88,7 @@ const filterCheck = computed(() => {
|
|
|
88
88
|
|
|
89
89
|
<div
|
|
90
90
|
v-if="link.isNew"
|
|
91
|
-
class="
|
|
91
|
+
class="rounded-xs bg-white/20 px-1 py-[2px] text-body-sm font-bold"
|
|
92
92
|
>
|
|
93
93
|
NEW
|
|
94
94
|
</div>
|
|
@@ -1,23 +1,26 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import type { ProjectKeys } from '#adata-ui/components/navigation/header/types'
|
|
3
3
|
import AColorMode from '#adata-ui/components/features/color-mode/AColorMode.client.vue'
|
|
4
|
+
import ADropdownV2 from '#adata-ui/components/features/dropdown/ADropdownV2.vue'
|
|
4
5
|
import LangSwitcher from '#adata-ui/components/features/lang-switcher/lang-switcher.vue'
|
|
5
6
|
import AChangeVersion from '#adata-ui/components/features/сhange-version/AChangeVersion.vue'
|
|
7
|
+
import HeaderUsage from '#adata-ui/components/navigation/header/HeaderUsage.vue'
|
|
6
8
|
import ProfileMenu from '#adata-ui/components/navigation/header/ProfileMenu.vue'
|
|
7
|
-
import
|
|
9
|
+
import SystemNotification from '#adata-ui/components/navigation/header/SystemNotification.vue'
|
|
8
10
|
import { useContacts, useCurrentModule } from '#adata-ui/composables/projectState'
|
|
11
|
+
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
9
12
|
import AdataLogo from '#adata-ui/icons/adata-logo.vue'
|
|
10
|
-
import Arrow from '#adata-ui/icons/chevron/chevron-down.vue'
|
|
11
13
|
import Logo from '#adata-ui/icons/logo.vue'
|
|
12
14
|
import { buildLocalizedUrl, navigateToLocalizedPage } from '#adata-ui/utils/localizedNavigation'
|
|
15
|
+
import { useElementBounding } from '@vueuse/core'
|
|
13
16
|
import HeaderLink from './HeaderLink.vue'
|
|
14
|
-
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
15
17
|
|
|
16
18
|
defineOptions({ name: 'AHeader' })
|
|
17
19
|
|
|
18
20
|
const props = withDefaults(defineProps<Props>(), {
|
|
19
21
|
limitRemaining: 0,
|
|
20
22
|
daysRemaining: 0,
|
|
23
|
+
maxLimit: 0,
|
|
21
24
|
balance: 0,
|
|
22
25
|
rate: 'Базовый',
|
|
23
26
|
showLogIn: true,
|
|
@@ -31,10 +34,11 @@ interface Props {
|
|
|
31
34
|
replenish?: string
|
|
32
35
|
hasNotification?: boolean
|
|
33
36
|
email: string | undefined
|
|
34
|
-
rate
|
|
35
|
-
daysRemaining
|
|
36
|
-
limitRemaining
|
|
37
|
-
|
|
37
|
+
rate?: string
|
|
38
|
+
daysRemaining?: number
|
|
39
|
+
limitRemaining?: number
|
|
40
|
+
maxLimit?: number
|
|
41
|
+
balance?: number
|
|
38
42
|
isAuthenticated: boolean
|
|
39
43
|
showLogIn?: boolean
|
|
40
44
|
mobileHeaderType?: 'search' | 'default'
|
|
@@ -42,18 +46,19 @@ interface Props {
|
|
|
42
46
|
oldVersion?: string
|
|
43
47
|
}
|
|
44
48
|
|
|
45
|
-
const { t } = useI18n()
|
|
46
|
-
const { locale } = useI18n()
|
|
49
|
+
const { locale, t } = useI18n()
|
|
47
50
|
|
|
48
51
|
useCurrentModule().value = props.module
|
|
49
|
-
const appConfig = useAppConfig()
|
|
50
52
|
const { myLayer }: any = useAppConfig()
|
|
51
53
|
const urls = useUrls()
|
|
52
54
|
|
|
53
|
-
const langIsOn =
|
|
54
|
-
const contacts =
|
|
55
|
+
const langIsOn = myLayer.langIsOn
|
|
56
|
+
const contacts = useContacts()
|
|
55
57
|
const { loginModal } = useIdModals()
|
|
56
58
|
|
|
59
|
+
const headerRef = ref<HTMLElement | null>(null)
|
|
60
|
+
const { bottom: headerBottom } = useElementBounding(headerRef)
|
|
61
|
+
|
|
57
62
|
function goAuth() {
|
|
58
63
|
if (myLayer.authMode !== 'local') {
|
|
59
64
|
if (window) {
|
|
@@ -82,14 +87,13 @@ function goToAnotherModule() {
|
|
|
82
87
|
|
|
83
88
|
async function fetchContacts() {
|
|
84
89
|
try {
|
|
85
|
-
const
|
|
90
|
+
const { data } = await $fetch<{ data: unknown }>(
|
|
86
91
|
'https://pk-api.adata.kz/api/v1/data/counterparty/contacts/sales-department',
|
|
87
92
|
)
|
|
88
|
-
const { data } = await response.json()
|
|
89
93
|
contacts.value = data
|
|
90
94
|
}
|
|
91
95
|
catch (e) {
|
|
92
|
-
console.error(e.message)
|
|
96
|
+
console.error(e instanceof Error ? e.message : e)
|
|
93
97
|
}
|
|
94
98
|
}
|
|
95
99
|
|
|
@@ -100,14 +104,10 @@ onMounted(() => {
|
|
|
100
104
|
|
|
101
105
|
<template>
|
|
102
106
|
<div>
|
|
103
|
-
<
|
|
104
|
-
:days-remaining="daysRemaining"
|
|
105
|
-
:is-authenticated="isAuthenticated"
|
|
106
|
-
:module-name="module"
|
|
107
|
-
:limit-remaining="limitRemaining"
|
|
108
|
-
/>
|
|
107
|
+
<system-notification />
|
|
109
108
|
<header
|
|
110
|
-
|
|
109
|
+
ref="headerRef"
|
|
110
|
+
class="relative h-16 border-b border-deepblue-900/10 bg-gray-50/20 backdrop-blur-lg dark:border-gray-200/10 dark:bg-gray-900/30"
|
|
111
111
|
>
|
|
112
112
|
<div class="a-container mobile-padding flex h-full items-center justify-between gap-2">
|
|
113
113
|
<!-- Desktop hidden -->
|
|
@@ -117,46 +117,47 @@ onMounted(() => {
|
|
|
117
117
|
>
|
|
118
118
|
<div
|
|
119
119
|
v-if="mobileHeaderType === 'default'"
|
|
120
|
-
class="
|
|
120
|
+
class="text-deepblue dark:text-[#E3E5E8]"
|
|
121
|
+
@click="goToAnotherModule"
|
|
121
122
|
>
|
|
122
|
-
<
|
|
123
|
-
class="text-deepblue dark:text-[#E3E5E8]"
|
|
124
|
-
@click="goToAnotherModule"
|
|
125
|
-
>
|
|
126
|
-
<span class="visually-hidden"> Сервисы Adata.kz</span>
|
|
123
|
+
<span class="visually-hidden"> Сервисы Adata.kz</span>
|
|
127
124
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
</div>
|
|
125
|
+
<adata-logo
|
|
126
|
+
:font-controlled="false"
|
|
127
|
+
filled
|
|
128
|
+
/>
|
|
133
129
|
</div>
|
|
134
130
|
<div
|
|
135
131
|
v-else-if="mobileHeaderType === 'search'"
|
|
136
|
-
class="flex w-full items-center gap-2
|
|
132
|
+
class="flex w-full items-center gap-2 lg:hidden"
|
|
137
133
|
>
|
|
138
134
|
<logo
|
|
139
135
|
class="dark:text-gray-200"
|
|
140
136
|
@click="goToAnotherModule"
|
|
141
137
|
/>
|
|
142
138
|
<button
|
|
143
|
-
class="flex w-full items-center gap-2 rounded
|
|
139
|
+
class="flex w-full items-center gap-2 rounded-full border border-gray-300/50 bg-white/30 px-4 py-1.5 backdrop-blur-sm dark:border-gray-600/50 dark:bg-white/5 dark:text-gray-300"
|
|
144
140
|
@click="$emit('search')"
|
|
145
141
|
>
|
|
146
|
-
<a-icon-search />
|
|
147
|
-
<span class="body-400"
|
|
142
|
+
<a-icon-search class="text-gray-400 dark:text-gray-500" />
|
|
143
|
+
<span class="text-body-md text-gray-500 dark:text-gray-400">{{ t('header.search') }}</span>
|
|
148
144
|
</button>
|
|
149
145
|
</div>
|
|
150
146
|
</section>
|
|
151
|
-
<div class="lg:hidden">
|
|
147
|
+
<div class="flex items-center gap-1 lg:hidden">
|
|
148
|
+
<a-color-mode />
|
|
152
149
|
<lang-switcher
|
|
153
150
|
v-if="langIsOn || module === 'fea'"
|
|
154
|
-
class="lg:hidden"
|
|
155
151
|
is-mobile
|
|
156
152
|
/>
|
|
157
153
|
</div>
|
|
158
154
|
<!-- Mobile hidden -->
|
|
159
|
-
<nav
|
|
155
|
+
<nav
|
|
156
|
+
class="hidden items-center gap-4 lg:flex"
|
|
157
|
+
itemscope
|
|
158
|
+
itemtype="https://schema.org/SiteNavigationElement"
|
|
159
|
+
role="list"
|
|
160
|
+
>
|
|
160
161
|
<nuxt-link-locale
|
|
161
162
|
aria-label="Adata-logo"
|
|
162
163
|
:to="buildLocalizedUrl(locale, urls.landing)"
|
|
@@ -169,11 +170,18 @@ onMounted(() => {
|
|
|
169
170
|
filled
|
|
170
171
|
/>
|
|
171
172
|
</nuxt-link-locale>
|
|
172
|
-
<header-link />
|
|
173
|
+
<header-link :menu-top="headerBottom || 64" />
|
|
173
174
|
</nav>
|
|
174
175
|
<div class="text-deepblue hidden items-center gap-4 dark:text-[#E3E5E8] lg:flex">
|
|
176
|
+
<header-usage
|
|
177
|
+
v-if="isAuthenticated"
|
|
178
|
+
:limit-remaining="limitRemaining"
|
|
179
|
+
:max-limit="maxLimit"
|
|
180
|
+
:days-remaining="daysRemaining"
|
|
181
|
+
/>
|
|
182
|
+
|
|
175
183
|
<!-- Mobile hidden -->
|
|
176
|
-
<div class="hidden items-center gap-
|
|
184
|
+
<div class="hidden items-center gap-2 lg:flex">
|
|
177
185
|
<a-change-version
|
|
178
186
|
v-if="oldVersion"
|
|
179
187
|
:url="oldVersion"
|
|
@@ -182,22 +190,31 @@ onMounted(() => {
|
|
|
182
190
|
<lang-switcher v-if="langIsOn || module === 'fea'" />
|
|
183
191
|
</div>
|
|
184
192
|
|
|
185
|
-
<a-dropdown
|
|
193
|
+
<a-dropdown-v2
|
|
186
194
|
v-show="isAuthenticated"
|
|
187
|
-
placement="
|
|
195
|
+
placement="bottom-end"
|
|
188
196
|
>
|
|
189
|
-
<template #default="{
|
|
190
|
-
<
|
|
191
|
-
|
|
197
|
+
<template #default="{ toggle, isOpen }">
|
|
198
|
+
<button
|
|
199
|
+
type="button"
|
|
200
|
+
class="hidden h-8 cursor-pointer items-center gap-1.5 rounded-full px-3 text-body-md-medium transition-colors duration-150 hover:bg-deepblue-900/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500/50 focus-visible:ring-offset-1 dark:hover:bg-white/10 dark:focus-visible:ring-offset-gray-900 lg:inline-flex"
|
|
201
|
+
:class="isOpen
|
|
202
|
+
? 'bg-deepblue-900/10 text-deepblue-900 dark:bg-white/15 dark:text-white'
|
|
203
|
+
: 'text-gray-900 dark:text-gray-100'"
|
|
192
204
|
data-test-id="header-email-text"
|
|
193
|
-
|
|
205
|
+
:aria-label="email"
|
|
206
|
+
@click.stop="toggle"
|
|
194
207
|
>
|
|
195
208
|
<span>{{ email }}</span>
|
|
196
|
-
<
|
|
197
|
-
|
|
209
|
+
<a-icon-chevron-down
|
|
210
|
+
class="shrink-0 transition-transform duration-200"
|
|
211
|
+
:class="{ 'rotate-180': isOpen }"
|
|
212
|
+
/>
|
|
213
|
+
</button>
|
|
198
214
|
</template>
|
|
199
215
|
<template #content>
|
|
200
216
|
<profile-menu
|
|
217
|
+
:email="email"
|
|
201
218
|
:balance="balance"
|
|
202
219
|
:days-remaining="daysRemaining"
|
|
203
220
|
:limit-remaining="limitRemaining"
|
|
@@ -206,7 +223,7 @@ onMounted(() => {
|
|
|
206
223
|
@logout="$emit('logout')"
|
|
207
224
|
/>
|
|
208
225
|
</template>
|
|
209
|
-
</a-dropdown>
|
|
226
|
+
</a-dropdown-v2>
|
|
210
227
|
<a-button-login
|
|
211
228
|
v-show="!isAuthenticated && showLogIn"
|
|
212
229
|
@click="goAuth"
|