adata-ui 2.1.0 → 2.1.2

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 (307) hide show
  1. package/.editorconfig +12 -12
  2. package/.nuxtrc +1 -1
  3. package/.playground/app.config.ts +5 -5
  4. package/README.md +75 -75
  5. package/app.config.ts +4 -3
  6. package/app.vue +1 -0
  7. package/assets/styles/index.scss +104 -0
  8. package/assets/styles/modules/_base.scss +5 -0
  9. package/assets/styles/modules/_typography.scss +152 -0
  10. package/components/elements/README.md +1 -1
  11. package/components/elements/accordion/AAccordion.vue +13 -12
  12. package/components/elements/curve-block/ACurveBlock.vue +94 -19
  13. package/components/elements/feature-description/AFeatureDescription.vue +4 -4
  14. package/components/elements/illustrations/noAccess.vue +11 -2
  15. package/components/elements/photos-animation/APhotosAnimation.vue +3 -1
  16. package/components/elements/select/ASelect.vue +65 -9
  17. package/components/features/lang-switcher/lang-switcher.vue +8 -1
  18. package/components/features/payment/banner/BasicPlusLimitBanner.vue +104 -0
  19. package/components/features/payment/banner/PaymentBanner.vue +108 -0
  20. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +158 -0
  21. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +112 -0
  22. package/components/features/payment/process/PaymentMethodSidePanel.vue +121 -0
  23. package/components/features/payment/process/PaymentProcess.vue +138 -0
  24. package/components/features/payment/process/PaymentTopUpSidePanel.vue +130 -0
  25. package/components/features/pk-mobile-services/APkMobileServices.vue +21 -2
  26. package/components/forms/README.md +1 -1
  27. package/components/forms/checkbox/ACheckbox.vue +0 -2
  28. package/components/forms/radio-button/ARadioButton.vue +21 -13
  29. package/components/forms/request-demo/ARequestDemo.vue +21 -7
  30. package/components/modals/AConfirmationEmail.vue +40 -0
  31. package/components/modals/AnotherDeviceModal.vue +3 -2
  32. package/components/modals/ConnectingTariffModal.vue +0 -1
  33. package/components/modals/ContentNavigationModal.vue +148 -75
  34. package/components/modals/Insufficient-funds-modal.vue +5 -2
  35. package/components/modals/LimitReachedModal.vue +4 -3
  36. package/components/modals/ReportBugModal.vue +3 -3
  37. package/components/modals/Resend.vue +82 -0
  38. package/components/modals/SubmitApplicationModal.vue +4 -0
  39. package/components/modals/id/AuthModal.vue +78 -0
  40. package/components/modals/id/IdAutoLogoutModal.vue +45 -0
  41. package/components/modals/id/IdBanner.vue +58 -0
  42. package/components/modals/id/IdConfirmAccountOtpModal.vue +186 -0
  43. package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -0
  44. package/components/modals/id/IdLoginModal.vue +316 -0
  45. package/components/modals/id/IdModals.vue +114 -0
  46. package/components/modals/id/IdNewPasswordModal.vue +129 -0
  47. package/components/modals/id/IdOtpInput.vue +155 -0
  48. package/components/modals/id/IdPasswordSuccessfulModal.vue +25 -0
  49. package/components/modals/id/IdRecoveryModal.vue +117 -0
  50. package/components/modals/id/IdRegistrationModal.vue +215 -0
  51. package/components/modals/id/IdResetPasswordOtpModal.vue +158 -0
  52. package/components/modals/id/IdTwoFactorModal.vue +130 -0
  53. package/components/navigation/README.md +1 -1
  54. package/components/navigation/bottom-navigation/ABottomNavigation.vue +34 -29
  55. package/components/navigation/footer/AFooter.vue +210 -57
  56. package/components/navigation/footer/ui/{new-footer-accordion.vue → a-footer-accordion.vue} +2 -4
  57. package/components/navigation/header/AHeader.vue +59 -51
  58. package/components/navigation/header/AlmatyContacts.vue +16 -14
  59. package/components/navigation/header/AstanaContacts.vue +13 -11
  60. package/components/navigation/header/CardGallery.vue +5 -4
  61. package/components/navigation/header/HeaderLink.vue +16 -8
  62. package/components/navigation/header/NavList.vue +21 -5
  63. package/components/navigation/header/ProductMenu.vue +8 -78
  64. package/components/navigation/header/ProfileMenu.vue +10 -5
  65. package/components/navigation/header/TopHeader.vue +2 -2
  66. package/components/navigation/mobile-navigation/AMobileNavigation.vue +3 -3
  67. package/components/navigation/pill-tabs/APillTabs.vue +18 -4
  68. package/components/navigation/pill-tabs/types.ts +1 -0
  69. package/components/navigation/side-navigation/ASideNavigation.vue +23 -21
  70. package/components/overlays/README.md +1 -1
  71. package/components/overlays/side-panel/ASidePanel.vue +439 -0
  72. package/components/overlays/tooltip/ATooltip.vue +149 -154
  73. package/components/utils/removeTrailingSlash.ts +7 -0
  74. package/composables/useBuyTariffs.ts +91 -0
  75. package/composables/useHeaderNavigationLinks.ts +174 -297
  76. package/composables/useIdModals.ts +36 -0
  77. package/composables/usePayment.ts +74 -0
  78. package/composables/useUrls.ts +21 -0
  79. package/eslint.config.mjs +45 -0
  80. package/icons/adata-logo.vue +1 -1
  81. package/icons/ai-assistant.vue +13 -0
  82. package/icons/akimat.vue +20 -0
  83. package/icons/arrow/arrow-bottom-left-on-square.vue +1 -1
  84. package/icons/arrow/arrow-circle-reset.vue +1 -1
  85. package/icons/arrow/arrow-corner.vue +1 -1
  86. package/icons/arrow/arrow-graph-down.vue +1 -1
  87. package/icons/arrow/arrow-graph-up.vue +1 -1
  88. package/icons/arrow/arrow-square-down.vue +1 -1
  89. package/icons/arrow/arrow-top-right-on-square.vue +1 -1
  90. package/icons/arrow-currency-gray.vue +1 -1
  91. package/icons/arrow-currency-green.vue +1 -1
  92. package/icons/arrow-currency-red.vue +1 -1
  93. package/icons/avatar.vue +1 -1
  94. package/icons/bank.vue +5 -0
  95. package/icons/block.vue +1 -1
  96. package/icons/bookmark/bookmark-filled.vue +1 -1
  97. package/icons/bookmark/bookmark.vue +1 -1
  98. package/icons/browsers/browser-duck.vue +1 -1
  99. package/icons/browsers/browser-google.vue +7 -1
  100. package/icons/browsers/browser-yandex.vue +1 -1
  101. package/icons/building-vector.vue +1 -1
  102. package/icons/calculator.vue +1 -1
  103. package/icons/calendar.vue +1 -1
  104. package/icons/car.vue +1 -1
  105. package/icons/chart-bar.vue +5 -0
  106. package/icons/chart-pie.vue +16 -0
  107. package/icons/check/check-circle.vue +1 -1
  108. package/icons/check/check.vue +1 -1
  109. package/icons/check/checkmark-circle.vue +1 -1
  110. package/icons/check-sb.vue +7 -0
  111. package/icons/checkbox/checkbox-active.vue +1 -1
  112. package/icons/checkbox/checkbox-empty.vue +1 -1
  113. package/icons/checkbox/checkbox-intermediate.vue +1 -1
  114. package/icons/chevron/chevron-down.vue +1 -1
  115. package/icons/chevron/chevron-left.vue +1 -1
  116. package/icons/chevron/chevron-right.vue +1 -1
  117. package/icons/chevron/chevron-up.vue +1 -1
  118. package/icons/chevron/double-chevron-right.vue +1 -1
  119. package/icons/clipboard-text.vue +1 -1
  120. package/icons/clock.vue +1 -1
  121. package/icons/company/company-bazis.vue +3 -3
  122. package/icons/company/company-bereke.vue +13 -13
  123. package/icons/company/company-bigroup.vue +5 -5
  124. package/icons/company/company-erg.vue +6 -6
  125. package/icons/company/company-forte.vue +11 -11
  126. package/icons/company/company-halyk.vue +4 -4
  127. package/icons/company/company-jusan.vue +20 -3
  128. package/icons/company/company-kaspi.vue +3 -3
  129. package/icons/company/company-mycar.vue +2 -2
  130. package/icons/company/company-samruk.vue +9 -9
  131. package/icons/company-egov-small.vue +1 -1
  132. package/icons/company.vue +1 -1
  133. package/icons/copy.vue +1 -1
  134. package/icons/currency/currency-dollar.vue +1 -1
  135. package/icons/currency/currency-down.vue +1 -1
  136. package/icons/currency/currency-eur.vue +1 -1
  137. package/icons/currency/currency-rub.vue +1 -1
  138. package/icons/currency/currency-tenge.vue +9 -0
  139. package/icons/currency/currency-usd.vue +1 -1
  140. package/icons/currency/currency-yuan.vue +1 -1
  141. package/icons/delete.vue +1 -1
  142. package/icons/document.vue +1 -1
  143. package/icons/download.vue +1 -1
  144. package/icons/edit.vue +1 -1
  145. package/icons/education.vue +1 -1
  146. package/icons/egov-small.vue +1 -1
  147. package/icons/excel-icon.vue +14 -0
  148. package/icons/expand-window.vue +1 -1
  149. package/icons/eye-closed.vue +1 -1
  150. package/icons/eye-open.vue +1 -1
  151. package/icons/eye-opened.vue +1 -1
  152. package/icons/file/file.vue +1 -1
  153. package/icons/filter.vue +1 -1
  154. package/icons/flag.vue +1 -1
  155. package/icons/gift.vue +1 -1
  156. package/icons/globe.vue +1 -1
  157. package/icons/google.vue +41 -0
  158. package/icons/hand/hand-thumb-up-filled.vue +1 -1
  159. package/icons/hand/hand-thumb-up.vue +1 -1
  160. package/icons/hand-with-phone/hand-with-phone-dark.vue +1 -1
  161. package/icons/hand-with-phone/hand-with-phone-light.vue +1 -1
  162. package/icons/handshake.vue +1 -1
  163. package/icons/hcheck.vue +1 -1
  164. package/icons/hdocument.vue +1 -1
  165. package/icons/history.vue +1 -1
  166. package/icons/horizontal-more.vue +1 -1
  167. package/icons/hot-line.vue +6 -0
  168. package/icons/hummer.vue +1 -1
  169. package/icons/info/info-circle.vue +1 -1
  170. package/icons/invoice.vue +1 -1
  171. package/icons/kaspi-qr.vue +13 -0
  172. package/icons/link-chain.vue +1 -1
  173. package/icons/link.vue +1 -1
  174. package/icons/linkedin.vue +24 -24
  175. package/icons/loader-circle.vue +1 -1
  176. package/icons/location.vue +1 -1
  177. package/icons/lock.vue +1 -1
  178. package/icons/logo.vue +1 -1
  179. package/icons/logout.vue +1 -1
  180. package/icons/magnify/magnifying-glass-minus.vue +1 -1
  181. package/icons/magnify/magnifying-glass-plus.vue +1 -1
  182. package/icons/magnify/magnifying-glass.vue +1 -1
  183. package/icons/mail.vue +1 -1
  184. package/icons/mailru.vue +34 -0
  185. package/icons/main-filter.vue +1 -1
  186. package/icons/map/map-pin-filled.vue +1 -1
  187. package/icons/map/map-pin-rect.vue +1 -1
  188. package/icons/map/map-pin.vue +1 -1
  189. package/icons/map-marker-start.vue +1 -1
  190. package/icons/medal.vue +1 -1
  191. package/icons/menu-filled.vue +1 -1
  192. package/icons/menu.vue +1 -1
  193. package/icons/message/message.vue +1 -1
  194. package/icons/minus/minus-circle.vue +1 -1
  195. package/icons/money.vue +1 -1
  196. package/icons/monitoring.vue +1 -1
  197. package/icons/moon.vue +1 -1
  198. package/icons/more.vue +1 -1
  199. package/icons/notification.vue +1 -1
  200. package/icons/paperclip.vue +1 -1
  201. package/icons/payment/payment-card.vue +1 -1
  202. package/icons/payment/payment-kaspi.vue +1 -1
  203. package/icons/person-vector.vue +1 -1
  204. package/icons/person-with-briefcase.vue +1 -1
  205. package/icons/phone-filled.vue +1 -1
  206. package/icons/phone.vue +1 -1
  207. package/icons/plus/plus-circle.vue +1 -1
  208. package/icons/plus/plus.vue +1 -1
  209. package/icons/profile.vue +1 -1
  210. package/icons/radio/radio-check.vue +1 -1
  211. package/icons/radio/radio-empty.vue +1 -1
  212. package/icons/receipt.vue +1 -1
  213. package/icons/sanctions.vue +8 -0
  214. package/icons/scales/scale.vue +1 -1
  215. package/icons/scales/scales.vue +1 -1
  216. package/icons/scales/standing-scales.vue +1 -1
  217. package/icons/search.vue +1 -1
  218. package/icons/share/share-alt.vue +1 -1
  219. package/icons/share/share.vue +1 -1
  220. package/icons/socials/face-book.vue +1 -1
  221. package/icons/socials/instagram.vue +1 -1
  222. package/icons/socials/telegram.vue +1 -1
  223. package/icons/socials/tik-tok.vue +1 -1
  224. package/icons/socials/youtube.vue +1 -1
  225. package/icons/sort/sort-asc.vue +1 -1
  226. package/icons/sort/sort-desc.vue +1 -1
  227. package/icons/splitting-arrows.vue +1 -1
  228. package/icons/star/star-filled.vue +1 -1
  229. package/icons/star/star-half-filled.vue +1 -1
  230. package/icons/star/star.vue +1 -1
  231. package/icons/sun.vue +14 -14
  232. package/icons/sviazi.vue +1 -1
  233. package/icons/tag.vue +1 -1
  234. package/icons/tasks.vue +10 -0
  235. package/icons/tender-search.vue +1 -1
  236. package/icons/toasts/check-circle-toast.vue +1 -1
  237. package/icons/toasts/warning-triangle-toast.vue +1 -1
  238. package/icons/trash.vue +1 -1
  239. package/icons/triangle.vue +1 -1
  240. package/icons/truck.vue +1 -1
  241. package/icons/user.vue +1 -1
  242. package/icons/users-focus.vue +1 -1
  243. package/icons/users.vue +1 -1
  244. package/icons/warning/warning-circle.vue +1 -1
  245. package/icons/warning/warning-triangle-filled.vue +1 -1
  246. package/icons/warning/warning-triangle.vue +1 -1
  247. package/icons/whatsapp.vue +1 -1
  248. package/icons/work-bag.vue +1 -1
  249. package/icons/work-case.vue +9 -0
  250. package/icons/work-search.vue +1 -1
  251. package/icons/work.vue +1 -1
  252. package/icons/x-mark.vue +1 -1
  253. package/icons/yandex.vue +28 -0
  254. package/illustrations/address-location.vue +1 -1
  255. package/illustrations/ball-with-chain.vue +1 -1
  256. package/illustrations/bill.vue +1 -1
  257. package/illustrations/buildings.vue +1 -1
  258. package/illustrations/calendar.vue +1 -1
  259. package/illustrations/chains.vue +1 -1
  260. package/illustrations/coin-percent.vue +1 -1
  261. package/illustrations/coins-stack.vue +1 -1
  262. package/illustrations/delete-dark.vue +1 -1
  263. package/illustrations/delete.vue +1 -1
  264. package/illustrations/doc-with-stamp.vue +1 -1
  265. package/illustrations/document.vue +1 -1
  266. package/illustrations/door.vue +1 -1
  267. package/illustrations/empty-box.vue +1 -1
  268. package/illustrations/empty-wallet.vue +1 -1
  269. package/illustrations/graph-in-coin.vue +1 -1
  270. package/illustrations/hammer.vue +1 -1
  271. package/illustrations/hand-cash.vue +1 -1
  272. package/illustrations/info.vue +1 -1
  273. package/illustrations/mail.vue +1 -1
  274. package/illustrations/ok.vue +1 -1
  275. package/illustrations/people-group.vue +1 -1
  276. package/illustrations/person-with-phone.vue +1 -1
  277. package/illustrations/person.vue +1 -1
  278. package/illustrations/phone-check.vue +1 -1
  279. package/illustrations/phone-payment-method.vue +1 -1
  280. package/illustrations/stop-hand.vue +1 -1
  281. package/illustrations/stop-sign.vue +1 -1
  282. package/illustrations/suit.vue +1 -1
  283. package/illustrations/suitcase.vue +1 -1
  284. package/illustrations/terminal-dark.vue +1 -1
  285. package/illustrations/terminal.vue +1 -1
  286. package/illustrations/trash-can.vue +1 -1
  287. package/illustrations/turn-on-tariff.vue +1 -1
  288. package/illustrations/two-persons.vue +1 -1
  289. package/lang/en.ts +475 -270
  290. package/lang/kk.ts +476 -271
  291. package/lang/ru.ts +315 -107
  292. package/layouts/default.vue +13 -13
  293. package/nuxt.config.ts +42 -14
  294. package/package.json +69 -53
  295. package/public/kaspi/logo.svg +4 -0
  296. package/shared/constans/pages.ts +17 -2
  297. package/tailwind.config.ts +163 -0
  298. package/vitest.config.ts +14 -0
  299. package/.eslintrc.cjs +0 -4
  300. package/.playground/app.vue +0 -9
  301. package/.playground/pages/index.vue +0 -13
  302. package/.prettierignore +0 -24
  303. package/.prettierrc +0 -10
  304. package/assets/styles/index.css +0 -226
  305. package/components/modals/AuthModal.vue +0 -50
  306. package/components/navigation/footer/NewFooter.vue +0 -276
  307. package/components/navigation/footer/ui/footer-acccordion.vue +0 -119
@@ -1,11 +1,19 @@
1
1
  <script setup lang="ts" generic="T extends NavigationItem">
2
+ import Avatar from '#adata-ui/icons/avatar.vue'
3
+ import IconLogout from '#adata-ui/icons/logout.vue'
4
+ import { useUrls } from '#adata-ui/composables/useUrls'
2
5
 
3
- import Avatar from "#adata-ui/icons/avatar.vue";
4
- import IconLogout from "#adata-ui/icons/logout.vue";
5
-
6
- const {t} = useI18n()
7
- const appConfig = useAppConfig()
8
- const loginUrl = appConfig.myLayer.loginUrl
6
+ const props = withDefaults(defineProps<Props>(), {
7
+ limitRemaining: 0,
8
+ daysRemaining: 0,
9
+ balance: 0,
10
+ rate: 'Базовый',
11
+ showLogIn: true,
12
+ })
13
+ const emit = defineEmits(['update:modelValue', 'logout'])
14
+ const { t } = useI18n()
15
+ const { myLayer } = useAppConfig()
16
+ const urls = useUrls()
9
17
 
10
18
  interface Props {
11
19
  grow?: boolean
@@ -22,34 +30,31 @@ interface Props {
22
30
  showLogIn?: boolean
23
31
  }
24
32
 
25
- const props = withDefaults(defineProps<Props>(), {
26
- limitRemaining: 0,
27
- daysRemaining: 0,
28
- balance: 0,
29
- rate: 'Базовый',
30
- showLogIn: true
31
- })
32
- const emit = defineEmits(['update:modelValue', 'logout'])
33
+ const { loginModal } = useIdModals()
33
34
 
34
- const goAuth = () => {
35
- if (window) {
36
- let fullPath = encodeURIComponent(window.location.toString())
37
- if (fullPath.includes('basic-info')) {
38
- fullPath = fullPath.replace('%2Fcounterparty/main', '').replace('%2Fbasic-info', '')
35
+ function goAuth() {
36
+ if (myLayer.authMode !== 'local') {
37
+ if (window) {
38
+ let fullPath = encodeURIComponent(window.location.toString())
39
+ if (fullPath.includes('basic-info')) {
40
+ fullPath = fullPath.replace('%2Fcounterparty/main', '').replace('%2Fbasic-info', '')
41
+ }
42
+ window.location.href = `${urls.login}?url=${fullPath}`
39
43
  }
40
- window.location.href = `${loginUrl}?url=${fullPath}`
44
+ }
45
+ else {
46
+ loginModal.value = true
41
47
  }
42
48
  }
43
- const onClick = (value: string) => {
49
+ function onClick(value: string) {
44
50
  if (value === props.modelValue) value = ''
45
51
  emit('update:modelValue', value)
46
52
  }
47
53
 
48
- const login: string = 'header.login';
49
- const profile: string = 'modals.mobile_navigation.type_profile';
50
-
51
-
54
+ const login: string = 'header.login'
55
+ const profile: string = 'modals.mobile_navigation.type_profile'
52
56
  </script>
57
+
53
58
  <template>
54
59
  <header class="w-full border-t border-[#9DA3AC80] bg-white dark:bg-gray-900">
55
60
  <div class="grid w-full grid-cols-3 justify-items-center">
@@ -65,7 +70,7 @@ const profile: string = 'modals.mobile_navigation.type_profile';
65
70
  <template v-if="Object.prototype.hasOwnProperty.call(item, 'icon')">
66
71
  <component
67
72
  :is="item.icon"
68
- class="h-6 w-6"
73
+ class="size-6"
69
74
  />
70
75
  </template>
71
76
  {{ t(item.label) }}
@@ -73,12 +78,12 @@ const profile: string = 'modals.mobile_navigation.type_profile';
73
78
  </button>
74
79
  <button
75
80
  v-show="isAuthenticated"
76
- @click="onClick('profile')"
77
81
  class="h-16 w-auto min-w-16 max-w-[168px]"
82
+ @click="onClick('profile')"
78
83
  >
79
84
  <span class="flex flex-col items-center justify-center text-[10px] leading-5 lg:text-sm">
80
85
  <avatar
81
- class="bg-gray outline-blue h-6 w-6 rounded-full"
86
+ class="bg-gray outline-blue size-6 rounded-full"
82
87
  />
83
88
  {{ t(profile) }}
84
89
  </span>
@@ -89,7 +94,7 @@ const profile: string = 'modals.mobile_navigation.type_profile';
89
94
  @click="goAuth"
90
95
  >
91
96
  <span class="flex flex-col items-center justify-center text-[10px] leading-5 lg:text-sm">
92
- <icon-logout class="lg:h-6 lg:w-6" />
97
+ <icon-logout class="lg:size-6" />
93
98
  {{ t(login) }}
94
99
  </span>
95
100
  </button>
@@ -1,19 +1,20 @@
1
1
  <script setup lang="ts">
2
2
  import AdataLogo from '#adata-ui/icons/adata-logo.vue'
3
+ import LinkedinIcon from '#adata-ui/icons/linkedin.vue'
3
4
  import YouTubeIcon from '#adata-ui/icons/socials/youtube.vue'
4
5
  import InstagramIcon from '#adata-ui/icons/socials/instagram.vue'
5
6
  import TelegramIcon from '#adata-ui/icons/socials/telegram.vue'
6
7
  import FaceBookIcon from '#adata-ui/icons/socials/face-book.vue'
7
8
  import TikTokIcon from '#adata-ui/icons/socials/tik-tok.vue'
8
- import LinkedinIcon from '#adata-ui/icons/linkedin.vue'
9
- import FooterAccordion from './ui/footer-acccordion.vue'
10
- import { PAGES } from '#adata-ui/shared/constans/pages'
9
+ import AFooterAccordion from '#adata-ui/components/navigation/footer/ui/a-footer-accordion.vue'
11
10
  import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
12
- import { useFooterInfoLinks, useFooterNavigationLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
11
+ import { PAGES } from '#adata-ui/shared/constans/pages'
12
+ import { AIconExpandWindow, AIconLocation, AIconMail, AIconPhone } from '#components'
13
+ import { useUrls } from '#adata-ui/composables/useUrls'
13
14
 
14
- const { myLayer }: any = useAppConfig()
15
- const { t, locale } = useI18n()
16
15
  const year = new Date().getFullYear()
16
+ const { t, locale } = useI18n()
17
+ const urls = useUrls()
17
18
 
18
19
  const socialMedia = [
19
20
  {
@@ -48,35 +49,212 @@ const socialMedia = [
48
49
  }
49
50
  ]
50
51
 
51
- const info = useFooterInfoLinks()
52
+ const mainLinks = computed(() => ({
53
+ services: {
54
+ title: t('footer.services'),
55
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.allServices),
56
+ items: [
57
+ [
58
+ {
59
+ title: t('footer.counterparties.title'),
60
+ link: buildLocalizedUrl(locale.value, urls.pk, ''),
61
+ },
62
+ {
63
+ title: t('footer.fines.title'),
64
+ link: buildLocalizedUrl(locale.value, urls.avto, PAGES.fines.main),
65
+ },
66
+ {
67
+ title: t('footer.work.title'),
68
+ link: urls.work + PAGES.work.vacancy,
69
+ },
70
+ {
71
+ title: t('footer.analytics.title'),
72
+ link: buildLocalizedUrl(locale.value, urls.analyticsNew, PAGES.analytics.main),
73
+ },
74
+ {
75
+ title: t('footer.tenders.title'),
76
+ link: urls.tender + PAGES.tender.main,
77
+ }
78
+ ],
79
+ [
80
+ {
81
+ title: t('footer.compliance.title'),
82
+ link: urls.compliance + PAGES.compliance.l,
83
+ isNew: true
84
+ },
85
+ {
86
+ title: t('header.products.edo.label'),
87
+ link: urls.edo + PAGES.edo.l,
88
+ isNew: true
89
+ },
90
+ {
91
+ title: t('footer.fea.title'),
92
+ link: buildLocalizedUrl(locale.value, urls.tnved, PAGES.fea.main),
93
+ isNew: true
94
+ },
95
+ ]
96
+ ]
97
+ },
98
+ useful: {
99
+ title: t('footer.useful'),
100
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.usefulMain),
101
+ items: [
102
+ [
103
+ {
104
+ title: t('footer.info.api'),
105
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.apiDescription),
106
+ },
107
+ {
108
+ title: t('footer.info.userAgreement'),
109
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.userAgreement),
110
+ },
111
+ {
112
+ title: t('footer.info.privacyPolicy'),
113
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.privacy),
114
+ },
115
+ {
116
+ title: t('footer.info.vacancy'),
117
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.vacancy),
118
+ },
119
+ {
120
+ title: t('footer.info.counterparty'),
121
+ link: buildLocalizedUrl(locale.value, urls.pk, PAGES.pk.counterparty),
122
+ },
123
+ ]
124
+ ]
125
+ }
126
+ }))
127
+
128
+ const contactLinks = computed(() => ({
129
+ title: t('footer.contacts.title'),
130
+ link: buildLocalizedUrl(locale.value, urls.landing, PAGES.contacts),
131
+ items: [
132
+ {
133
+ title: t('footer.contacts.address'),
134
+ link: 'https://go.2gis.com/30j2f',
135
+ startIcon: AIconLocation,
136
+ endIcon: null,
137
+ },
138
+ {
139
+ title: '+7 (747) 120 34 67',
140
+ link: 'tel:+77471203467',
141
+ startIcon: AIconPhone,
142
+ endIcon: null,
143
+ },
144
+ {
145
+ title: 'info@adata.kz',
146
+ link: 'mailto:info@adata.kz',
147
+ startIcon: AIconMail,
148
+ endIcon: null,
149
+ },
150
+ {
151
+ title: t('footer.contacts.goToChat'),
152
+ link: 'https://api.whatsapp.com/send?phone=77712289041',
153
+ startIcon: null,
154
+ endIcon: AIconExpandWindow,
155
+ class: 'font-bold',
156
+ },
157
+ ],
158
+ }))
52
159
 
53
- const links = useFooterNavigationLinks()
54
160
  </script>
55
161
 
56
162
  <template>
57
- <div
163
+ <footer
58
164
  id="footer"
59
- class="bg-deepblue-900 dark:bg-gray-900 lg:pt-10"
165
+ class="bg-deepblue-900 dark:bg-gray-900 py-4 lg:py-5 rounded-t-3xl"
60
166
  >
61
- <div class="a-container mobile-padding py-5 text-white">
62
- <adata-logo
63
- filled
64
- :font-controlled="false"
65
- class="mb-8 h-[26px] w-[92px] lg:hidden"
66
- />
67
- <div class="grid gap-5 lg:grid-cols-5 lg:gap-10 xl:grid-cols-6">
68
- <div
69
- v-for="(link, key) in links"
70
- :key="key"
71
- >
72
- <footer-accordion
73
- :content="link.items"
74
- :label="t(link.title)"
75
- :link="link.link.replace(/\/$/, '')"
167
+ <div class="a-container mobile-padding py-5 text-white flex flex-col lg:flex-row justify-between gap-8">
168
+ <div class="flex flex-col gap-8 justify-between">
169
+ <div class="flex flex-col gap-4">
170
+ <adata-logo
171
+ filled
172
+ :font-controlled="false"
173
+ class="shrink-0"
76
174
  />
175
+
176
+ <p class="text-sm">
177
+ {{ t('footer.subtitle') }}
178
+ </p>
179
+
180
+ <div class="hidden lg:flex gap-8">
181
+ <nuxt-link
182
+ v-for="(social, idx) in socialMedia"
183
+ :key="idx"
184
+ target="_blank"
185
+ :to="social.link"
186
+ :aria-label="social.name"
187
+ >
188
+ <span class="visually-hidden"> {{ social.name }}</span>
189
+ <component
190
+ :is="social.icon"
191
+ filled
192
+ :font-controlled="false"
193
+ class="social-icon size-7"
194
+ />
195
+ </nuxt-link>
196
+ </div>
77
197
  </div>
198
+
199
+ <p class="hidden lg:block text-[10px]">
200
+ {{ year }} © {{ t('footer.LLP') }} "Alldata"
201
+ </p>
78
202
  </div>
79
- <div class="flex grow justify-end gap-8 py-5">
203
+
204
+ <div class="flex gap-6 lg:gap-[75px] flex-col lg:flex-row">
205
+ <div class="flex gap-[18px] lg:gap-[75px] flex-col lg:flex-row">
206
+ <div
207
+ v-for="(item, idx) in mainLinks"
208
+ :key="idx"
209
+ >
210
+ <a-footer-accordion
211
+ :label="item.title"
212
+ :link="item?.link?.replace(/\/$/, '')"
213
+ :content="item.items"
214
+ />
215
+ </div>
216
+ </div>
217
+ <!--noindex-->
218
+ <div class="flex flex-col gap-2 items-start" data-nosnippet>
219
+ <nuxt-link
220
+ class="text-sm font-semibold pb-3 pr-4 border-b-[0.5px] border-white cursor-pointer"
221
+ :to="contactLinks.link?.replace(/\/$/, '')"
222
+ >
223
+ {{ contactLinks.title }}
224
+ </nuxt-link>
225
+
226
+ <div class="flex flex-col gap-3 lg:gap-2">
227
+ <div
228
+ v-for="(link, idx) in contactLinks.items"
229
+ :key="idx"
230
+ class="flex gap-2 items-center"
231
+ >
232
+ <nuxt-link
233
+ class="text-xs font-medium flex gap-2 items-center cursor-pointer"
234
+ :class="link.class"
235
+ :to="link.link?.replace(/\/$/, '')"
236
+ >
237
+ <component
238
+ :is="link.startIcon"
239
+ v-if="link.startIcon"
240
+ class="size-4 shrink-0"
241
+ />
242
+
243
+ <p>{{ link.title }}</p>
244
+
245
+ <component
246
+ :is="link.endIcon"
247
+ v-if="link.endIcon"
248
+ class="size-4 shrink-0"
249
+ />
250
+ </nuxt-link>
251
+ </div>
252
+ </div>
253
+ </div>
254
+ <!--/noindex-->
255
+ </div>
256
+
257
+ <div class="lg:hidden flex gap-8 flex-wrap">
80
258
  <nuxt-link
81
259
  v-for="(social, idx) in socialMedia"
82
260
  :key="idx"
@@ -88,39 +266,14 @@ const links = useFooterNavigationLinks()
88
266
  :is="social.icon"
89
267
  filled
90
268
  :font-controlled="false"
91
- class="social-icon h-[28px] w-[28px]"
269
+ class="social-icon size-7"
92
270
  />
93
271
  </nuxt-link>
94
272
  </div>
273
+
274
+ <p class="lg:hidden text-[10px]">
275
+ {{ year }} © {{ t('footer.LLP') }} "Alldata"
276
+ </p>
95
277
  </div>
96
- <div class="relative">
97
- <div class="a-container mobile-padding py-5">
98
- <div
99
- class="flex flex-col gap-10 text-xs text-white before:absolute before:left-0 before:top-0 before:h-[0.5px] before:w-full before:bg-white lg:flex-row lg:items-center lg:gap-5"
100
- >
101
- <div class="flex flex-col gap-4 lg:flex-row lg:gap-6">
102
- <nuxt-link-locale
103
- v-for="(item, idx) in info"
104
- :key="idx"
105
- target="_blank"
106
- class="text-[10px]"
107
- :to="item.link"
108
- >
109
- {{ t(item.title) }}
110
- </nuxt-link-locale>
111
- </div>
112
- <div class="flex justify-center lg:grow lg:items-center lg:justify-end lg:gap-4">
113
- <div class="flex flex-col gap-1">
114
- <span>{{ year }} © {{ t('footer.LLP') }} "Alldata"</span>
115
- </div>
116
- <adata-logo
117
- filled
118
- :font-controlled="false"
119
- class="hidden h-[26px] w-[92px] lg:block"
120
- />
121
- </div>
122
- </div>
123
- </div>
124
- </div>
125
- </div>
278
+ </footer>
126
279
  </template>
@@ -16,8 +16,6 @@ const props = defineProps<Props>()
16
16
 
17
17
  const isDesktop = useMediaQuery('(max-width: 1024px)')
18
18
 
19
- const { t } = useI18n()
20
-
21
19
  const open = ref(false)
22
20
  function toFinalValues(el: HTMLDivElement) {
23
21
  el.style.height = el.scrollHeight + 'px'
@@ -46,7 +44,7 @@ const filterCheck = computed(() => {
46
44
  :class="{ 'cursor-pointer': link }"
47
45
  :to="link?.replace(/\/$/, '')"
48
46
  >
49
- {{ t(label) }}
47
+ {{ label }}
50
48
  </nuxt-link>
51
49
 
52
50
  <div class="transition-all lg:hidden cursor-pointer">
@@ -85,7 +83,7 @@ const filterCheck = computed(() => {
85
83
  class="text-xs lg:font-medium flex gap-2 items-center cursor-pointer"
86
84
  :to="link.link?.replace(/\/$/, '')"
87
85
  >
88
- {{ t(link.title) }}
86
+ {{ link.title }}
89
87
  </nuxt-link>
90
88
 
91
89
  <div
@@ -1,86 +1,94 @@
1
1
  <script lang="ts" setup>
2
- import AdataLogo from '#adata-ui/icons/adata-logo.vue'
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 Arrow from '#adata-ui/icons/chevron/chevron-down.vue'
5
- import HeaderLink from './HeaderLink.vue'
6
- import ProfileMenu from '#adata-ui/components/navigation/header/ProfileMenu.vue'
7
- import IconLogout from '#adata-ui/icons/logout.vue'
8
- import TopHeader from '#adata-ui/components/navigation/header/TopHeader.vue'
9
4
  import LangSwitcher from '#adata-ui/components/features/lang-switcher/lang-switcher.vue'
10
5
  import AChangeVersion from '#adata-ui/components/features/сhange-version/AChangeVersion.vue'
11
- import Logo from '#adata-ui/icons/logo.vue'
12
- import type { ProjectKeys } from '#adata-ui/components/navigation/header/types'
6
+ import ProfileMenu from '#adata-ui/components/navigation/header/ProfileMenu.vue'
7
+ import TopHeader from '#adata-ui/components/navigation/header/TopHeader.vue'
13
8
  import { useContacts, useCurrentModule } from '#adata-ui/composables/projectState'
14
- import { navigateToLocalizedPage, buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
9
+ import AdataLogo from '#adata-ui/icons/adata-logo.vue'
10
+ import Arrow from '#adata-ui/icons/chevron/chevron-down.vue'
11
+ import Logo from '#adata-ui/icons/logo.vue'
12
+ import { buildLocalizedUrl, navigateToLocalizedPage } from '#adata-ui/utils/localizedNavigation'
13
+ import HeaderLink from './HeaderLink.vue'
14
+ import { useUrls } from '#adata-ui/composables/useUrls'
15
15
 
16
16
  defineOptions({ name: 'AHeader' })
17
17
 
18
- interface Props {
19
- replenish?: string
20
- hasNotification?: boolean
21
- email?: string | undefined
22
- rate?: string
23
- daysRemaining?: number
24
- limitRemaining?: number
25
- balance?: number
26
- isAuthenticated?: boolean
27
- showLogIn?: boolean
28
- mobileHeaderType?: 'search' | 'default'
29
- module?: ProjectKeys
30
- oldVersion?: string
31
- }
32
-
33
18
  const props = withDefaults(defineProps<Props>(), {
34
19
  limitRemaining: 0,
35
20
  daysRemaining: 0,
36
21
  balance: 0,
37
22
  rate: 'Базовый',
38
23
  showLogIn: true,
39
- isAuthenticated: false,
40
24
  mobileHeaderType: 'default',
41
- module: 'pk'
25
+ module: 'pk',
42
26
  })
43
27
 
44
28
  const emit = defineEmits(['logout', 'search', 'login'])
45
29
 
30
+ interface Props {
31
+ replenish?: string
32
+ hasNotification?: boolean
33
+ email: string | undefined
34
+ rate: string
35
+ daysRemaining: number
36
+ limitRemaining: number
37
+ balance: number
38
+ isAuthenticated: boolean
39
+ showLogIn?: boolean
40
+ mobileHeaderType?: 'search' | 'default'
41
+ module?: ProjectKeys
42
+ oldVersion?: string
43
+ }
44
+
46
45
  const { t } = useI18n()
47
46
  const { locale } = useI18n()
48
47
 
49
48
  useCurrentModule().value = props.module
50
49
  const appConfig = useAppConfig()
51
50
  const { myLayer }: any = useAppConfig()
51
+ const urls = useUrls()
52
52
 
53
53
  const langIsOn = appConfig.myLayer.langIsOn
54
54
  const contacts = ref(useContacts())
55
- const goAuth = () => {
56
- if (window) {
57
- emit('login')
58
- let fullPath = encodeURIComponent(window.location.toString())
59
- if (fullPath.includes('basic-info')) {
60
- fullPath = fullPath.replace('%2Fcounterparty%2Fmain', '').replace('%2Fbasic-info', '')
61
- }
55
+ const { loginModal } = useIdModals()
62
56
 
63
- navigateToLocalizedPage({
64
- locale,
65
- projectUrl: myLayer.loginUrl.slice(0, -1),
66
- path: `/?url=${fullPath}`,
67
- target: '_self'
68
- })
57
+ function goAuth() {
58
+ if (myLayer.authMode !== 'local') {
59
+ if (window) {
60
+ emit('login')
61
+ let fullPath = encodeURIComponent(window.location.toString())
62
+ if (fullPath.includes('basic-info')) {
63
+ fullPath = fullPath.replace('%2Fcounterparty%2Fmain', '').replace('%2Fbasic-info', '')
64
+ }
65
+
66
+ navigateToLocalizedPage({
67
+ locale,
68
+ projectUrl: urls.login,
69
+ path: `/?url=${fullPath}`,
70
+ target: '_self',
71
+ })
72
+ }
73
+ }
74
+ else {
75
+ loginModal.value = true
69
76
  }
70
77
  }
71
78
 
72
- const goToAnotherModule = () => {
73
- location.href = buildLocalizedUrl(locale.value, myLayer.landingUrl, '')
79
+ function goToAnotherModule() {
80
+ location.href = buildLocalizedUrl(locale.value, urls.landing, '')
74
81
  }
75
82
 
76
- const fetchContacts = async () => {
83
+ async function fetchContacts() {
77
84
  try {
78
85
  const response = await fetch(
79
- 'https://pk-api.adata.kz/api/v1/data/counterparty/contacts/sales-department'
86
+ 'https://pk-api.adata.kz/api/v1/data/counterparty/contacts/sales-department',
80
87
  )
81
88
  const { data } = await response.json()
82
89
  contacts.value = data
83
- } catch (e) {
90
+ }
91
+ catch (e) {
84
92
  console.error(e.message)
85
93
  }
86
94
  }
@@ -102,7 +110,7 @@ onBeforeMount(() => {
102
110
  class="relative h-16 border-b border-deepblue-900/10 bg-white dark:border-gray-200/10 dark:bg-gray-900"
103
111
  >
104
112
  <div class="a-container mobile-padding flex h-full items-center justify-between gap-2">
105
- <!-- Desktop hidden-->
113
+ <!-- Desktop hidden -->
106
114
  <section
107
115
  id="mobile-header"
108
116
  class="grow lg:hidden"
@@ -111,7 +119,7 @@ onBeforeMount(() => {
111
119
  v-if="mobileHeaderType === 'default'"
112
120
  class="flex justify-center"
113
121
  >
114
- <nuxt-link
122
+ <div
115
123
  class="text-deepblue dark:text-[#E3E5E8]"
116
124
  @click="goToAnotherModule"
117
125
  >
@@ -121,7 +129,7 @@ onBeforeMount(() => {
121
129
  :font-controlled="false"
122
130
  filled
123
131
  />
124
- </nuxt-link>
132
+ </div>
125
133
  </div>
126
134
  <div
127
135
  v-else-if="mobileHeaderType === 'search'"
@@ -146,11 +154,11 @@ onBeforeMount(() => {
146
154
  class="lg:hidden"
147
155
  />
148
156
  </div>
149
- <!--Mobile hidden-->
150
- <nav class="hidden items-center gap-4 lg:flex">
157
+ <!-- Mobile hidden -->
158
+ <nav class="hidden items-center gap-4 lg:flex" itemscope itemtype="https://schema.org/SiteNavigationElement" role="list">
151
159
  <nuxt-link-locale
152
160
  aria-label="Adata-logo"
153
- :to="buildLocalizedUrl(locale, myLayer.landingUrl)"
161
+ :to="buildLocalizedUrl(locale, urls.landing)"
154
162
  class="text-deepblue cursor-pointer dark:text-[#E3E5E8]"
155
163
  @click="goToAnotherModule"
156
164
  >
@@ -162,7 +170,7 @@ onBeforeMount(() => {
162
170
  <header-link />
163
171
  </nav>
164
172
  <div class="text-deepblue hidden items-center gap-4 dark:text-[#E3E5E8] lg:flex">
165
- <!--Mobile hidden-->
173
+ <!-- Mobile hidden -->
166
174
  <div class="hidden items-center gap-4 lg:flex">
167
175
  <a-change-version
168
176
  v-if="oldVersion"