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.
Files changed (139) hide show
  1. package/.claude/settings.local.json +19 -0
  2. package/assets/styles/index.scss +67 -5
  3. package/components/elements/a-select-row/ASelectRowV2.vue +8 -8
  4. package/components/elements/a-select-row/index.vue +3 -5
  5. package/components/elements/accordion/AAccordion.vue +5 -3
  6. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +3 -3
  7. package/components/elements/alert/AAlert.vue +34 -47
  8. package/components/elements/bg-block/ABgBlock.vue +1 -1
  9. package/components/elements/button/AButton.vue +3 -3
  10. package/components/elements/button/AButtonV2.vue +7 -5
  11. package/components/elements/button-login/index.vue +1 -1
  12. package/components/elements/chip-wrapper/AChipWrapper.vue +1 -1
  13. package/components/elements/chips/AChips.vue +2 -2
  14. package/components/elements/digit-badge/ADigitBadge.vue +21 -19
  15. package/components/elements/feature-description/AFeatureDescription.vue +1 -1
  16. package/components/elements/leave-note/ALeaveNote.vue +1 -1
  17. package/components/elements/pagination/APagination.vue +7 -7
  18. package/components/elements/segmented/ASegmentedV2.vue +103 -10
  19. package/components/elements/select/ASelect.vue +4 -4
  20. package/components/elements/select/ASelectMobile.vue +2 -2
  21. package/components/elements/select/ASelectV2.vue +10 -11
  22. package/components/elements/select/ui/select-button.vue +1 -1
  23. package/components/elements/status-badge/AStatusBadge.vue +22 -19
  24. package/components/elements/status-badge-v2/StatusBadgeV2.vue +1 -3
  25. package/components/elements/table/ATable.vue +1 -1
  26. package/components/elements/table/table.config.ts +2 -2
  27. package/components/elements/tree-select/ATreeSelect.vue +97 -113
  28. package/components/elements/tree-select/TreeService.ts +142 -207
  29. package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -0
  30. package/components/elements/tree-select/types.ts +40 -11
  31. package/components/elements/tree-select/utils.ts +30 -0
  32. package/components/elements/tree-select-modal/ATreeSelectModal.vue +217 -0
  33. package/components/features/color-mode/AColorMode.client.vue +1 -1
  34. package/components/features/dropdown/ADropdownV2.vue +1 -2
  35. package/components/features/lang-switcher/lang-switcher.vue +9 -4
  36. package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -3
  37. package/components/features/payment/banner/PaymentBanner.vue +3 -3
  38. package/components/features/payment/banner/UpSellBanner.vue +3 -3
  39. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +43 -27
  40. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +34 -23
  41. package/components/features/payment/process/PaymentMethodSidePanel.vue +61 -49
  42. package/components/features/payment/process/PaymentProcess.vue +6 -6
  43. package/components/features/payment/process/PaymentTopUpSidePanel.vue +44 -63
  44. package/components/features/pk-mobile-services/APkMobileServices.vue +1 -1
  45. package/components/features//321/201hange-version/AChangeVersion.vue +2 -2
  46. package/components/forms/checkbox/ACheckbox.vue +1 -1
  47. package/components/forms/checkbox/ACheckboxV2.vue +5 -5
  48. package/components/forms/input/AInputV2.vue +4 -4
  49. package/components/forms/input/date/AInputDate.vue +2 -2
  50. package/components/forms/input/password/AInputPassword.vue +8 -2
  51. package/components/forms/input/standard/AInputStandard.vue +3 -3
  52. package/components/forms/input/textarea/ATextarea.vue +2 -2
  53. package/components/forms/toggle/AToggle.vue +2 -3
  54. package/components/forms/toggle/AToggleV2.vue +3 -3
  55. package/components/modals/AnotherDeviceModal.vue +1 -1
  56. package/components/modals/ContactsMobileModel.vue +1 -1
  57. package/components/modals/ContentNavigationModal.vue +77 -333
  58. package/components/modals/Insufficient-funds-modal.vue +1 -1
  59. package/components/modals/PaymentMethodModal.vue +1 -1
  60. package/components/modals/id/IdBanner.vue +3 -3
  61. package/components/modals/id/IdRecoveryModal.vue +1 -1
  62. package/components/navigation/bottom-navigation/ABottomNavigation.vue +1 -1
  63. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +106 -45
  64. package/components/navigation/breadcrumbs/types.ts +3 -0
  65. package/components/navigation/footer/AFooter.vue +39 -40
  66. package/components/navigation/footer/ui/a-footer-accordion.vue +9 -9
  67. package/components/navigation/header/AHeader.vue +13 -19
  68. package/components/navigation/header/AlmatyContacts.vue +78 -78
  69. package/components/navigation/header/CardGallery.vue +4 -4
  70. package/components/navigation/header/HeaderUsage.vue +4 -6
  71. package/components/navigation/header/ListItem.vue +2 -2
  72. package/components/navigation/header/NavCard.vue +1 -1
  73. package/components/navigation/header/NavList.vue +2 -2
  74. package/components/navigation/header/NotificationsMenu.vue +2 -3
  75. package/components/navigation/header/ProductMenu.vue +7 -7
  76. package/components/navigation/header/ProfileMenu.vue +26 -35
  77. package/components/navigation/header/SystemNotification.vue +1 -3
  78. package/components/navigation/pill-tabs/APillTabs.vue +2 -2
  79. package/components/navigation/pill-tabs/APillTabsV2.vue +22 -6
  80. package/components/overlays/drawer/ADrawerV2.vue +335 -0
  81. package/components/overlays/modal/AModal.vue +4 -4
  82. package/components/overlays/modal/AModalV2.vue +7 -4
  83. package/components/overlays/side-panel/ASidePanel.vue +6 -6
  84. package/components/overlays/sideover/ASlideover.vue +6 -6
  85. package/components/overlays/tooltip/ATooltip.vue +1 -1
  86. package/components/overlays/tooltip/ATooltipV2.vue +2 -12
  87. package/components/transitions/ATransitionHeight.vue +1 -1
  88. package/composables/useHeaderNavigationLinks.ts +100 -94
  89. package/icons/archive.vue +16 -0
  90. package/icons/arrow/arrows-in.vue +11 -0
  91. package/icons/arrow/arrows-out.vue +11 -0
  92. package/icons/arrow/arrows-resize-in.vue +38 -0
  93. package/icons/arrow/arrows-resize-out.vue +17 -0
  94. package/icons/bot.vue +52 -0
  95. package/icons/clock-time.vue +24 -0
  96. package/icons/compare-outlined.vue +8 -0
  97. package/icons/dots-horizontal.vue +31 -0
  98. package/icons/download-line.vue +13 -0
  99. package/icons/egov.vue +41 -0
  100. package/icons/elicense.vue +38 -0
  101. package/icons/favourite-bookmark-outline.vue +17 -0
  102. package/icons/file-pen.vue +31 -0
  103. package/icons/file-stack.vue +31 -0
  104. package/icons/file-types/excel.vue +131 -0
  105. package/icons/file-types/html.vue +13 -0
  106. package/icons/file-types/jpeg.vue +16 -0
  107. package/icons/file-types/pdf.vue +11 -0
  108. package/icons/file-types/png.vue +11 -0
  109. package/icons/file-types/rar.vue +11 -0
  110. package/icons/file-types/word.vue +50 -0
  111. package/icons/file-types/zip.vue +11 -0
  112. package/icons/git-compare.vue +38 -0
  113. package/icons/graduation-cap.vue +31 -0
  114. package/icons/graph-loading.vue +34 -0
  115. package/icons/help-question-circle.vue +26 -0
  116. package/icons/in-row-type.vue +46 -0
  117. package/icons/in-table-type.vue +29 -0
  118. package/icons/message-dotted.vue +30 -0
  119. package/icons/notification-error.vue +17 -0
  120. package/icons/person.vue +22 -0
  121. package/icons/settings.vue +26 -0
  122. package/icons/shield-alert.vue +31 -0
  123. package/icons/socials/facebook-color.vue +16 -0
  124. package/icons/socials/globe-color.vue +16 -0
  125. package/icons/socials/instagram-color.vue +46 -0
  126. package/icons/socials/linkedin-color.vue +14 -0
  127. package/icons/socials/telegram-color.vue +16 -0
  128. package/icons/socials/tiktok-color.vue +14 -0
  129. package/icons/socials/vk-color.vue +16 -0
  130. package/icons/socials/youtube-color.vue +16 -0
  131. package/icons/view-eye-open.vue +13 -0
  132. package/lang/en.ts +1 -0
  133. package/lang/kk.ts +1 -0
  134. package/lang/ru.ts +1 -0
  135. package/package.json +1 -1
  136. package/plugins/toast.client.ts +38 -55
  137. package/tailwind.config.ts +147 -116
  138. package/utils/twMerge.ts +34 -0
  139. 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 'tailwind-merge'
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 class="">
35
+ <div>
14
36
  <ul
15
- class="flex gap-1"
37
+ class="flex items-center gap-2"
16
38
  itemscope
17
39
  itemtype="https://schema.org/BreadcrumbList"
18
40
  >
19
- <li
20
- v-for="(breadcrumbItem, idx) in links"
21
- :key="idx"
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
- <meta
33
- itemprop="position"
34
- :content="`${idx}`"
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 v-if="idx !== 0">
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
- </slot>
45
- <nuxt-link-locale
46
- v-if="breadcrumbItem.to"
47
- class="pl-1"
48
- :to="breadcrumbItem.to"
49
- rel="noopener noreferrer"
50
- itemprop="item"
51
- :data-test-id="breadcrumbItem?.dataTestId"
52
- >
53
- <span itemprop="name">
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="pl-1"
60
- itemprop="name"
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
- {{ t(breadcrumbItem.label) }}
63
- </span>
64
- </li>
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,5 +1,8 @@
1
+ import type { Component } from 'vue'
2
+
1
3
  export interface Crumb {
2
4
  label: string
3
5
  to: string
4
6
  dataTestId?: string
7
+ icon?: Component
5
8
  }
@@ -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 YouTubeIcon from '#adata-ui/icons/socials/youtube.vue'
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 AFooterAccordion from '#adata-ui/components/navigation/footer/ui/a-footer-accordion.vue'
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 + '/taxpayer'),
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 py-4 lg:py-5 rounded-t-3xl"
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 flex flex-col lg:flex-row justify-between gap-8">
173
- <div class="flex flex-col gap-8 justify-between">
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-sm">
180
+ <p class="text-body-md">
182
181
  {{ t('footer.subtitle') }}
183
182
  </p>
184
183
 
185
- <div class="hidden lg:flex gap-8">
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 text-[10px]">
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:gap-[75px] flex-col lg:flex-row">
210
- <div class="flex gap-[18px] lg:gap-[75px] flex-col lg:flex-row">
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 items-start" data-nosnippet>
221
+ <!-- noindex -->
222
+ <div class="flex flex-col items-start gap-2" data-nosnippet>
224
223
  <nuxt-link
225
- class="text-sm font-semibold pb-3 pr-4 border-b-[0.5px] border-white cursor-pointer"
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 items-center"
234
+ class="flex items-center gap-2"
236
235
  >
237
236
  <nuxt-link
238
- class="text-xs font-medium flex gap-2 items-center cursor-pointer"
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
- <!--/noindex-->
258
+ <!-- /noindex -->
260
259
  </div>
261
260
 
262
- <div class="lg:hidden flex gap-8 flex-wrap">
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 text-[10px]">
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 + 'px'
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 items-start">
41
- <div class="flex gap-2 justify-between w-full">
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="text-sm font-semibold lg:pb-3 lg:pr-4 lg:border-b-[0.5px] lg:border-white cursor-default"
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 cursor-pointer">
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:gap-6 flex-col lg:flex-row"
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 items-center"
80
+ class="flex items-center gap-2"
81
81
  >
82
82
  <nuxt-link
83
- class="text-xs lg:font-medium flex gap-2 items-center cursor-pointer"
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="text-[9px] font-bold px-1 py-[2px] rounded-sm bg-white/20"
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="flex justify-center"
120
+ class="text-deepblue dark:text-[#E3E5E8]"
121
+ @click="goToAnotherModule"
123
122
  >
124
- <div
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
- <adata-logo
131
- :font-controlled="false"
132
- filled
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-lg border border-gray-200 bg-white px-4 py-1.5 shadow-sm dark:border-gray-700 dark:bg-gray-900 dark:text-gray-400"
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-400 text-gray-500 dark:text-gray-400">Найти</span>
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-sm font-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"
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'"