adata-ui 2.1.40-beta.10 → 2.1.40-beta.12
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/.claude/settings.local.json +19 -0
- package/assets/styles/index.scss +67 -5
- package/components/elements/a-select-row/ASelectRowV2.vue +8 -8
- 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 +7 -5
- package/components/elements/button-login/index.vue +1 -1
- package/components/elements/chip-wrapper/AChipWrapper.vue +1 -1
- package/components/elements/chips/AChips.vue +2 -2
- package/components/elements/digit-badge/ADigitBadge.vue +21 -19
- package/components/elements/feature-description/AFeatureDescription.vue +1 -1
- package/components/elements/leave-note/ALeaveNote.vue +1 -1
- package/components/elements/pagination/APagination.vue +7 -7
- package/components/elements/segmented/ASegmentedV2.vue +103 -10
- package/components/elements/select/ASelect.vue +4 -4
- package/components/elements/select/ASelectMobile.vue +2 -2
- package/components/elements/select/ASelectV2.vue +10 -11
- package/components/elements/select/ui/select-button.vue +1 -1
- package/components/elements/status-badge/AStatusBadge.vue +22 -19
- package/components/elements/status-badge-v2/StatusBadgeV2.vue +1 -3
- 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 +1 -1
- package/components/features/dropdown/ADropdownV2.vue +1 -2
- package/components/features/lang-switcher/lang-switcher.vue +9 -4
- 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 +43 -27
- package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +34 -23
- package/components/features/payment/process/PaymentMethodSidePanel.vue +61 -49
- package/components/features/payment/process/PaymentProcess.vue +6 -6
- package/components/features/payment/process/PaymentTopUpSidePanel.vue +44 -63
- package/components/features/pk-mobile-services/APkMobileServices.vue +1 -1
- package/components/features//321/201hange-version/AChangeVersion.vue +2 -2
- package/components/forms/checkbox/ACheckbox.vue +1 -1
- package/components/forms/checkbox/ACheckboxV2.vue +5 -5
- package/components/forms/input/AInputV2.vue +4 -4
- 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/toggle/AToggle.vue +2 -3
- package/components/forms/toggle/AToggleV2.vue +3 -3
- package/components/modals/AnotherDeviceModal.vue +1 -1
- package/components/modals/ContactsMobileModel.vue +1 -1
- package/components/modals/ContentNavigationModal.vue +77 -333
- package/components/modals/Insufficient-funds-modal.vue +1 -1
- package/components/modals/PaymentMethodModal.vue +1 -1
- package/components/modals/id/IdBanner.vue +3 -3
- package/components/modals/id/IdRecoveryModal.vue +1 -1
- 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 +13 -19
- package/components/navigation/header/AlmatyContacts.vue +78 -78
- package/components/navigation/header/CardGallery.vue +4 -4
- package/components/navigation/header/HeaderUsage.vue +4 -6
- package/components/navigation/header/ListItem.vue +2 -2
- package/components/navigation/header/NavCard.vue +1 -1
- package/components/navigation/header/NavList.vue +2 -2
- package/components/navigation/header/NotificationsMenu.vue +2 -3
- package/components/navigation/header/ProductMenu.vue +7 -7
- package/components/navigation/header/ProfileMenu.vue +26 -35
- package/components/navigation/header/SystemNotification.vue +1 -3
- package/components/navigation/pill-tabs/APillTabs.vue +2 -2
- package/components/navigation/pill-tabs/APillTabsV2.vue +22 -6
- package/components/overlays/drawer/ADrawerV2.vue +335 -0
- package/components/overlays/modal/AModal.vue +4 -4
- package/components/overlays/modal/AModalV2.vue +7 -4
- package/components/overlays/side-panel/ASidePanel.vue +6 -6
- package/components/overlays/sideover/ASlideover.vue +6 -6
- package/components/overlays/tooltip/ATooltip.vue +1 -1
- package/components/overlays/tooltip/ATooltipV2.vue +2 -12
- package/components/transitions/ATransitionHeight.vue +1 -1
- package/composables/useHeaderNavigationLinks.ts +100 -94
- package/icons/archive.vue +16 -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/bot.vue +52 -0
- package/icons/clock-time.vue +24 -0
- package/icons/compare-outlined.vue +8 -0
- package/icons/dots-horizontal.vue +31 -0
- package/icons/download-line.vue +13 -0
- package/icons/egov.vue +41 -0
- package/icons/elicense.vue +38 -0
- package/icons/favourite-bookmark-outline.vue +17 -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/git-compare.vue +38 -0
- package/icons/graduation-cap.vue +31 -0
- package/icons/graph-loading.vue +34 -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/message-dotted.vue +30 -0
- package/icons/notification-error.vue +17 -0
- package/icons/person.vue +22 -0
- package/icons/settings.vue +26 -0
- package/icons/shield-alert.vue +31 -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/view-eye-open.vue +13 -0
- package/lang/en.ts +1 -0
- package/lang/kk.ts +1 -0
- package/lang/ru.ts +1 -0
- package/package.json +1 -1
- package/plugins/toast.client.ts +38 -55
- package/tailwind.config.ts +147 -116
- package/utils/twMerge.ts +34 -0
- package/components/elements/tree-select/components/tree-select-nodes.vue +0 -91
|
@@ -1,67 +1,128 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import type { Crumb } from './types'
|
|
3
|
-
import { twMerge } from '
|
|
3
|
+
import { twMerge } from '#adata-ui/utils/twMerge'
|
|
4
4
|
|
|
5
|
-
defineProps<{
|
|
5
|
+
const props = defineProps<{
|
|
6
6
|
links: Crumb[]
|
|
7
7
|
customClasses?: string
|
|
8
|
+
collapsible?: boolean
|
|
8
9
|
}>()
|
|
9
10
|
|
|
10
11
|
const { t } = useI18n()
|
|
12
|
+
|
|
13
|
+
const expanded = ref(false)
|
|
14
|
+
|
|
15
|
+
type Item = { kind: 'crumb', crumb: Crumb, position: number } | { kind: 'ellipsis' }
|
|
16
|
+
|
|
17
|
+
const items = computed<Item[]>(() => {
|
|
18
|
+
const toItem = (crumb: Crumb, position: number): Item => ({ kind: 'crumb', crumb, position })
|
|
19
|
+
|
|
20
|
+
if (!props.collapsible || expanded.value || props.links.length <= 3) {
|
|
21
|
+
return props.links.map(toItem)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const last = props.links.length
|
|
25
|
+
return [
|
|
26
|
+
toItem(props.links[0], 0),
|
|
27
|
+
{ kind: 'ellipsis' },
|
|
28
|
+
toItem(props.links[last - 2], last - 2),
|
|
29
|
+
toItem(props.links[last - 1], last - 1),
|
|
30
|
+
]
|
|
31
|
+
})
|
|
11
32
|
</script>
|
|
33
|
+
|
|
12
34
|
<template>
|
|
13
|
-
<div
|
|
35
|
+
<div>
|
|
14
36
|
<ul
|
|
15
|
-
class="flex gap-
|
|
37
|
+
class="flex items-center gap-2"
|
|
16
38
|
itemscope
|
|
17
39
|
itemtype="https://schema.org/BreadcrumbList"
|
|
18
40
|
>
|
|
19
|
-
<
|
|
20
|
-
v-for="(
|
|
21
|
-
:key="
|
|
22
|
-
:class="
|
|
23
|
-
twMerge(
|
|
24
|
-
'flex items-center text-xs text-gray-500 underline-offset-2 last-of-type:text-deepblue-900 hover:underline dark:last-of-type:text-gray-200',
|
|
25
|
-
customClasses
|
|
26
|
-
)
|
|
27
|
-
"
|
|
28
|
-
itemprop="itemListElement"
|
|
29
|
-
itemscope
|
|
30
|
-
itemtype="https://schema.org/ListItem"
|
|
41
|
+
<template
|
|
42
|
+
v-for="(item, idx) in items"
|
|
43
|
+
:key="item.kind === 'crumb' ? item.position : 'ellipsis'"
|
|
31
44
|
>
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
>
|
|
36
|
-
<slot
|
|
37
|
-
name="icon"
|
|
38
|
-
:breadcrumb-item="breadcrumbItem"
|
|
39
|
-
:index="idx"
|
|
45
|
+
<li
|
|
46
|
+
v-if="item.kind === 'ellipsis'"
|
|
47
|
+
class="flex items-center gap-2"
|
|
40
48
|
>
|
|
41
|
-
<span
|
|
42
|
-
<a-icon-chevron-right />
|
|
49
|
+
<span class="text-[#CAD5E2] dark:text-gray-600">
|
|
50
|
+
<a-icon-chevron-right class="size-4" />
|
|
43
51
|
</span>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
>
|
|
53
|
-
|
|
54
|
-
{{ t(breadcrumbItem.label) }}
|
|
55
|
-
</span>
|
|
56
|
-
</nuxt-link-locale>
|
|
57
|
-
<span
|
|
52
|
+
<button
|
|
53
|
+
type="button"
|
|
54
|
+
class="flex size-[18px] items-center justify-center rounded text-[#62748E] transition-colors hover:text-deepblue-900 dark:text-gray-400 dark:hover:text-gray-200"
|
|
55
|
+
:aria-label="t('actions.showMore')"
|
|
56
|
+
@click="expanded = true"
|
|
57
|
+
>
|
|
58
|
+
<a-icon-horizontal-more class="size-4" />
|
|
59
|
+
</button>
|
|
60
|
+
</li>
|
|
61
|
+
<li
|
|
58
62
|
v-else
|
|
59
|
-
class="
|
|
60
|
-
|
|
63
|
+
:class="
|
|
64
|
+
twMerge(
|
|
65
|
+
'flex items-center gap-2 text-body-md text-[#62748E] underline-offset-2 last-of-type:font-semibold last-of-type:text-deepblue-900 hover:underline dark:text-gray-400 dark:last-of-type:text-gray-200',
|
|
66
|
+
customClasses,
|
|
67
|
+
)
|
|
68
|
+
"
|
|
69
|
+
itemprop="itemListElement"
|
|
70
|
+
itemscope
|
|
71
|
+
itemtype="https://schema.org/ListItem"
|
|
61
72
|
>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
<meta
|
|
74
|
+
itemprop="position"
|
|
75
|
+
:content="`${item.position}`"
|
|
76
|
+
>
|
|
77
|
+
<slot
|
|
78
|
+
name="icon"
|
|
79
|
+
:breadcrumb-item="item.crumb"
|
|
80
|
+
:index="idx"
|
|
81
|
+
>
|
|
82
|
+
<span
|
|
83
|
+
v-if="idx !== 0"
|
|
84
|
+
class="text-[#CAD5E2] dark:text-gray-600"
|
|
85
|
+
>
|
|
86
|
+
<a-icon-chevron-right class="size-4" />
|
|
87
|
+
</span>
|
|
88
|
+
</slot>
|
|
89
|
+
<nuxt-link-locale
|
|
90
|
+
v-if="item.crumb.to"
|
|
91
|
+
class="flex items-center"
|
|
92
|
+
:to="item.crumb.to"
|
|
93
|
+
rel="noopener noreferrer"
|
|
94
|
+
itemprop="item"
|
|
95
|
+
:data-test-id="item.crumb?.dataTestId"
|
|
96
|
+
:aria-label="item.crumb.icon ? t(item.crumb.label) : undefined"
|
|
97
|
+
>
|
|
98
|
+
<component
|
|
99
|
+
:is="item.crumb.icon"
|
|
100
|
+
v-if="item.crumb.icon"
|
|
101
|
+
class="size-[18px]"
|
|
102
|
+
/>
|
|
103
|
+
<span
|
|
104
|
+
itemprop="name"
|
|
105
|
+
:class="item.crumb.icon ? 'sr-only' : ''"
|
|
106
|
+
>
|
|
107
|
+
{{ t(item.crumb.label) }}
|
|
108
|
+
</span>
|
|
109
|
+
</nuxt-link-locale>
|
|
110
|
+
<span
|
|
111
|
+
v-else
|
|
112
|
+
class="flex items-center"
|
|
113
|
+
itemprop="name"
|
|
114
|
+
>
|
|
115
|
+
<component
|
|
116
|
+
:is="item.crumb.icon"
|
|
117
|
+
v-if="item.crumb.icon"
|
|
118
|
+
class="size-[18px]"
|
|
119
|
+
/>
|
|
120
|
+
<span :class="item.crumb.icon ? 'sr-only' : ''">
|
|
121
|
+
{{ t(item.crumb.label) }}
|
|
122
|
+
</span>
|
|
123
|
+
</span>
|
|
124
|
+
</li>
|
|
125
|
+
</template>
|
|
65
126
|
</ul>
|
|
66
127
|
</div>
|
|
67
128
|
</template>
|
|
@@ -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>
|
|
@@ -46,7 +46,7 @@ interface Props {
|
|
|
46
46
|
oldVersion?: string
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
const { locale } = useI18n()
|
|
49
|
+
const { locale, t } = useI18n()
|
|
50
50
|
|
|
51
51
|
useCurrentModule().value = props.module
|
|
52
52
|
const { myLayer }: any = useAppConfig()
|
|
@@ -56,8 +56,6 @@ const langIsOn = myLayer.langIsOn
|
|
|
56
56
|
const contacts = useContacts()
|
|
57
57
|
const { loginModal } = useIdModals()
|
|
58
58
|
|
|
59
|
-
// Anchor the navigation mega-menu to the actual bottom of the header bar so it
|
|
60
|
-
// stays aligned even when the system-notification banner is shown above it.
|
|
61
59
|
const headerRef = ref<HTMLElement | null>(null)
|
|
62
60
|
const { bottom: headerBottom } = useElementBounding(headerRef)
|
|
63
61
|
|
|
@@ -119,19 +117,15 @@ onMounted(() => {
|
|
|
119
117
|
>
|
|
120
118
|
<div
|
|
121
119
|
v-if="mobileHeaderType === 'default'"
|
|
122
|
-
class="
|
|
120
|
+
class="text-deepblue dark:text-[#E3E5E8]"
|
|
121
|
+
@click="goToAnotherModule"
|
|
123
122
|
>
|
|
124
|
-
<
|
|
125
|
-
class="text-deepblue dark:text-[#E3E5E8]"
|
|
126
|
-
@click="goToAnotherModule"
|
|
127
|
-
>
|
|
128
|
-
<span class="visually-hidden"> Сервисы Adata.kz</span>
|
|
123
|
+
<span class="visually-hidden"> Сервисы Adata.kz</span>
|
|
129
124
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
</div>
|
|
125
|
+
<adata-logo
|
|
126
|
+
:font-controlled="false"
|
|
127
|
+
filled
|
|
128
|
+
/>
|
|
135
129
|
</div>
|
|
136
130
|
<div
|
|
137
131
|
v-else-if="mobileHeaderType === 'search'"
|
|
@@ -142,18 +136,18 @@ onMounted(() => {
|
|
|
142
136
|
@click="goToAnotherModule"
|
|
143
137
|
/>
|
|
144
138
|
<button
|
|
145
|
-
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"
|
|
146
140
|
@click="$emit('search')"
|
|
147
141
|
>
|
|
148
142
|
<a-icon-search class="text-gray-400 dark:text-gray-500" />
|
|
149
|
-
<span class="body-
|
|
143
|
+
<span class="text-body-md text-gray-500 dark:text-gray-400">{{ t('header.search') }}</span>
|
|
150
144
|
</button>
|
|
151
145
|
</div>
|
|
152
146
|
</section>
|
|
153
|
-
<div class="lg:hidden">
|
|
147
|
+
<div class="flex items-center gap-1 lg:hidden">
|
|
148
|
+
<a-color-mode />
|
|
154
149
|
<lang-switcher
|
|
155
150
|
v-if="langIsOn || module === 'fea'"
|
|
156
|
-
class="lg:hidden"
|
|
157
151
|
is-mobile
|
|
158
152
|
/>
|
|
159
153
|
</div>
|
|
@@ -203,7 +197,7 @@ onMounted(() => {
|
|
|
203
197
|
<template #default="{ toggle, isOpen }">
|
|
204
198
|
<button
|
|
205
199
|
type="button"
|
|
206
|
-
class="hidden h-8 cursor-pointer items-center gap-1.5 rounded-full px-3 text-
|
|
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"
|
|
207
201
|
:class="isOpen
|
|
208
202
|
? 'bg-deepblue-900/10 text-deepblue-900 dark:bg-white/15 dark:text-white'
|
|
209
203
|
: 'text-gray-900 dark:text-gray-100'"
|