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,5 +1,6 @@
1
1
  <template>
2
- <div class="h-[272px]">
2
+ <!--noindex-->
3
+ <div class="h-[272px]" data-nosnippet>
3
4
  <h2 class="heading-02 mb-4">
4
5
  {{ t('header.contacts.almaty.title') }}
5
6
  </h2>
@@ -10,7 +11,7 @@
10
11
  class="flex flex-col gap-2 "
11
12
  >
12
13
  <div class="heading-04">
13
- {{ t(item.title) }}
14
+ {{ item.title }}
14
15
  </div>
15
16
  <a
16
17
  class="flex items-center gap-1 text-deepblue-900 dark:text-white"
@@ -21,7 +22,7 @@
21
22
  class="shrink-0"
22
23
  />
23
24
  <div class=" body-400">
24
- {{ t(item.subtitle) }}
25
+ {{ item.subtitle }}
25
26
  </div>
26
27
  </a>
27
28
  </div>
@@ -60,7 +61,7 @@
60
61
  target="_blank"
61
62
  >
62
63
  <div class="body-400 line-clamp-1 text-blue-600">
63
- {{ t(link.subtitle) }}
64
+ {{ link.subtitle }}
64
65
  </div>
65
66
  <component
66
67
  :is="link.icon"
@@ -89,6 +90,7 @@
89
90
  <!-- </div>-->
90
91
  </div>
91
92
  </div>
93
+ <!--/noindex-->
92
94
  </template>
93
95
 
94
96
  <script setup lang="ts">
@@ -103,33 +105,33 @@ import {useContacts} from "#adata-ui/composables/projectState";
103
105
 
104
106
  const {t} = useI18n()
105
107
  const contacts = ref(useContacts())
106
- const AlmatyItems = [
108
+ const AlmatyItems = computed(() => ([
107
109
  {
108
- title: 'header.contacts.almaty.adress.title',
109
- subtitle: 'header.contacts.almaty.adress.subtitle',
110
+ title: t('header.contacts.almaty.adress.title'),
111
+ subtitle: t('header.contacts.almaty.adress.subtitle'),
110
112
  icon: Location,
111
113
  to: 'https://yandex.kz/maps/ru/org/avrora_kholding/1099794306/?ll=76.912479%2C43.208928&z=17.72'
112
114
  },
113
115
  {
114
- title: 'header.contacts.almaty.email.title',
116
+ title: t('header.contacts.almaty.email.title'),
115
117
  subtitle: 'info@adata.kz',
116
118
  icon: Mail,
117
119
  to: 'mailto:info@adata.kz'
118
120
  },
119
121
  {
120
- title: 'header.contacts.almaty.schedule.title',
121
- subtitle: 'header.contacts.almaty.schedule.subtitle',
122
+ title: t('header.contacts.almaty.schedule.title'),
123
+ subtitle: t('header.contacts.almaty.schedule.subtitle'),
122
124
  icon: Clock,
123
125
  },
124
- ]
126
+ ]))
125
127
 
126
- const technicalSupport = [
128
+ const technicalSupport = computed(() => ([
127
129
  {
128
- subtitle: 'header.contacts.almaty.support.linkTitle',
130
+ subtitle: t('header.contacts.almaty.support.linkTitle'),
129
131
  icon: ExpandWindow,
130
132
  to: "https://api.whatsapp.com/send/?phone=77712289041"
131
133
  }
132
- ]
134
+ ]))
133
135
 
134
136
  const newContacts = computed(()=> contacts.value.map(item => ({
135
137
  subtitle: item.contact,
@@ -1,5 +1,6 @@
1
1
  <template>
2
- <div class="h-[272px]">
2
+ <!--noindex-->
3
+ <div class="h-[272px]" data-nosnippet>
3
4
  <h2 class="heading-02 mb-4">
4
5
  {{ t('header.contacts.astana.title') }}
5
6
  </h2>
@@ -7,7 +8,7 @@
7
8
  <div class="xl:grid grid-cols-2 grid-rows-3 flex flex-wrap gap-4 ">
8
9
  <div v-for="(item, index) in AstanaItems" class="flex flex-col gap-2 " :class="{'col-span-2':index===0 }">
9
10
  <div class="heading-04">
10
- {{ t(item.title) }}
11
+ {{ item.title }}
11
12
  </div>
12
13
  <a
13
14
  class="flex items-center gap-1 text-deepblue-900 dark:text-white"
@@ -16,13 +17,14 @@
16
17
  >
17
18
  <component :is="item.icon"/>
18
19
  <div class=" body-400">
19
- {{ t(item.subtitle) }}
20
+ {{ item.subtitle }}
20
21
  </div>
21
22
  </a>
22
23
  </div>
23
24
  </div>
24
25
  </div>
25
26
  </div>
27
+ <!--/noindex-->
26
28
  </template>
27
29
 
28
30
  <script setup lang="ts">
@@ -33,31 +35,31 @@ import Clock from "#adata-ui/icons/clock.vue";
33
35
  import Whatsapp from "#adata-ui/icons/whatsapp.vue";
34
36
 
35
37
  const {t} = useI18n()
36
- const AstanaItems = [
38
+ const AstanaItems = computed(() => ([
37
39
  {
38
- title: 'header.contacts.astana.adress.title',
39
- subtitle: 'header.contacts.astana.adress.subtitle',
40
+ title: t('header.contacts.astana.adress.title'),
41
+ subtitle: t('header.contacts.astana.adress.subtitle'),
40
42
  icon: Location,
41
43
  to: 'https://yandex.kz/maps/ru/org/adata_consulting/214484722242/?ll=71.429573%2C51.131319&z=20.56'
42
44
  },
43
45
  {
44
- title: 'header.contacts.astana.email.title',
46
+ title: t('header.contacts.astana.email.title'),
45
47
  subtitle: 'info@adata-c.kz',
46
48
  icon: Mail,
47
49
  to: 'mailto:info@adata-c.kz'
48
50
  },
49
51
  {
50
- title: 'header.contacts.astana.schedule.title',
51
- subtitle: 'header.contacts.astana.schedule.subtitle',
52
+ title: t('header.contacts.astana.schedule.title'),
53
+ subtitle: t('header.contacts.astana.schedule.subtitle'),
52
54
  icon: Clock,
53
55
  },
54
56
  {
55
- title: 'header.contacts.astana.sellDep.title',
57
+ title: t('header.contacts.astana.sellDep.title'),
56
58
  subtitle: '+7 700 744 00 10',
57
59
  icon: Whatsapp,
58
60
  to: "https://api.whatsapp.com/send/?phone=77007440010"
59
61
  },
60
- ]
62
+ ]))
61
63
  </script>
62
64
 
63
65
  <style scoped>
@@ -2,8 +2,9 @@
2
2
  import { AIconArrowCircleDown, AIconGlobe, AIconId, AIconArrowSideUp } from '#components'
3
3
  import { PAGES } from '#adata-ui/shared/constans/pages'
4
4
  import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
5
+ import { useUrls } from '#adata-ui/composables/useUrls'
5
6
 
6
- const { myLayer } = useAppConfig()
7
+ const urls = useUrls()
7
8
  const { t, locale } = useI18n()
8
9
  const colorMode = useColorMode()
9
10
  const computedColorMode = computed(() => colorMode.value)
@@ -13,21 +14,21 @@ const items = computed(()=>{
13
14
  {
14
15
  title: 'header.products.galleryCards.unload.title',
15
16
  subtitle: 'header.products.galleryCards.unload.subtitle',
16
- to: buildLocalizedUrl(locale, myLayer.pkUrl, PAGES.pk.unload),
17
+ to: buildLocalizedUrl(locale, urls.pk, PAGES.pk.unload),
17
18
  image: '/header/unload.webp',
18
19
  icon: AIconArrowCircleDown,
19
20
  },
20
21
  {
21
22
  title: 'header.products.galleryCards.compliance.title',
22
23
  subtitle: 'header.products.galleryCards.compliance.subtitle',
23
- to: buildLocalizedUrl(locale, myLayer.complianceUrl, PAGES.compliance.l),
24
+ to: buildLocalizedUrl(locale, urls.compliance, PAGES.compliance.l),
24
25
  image: '/header/compliance.webp',
25
26
  icon: AIconId,
26
27
  },
27
28
  {
28
29
  title: 'header.products.galleryCards.ved.title',
29
30
  subtitle: 'header.products.galleryCards.ved.subtitle',
30
- to: buildLocalizedUrl(locale, myLayer.tnvedUrl),
31
+ to: buildLocalizedUrl(locale, urls.tnved),
31
32
  image: '/header/ved.webp',
32
33
  icon: AIconGlobe,
33
34
  },
@@ -6,22 +6,27 @@ import ProductMenu from '#adata-ui/components/navigation/header/ProductMenu.vue'
6
6
 
7
7
  import ContactMenu from '#adata-ui/components/navigation/header/ContactMenu.vue'
8
8
  import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
9
+ import { useUrls } from '#adata-ui/composables/useUrls'
9
10
 
10
- const { myLayer }: any = useAppConfig()
11
+ const { landing } = useUrls()
11
12
  const { t, locale } = useI18n()
12
13
 
13
14
  const navs: any = [
14
15
  {
15
16
  label: 'header.navs.products',
16
- to: myLayer.landingUrl + PAGES.totalServices
17
+ to: landing + PAGES.totalServices
17
18
  },
18
19
  {
19
20
  label: 'header.navs.contacts',
20
- to: myLayer.landingUrl + PAGES.contacts
21
+ to: landing + PAGES.contacts
21
22
  },
22
23
  {
23
24
  label: 'header.navs.tariffs',
24
- to: myLayer.landingUrl + PAGES.tariffs
25
+ to: landing + PAGES.tariffs
26
+ },
27
+ {
28
+ label: 'header.navs.api',
29
+ to: landing + PAGES.api
25
30
  }
26
31
  ]
27
32
 
@@ -47,7 +52,9 @@ const currentMenuToShow = (index) => {
47
52
  }
48
53
  const toggleMenu = (index: number) => {
49
54
  if (index === 2) {
50
- window.open(buildLocalizedUrl(locale, myLayer.landingUrl, PAGES.tariffs), '_blank')
55
+ window.open(buildLocalizedUrl(locale, landing, PAGES.tariffs), '_blank')
56
+ } else if (index === 3) {
57
+ window.open(buildLocalizedUrl(locale, landing, PAGES.api), '_blank')
51
58
  } else {
52
59
  currentMenu.value = currentMenuToShow(index)
53
60
  const prev = currentIndex.value
@@ -76,7 +83,7 @@ const closeMenu = (forceClose = false) => {
76
83
  }
77
84
  }
78
85
  const onMenuMouseEnter = (index: number) => {
79
- if (index !== 2) {
86
+ if (![2, 3].includes(index)) {
80
87
  if (show.value === false) {
81
88
  delayTimer.value = setTimeout(() => {
82
89
  toggleMenu(index)
@@ -144,6 +151,7 @@ watch(
144
151
  :key="nav.label"
145
152
  class="group inline-block border-r border-[#2C3E501A] px-2 last-of-type:border-none dark:border-[#E3E5E81A]"
146
153
  @click="lockMenu"
154
+ role="listitem"
147
155
  >
148
156
  <div
149
157
  class="relative cursor-pointer font-bold uppercase text-gray-800 hover:text-gray-600 dark:text-gray-200 hover:dark:text-gray-600"
@@ -158,7 +166,7 @@ watch(
158
166
  <div
159
167
  v-show="show"
160
168
  ref="menu"
161
- class="mt-5 fixed left-0 z-20 h-full w-full"
169
+ class="top-[104px] fixed left-0 z-20 h-full w-full"
162
170
  >
163
171
  <div class="h-full w-full">
164
172
  <transition :name="animation">
@@ -168,7 +176,7 @@ watch(
168
176
  v-show="show"
169
177
  :animation="forward ? 'next' : 'prev'"
170
178
  :index="currentIndex"
171
- :url="buildLocalizedUrl(locale, myLayer.landingUrl, PAGES.contacts)"
179
+ :url="buildLocalizedUrl(locale, landing, PAGES.contacts)"
172
180
  @outer-click="closeMenu(true)"
173
181
  @mouse-over="closeMenu"
174
182
  />
@@ -11,12 +11,17 @@ const props = defineProps<{
11
11
  id: string
12
12
  icon?: Component
13
13
  title: string
14
+ link: string
14
15
  badge?: boolean
15
16
  to: string
16
17
  navList: NavList[]
17
18
  currentModule: boolean
18
19
  }>()
19
20
 
21
+ const colorMode = useColorMode()
22
+
23
+ const isDark = computed(() => colorMode.value === 'dark')
24
+
20
25
  function isActive(itemPath: string) {
21
26
  if (!props.currentModule) return false
22
27
 
@@ -69,7 +74,7 @@ function isActive(itemPath: string) {
69
74
  class="flex flex-col gap-2"
70
75
  :class="{ 'rounded-md bg-gray-50 p-2 dark:bg-gray-800': currentModule }"
71
76
  >
72
- <div class="flex items-center gap-2 pl-[10px]">
77
+ <nuxt-link-locale class="flex items-center gap-2 pl-[10px] hover:text-blue-700 dark:hover:text-blue-500" :to="link">
73
78
  <p class="text-sm font-semibold">
74
79
  {{ title }}
75
80
  </p>
@@ -82,15 +87,15 @@ function isActive(itemPath: string) {
82
87
  >
83
88
  NEW
84
89
  </a-status-badge>
85
- </div>
90
+ </nuxt-link-locale>
86
91
  <ul class="flex flex-col gap-2">
87
92
  <li
88
93
  v-for="item in navList"
89
94
  :key="item.title"
90
- class="flex w-full items-center gap-2 rounded-md px-[10px] py-[6px] hover:bg-deepblue-900/5 dark:hover:bg-gray-200/5"
95
+ class="flex w-full items-center gap-2 rounded-md px-[10px] py-[6px] hover:bg-blue-100 dark:hover:bg-gray-200/10 text-gray-600 dark:text-gray-200 hover:text-blue-700 dark:hover:text-blue-500"
91
96
  :class="{ 'bg-blue-100 dark:bg-gray-200/10': isActive(item.to) }"
92
97
  >
93
- <div class="bg-gradient-blue g-white rounded-lg p-1 dark:bg-gray-900">
98
+ <div class="rounded-lg p-1" :class="{ 'bg-gradient-blue-dark ': isDark, 'bg-gradient-blue-light': !isDark }">
94
99
  <component
95
100
  :is="item.icon"
96
101
  class="size-[18px] text-white dark:text-gray-900"
@@ -99,7 +104,8 @@ function isActive(itemPath: string) {
99
104
  <nuxt-link-locale
100
105
  v-if="item.to"
101
106
  :to="item.to"
102
- class="inline-block normal-case w-full cursor-pointer align-middle text-sm font-semibold text-gray-600 dark:text-gray-200"
107
+ itemprop="name"
108
+ class="inline-block normal-case w-full cursor-pointer align-middle text-sm font-semibold text-inherit hover:text-inherit"
103
109
  >
104
110
  {{ item.title }}
105
111
  </nuxt-link-locale>
@@ -113,3 +119,13 @@ function isActive(itemPath: string) {
113
119
  </ul>
114
120
  </div>
115
121
  </template>
122
+
123
+ <style scoped lang="scss">
124
+ .bg-gradient-blue-dark {
125
+ background: linear-gradient(236.46deg, #4FBDFF -2.39%, #1B98E2 79.1%);
126
+ }
127
+
128
+ .bg-gradient-blue-light {
129
+ background: linear-gradient(236.46deg, #479FFF -2.39%, #0070EB 79.1%);
130
+ }
131
+ </style>
@@ -1,33 +1,4 @@
1
1
  <script setup lang="ts">
2
- import NavCard from '#adata-ui/components/navigation/header/NavCard.vue'
3
- import { PAGES } from '#adata-ui/shared/constans/pages'
4
- import ListItem from '#adata-ui/components/navigation/header/ListItem.vue'
5
- import IconSearch from '#adata-ui/icons/search.vue'
6
- import IconUsers from '#adata-ui/icons/users.vue'
7
- import IconScales from '#adata-ui/icons/scales/scale.vue'
8
- import IconLink from '#adata-ui/icons/link-chain.vue'
9
- import IconArrowCircle from '#adata-ui/icons/arrow/arrow-circle-down.vue'
10
- import IconBlock from '#adata-ui/icons/block.vue'
11
- import IconDollar from '#adata-ui/icons/currency/currency-dollar.vue'
12
- import IconWork from '#adata-ui/icons/work-bag.vue'
13
- import IconDocument from '#adata-ui/icons/hdocument.vue'
14
- import IconCheck from '#adata-ui/icons/hcheck.vue'
15
- import IconCalc from '#adata-ui/icons/calculator.vue'
16
- import IconGlobe from '#adata-ui/icons/globe.vue'
17
- import IconFile from '#adata-ui/icons/file/file.vue'
18
- import IconCheckCircle from '#adata-ui/icons/check/check-circle.vue'
19
- import IconCar from '#adata-ui/icons/car.vue'
20
- import IconTruck from '#adata-ui/icons/truck.vue'
21
- import IconArrowGraph from '#adata-ui/icons/arrow/arrow-graph-up.vue'
22
- import IconMedal from '#adata-ui/icons/medal.vue'
23
- import IconHandshake from '#adata-ui/icons/handshake.vue'
24
- import IconClipboardText from '#adata-ui/icons/clipboard-text.vue'
25
- import IconUsersFocus from '#adata-ui/icons/users-focus.vue'
26
- import IconCompany from '#adata-ui/icons/company.vue'
27
- import IconProfile from '#adata-ui/icons/profile.vue'
28
- import Connections from '#adata-ui/icons/sviazi.vue'
29
-
30
- import { useCurrentModule } from '#adata-ui/composables/projectState'
31
2
  import { useHeaderNavigationLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
32
3
  import NavList from '#adata-ui/components/navigation/header/NavList.vue'
33
4
  import CardGallery from '#adata-ui/components/navigation/header/CardGallery.vue'
@@ -46,55 +17,9 @@ const props = withDefaults(
46
17
  )
47
18
 
48
19
  defineEmits(['outerClick', 'mouseOver'])
49
- const { myLayer }: any = useAppConfig()
50
- const colorMode = useColorMode()
51
- const activeTab = ref(useCurrentModule().value)
52
- const localePath = useLocalePath()
53
-
54
- const { t, locale } = useI18n()
55
20
 
56
21
  const pageUrl = useRequestURL()
57
-
58
- const allImages = computed(() => {
59
- if (activeTab.value === 'pk' || activeTab.value === 'counterparty') {
60
- return colorMode.value === 'dark'
61
- ? `/mode/dark-pk-${locale.value}.webp`
62
- : `/mode/light-pk-${locale.value}.webp`
63
- }
64
- if (activeTab.value === 'work') {
65
- return colorMode.value === 'dark'
66
- ? `/mode/dark-work-${locale.value}.webp`
67
- : `/mode/light-work-${locale.value}.webp`
68
- }
69
- if (activeTab.value === 'tenders') {
70
- return colorMode.value === 'dark'
71
- ? `/mode/dark-tenders-${locale.value}.webp`
72
- : `/mode/light-tenders-${locale.value}.webp`
73
- }
74
- if (activeTab.value === 'fines') {
75
- return colorMode.value === 'dark'
76
- ? `/mode/dark-fines-${locale.value}.webp`
77
- : `/mode/light-fines-${locale.value}.webp`
78
- }
79
- if (activeTab.value === 'analytics') {
80
- return colorMode.value === 'dark'
81
- ? `/mode/dark-analytics-${locale.value}.webp`
82
- : `/mode/light-analytics-${locale.value}.webp`
83
- }
84
- if (activeTab.value === 'fea') {
85
- return colorMode.value === 'dark'
86
- ? `/mode/dark-fea-${locale.value}.webp`
87
- : `/mode/light-fea-${locale.value}.webp`
88
- }
89
- if (activeTab.value === 'compliance') {
90
- return colorMode.value === 'dark'
91
- ? `/mode/dark-complience-${locale.value}.webp`
92
- : `/mode/light-complience-${locale.value}.webp`
93
- }
94
- })
95
-
96
22
  const filteredItems = useHeaderNavigationLinks()
97
- const someHovered = ref(false)
98
23
 
99
24
  function isCurrentModule(currentModule: string) {
100
25
  if (currentModule === 'fines') return 'avto'
@@ -118,26 +43,30 @@ function isCurrentModule(currentModule: string) {
118
43
  <div class="flex gap-[10px] divide-x divide-gray-500/50">
119
44
  <div class="flex flex-col gap-5 w-[290px]">
120
45
  <nav-list
121
- v-for="module in filteredItems.slice(0,2)"
46
+ v-for="module in filteredItems.slice(0,3)"
122
47
  :id="module.key"
123
48
  :key="module.key"
124
49
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
125
50
  :title="module.name"
51
+ :link="module.link"
126
52
  :nav-list="module.items"
127
53
  :to="module.to"
128
54
  :icon="module.icon"
55
+ :badge="module.is_new"
129
56
  />
130
57
  </div>
131
58
  <div class="flex flex-col gap-5 w-[290px] pl-[10px]">
132
59
  <nav-list
133
- v-for="module in filteredItems.slice(2,5)"
60
+ v-for="module in filteredItems.slice(3,5)"
134
61
  :id="module.key"
135
62
  :key="module.key"
136
63
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
137
64
  :title="module.name"
65
+ :link="module.link"
138
66
  :nav-list="module.items"
139
67
  :to="module.to"
140
68
  :icon="module.icon"
69
+ :badge="module.is_new"
141
70
  />
142
71
  </div>
143
72
  <div class="flex flex-col gap-5 w-[330px] pl-[10px]">
@@ -147,10 +76,11 @@ function isCurrentModule(currentModule: string) {
147
76
  :key="module.key"
148
77
  :current-module="pageUrl.hostname.startsWith(isCurrentModule(module.key))"
149
78
  :title="module.name"
79
+ :link="module.link"
150
80
  :nav-list="module.items"
151
81
  :to="module.to"
152
82
  :icon="module.icon"
153
- badge
83
+ :badge="module.is_new"
154
84
  />
155
85
  </div>
156
86
  </div>
@@ -24,16 +24,21 @@ defineEmits(['logout'])
24
24
 
25
25
  const { t } = useI18n()
26
26
 
27
- const { myLayer }: any = useAppConfig()
28
27
  const { locale } = useI18n()
29
28
 
29
+ // const { topUpSidePanel } = usePayment()
30
+
30
31
  const items = useHeaderMenuLinks()
31
32
 
33
+ const { topUpSidePanel, rateId } = usePayment()
34
+
32
35
  const onReplenish = () => {
33
- if (window) {
34
- window.location.href =
35
- buildLocalizedUrl(locale.value, myLayer.landingUrl, '/profile?popupBalance=1')
36
- }
36
+ // if (myLayer.authMode === 'locale') {
37
+ // topUpSidePanel.value = true
38
+ // return
39
+ // }
40
+ rateId.value = ''
41
+ topUpSidePanel.value = true
37
42
  }
38
43
  </script>
39
44
 
@@ -127,8 +127,8 @@ const closeMessage = () => {
127
127
  v-if="!isOpenNotification || !systemMessage"
128
128
  class="hidden min-h-10 bg-gray-50 dark:bg-gray-950 lg:block"
129
129
  >
130
- <div class="a-container flex justify-between py-2 text-sm">
131
- <div class="flex items-center">
130
+ <div class="a-container flex justify-between py-2 items-center text-sm">
131
+ <div class="flex items-center leading-[24px]">
132
132
  <div v-for="currency in currencies" :key="currency.currency" class="mr-4 flex gap-2">
133
133
  <div class="flex items-center">
134
134
  <component
@@ -7,6 +7,7 @@ import ProfileMenu from '#adata-ui/components/navigation/header/ProfileMenu.vue'
7
7
  import type { ProjectKeys } from '#adata-ui/components/navigation/header/types'
8
8
  import { useCurrentModule } from '#adata-ui/composables/projectState'
9
9
  import AModal from "#adata-ui/components/overlays/modal/AModal.vue";
10
+ import { useUrls } from '#adata-ui/composables/useUrls'
10
11
 
11
12
  interface Props {
12
13
  replenish?: string
@@ -31,8 +32,7 @@ const props = withDefaults(defineProps<Props>(), {
31
32
  })
32
33
  const emit = defineEmits(['logout'])
33
34
  useCurrentModule().value = props.module
34
- const appConfig = useAppConfig()
35
- const landingUrl = appConfig.myLayer.landingUrl
35
+ const { landing } = useUrls()
36
36
  const activeModule = ref<string | null>(null)
37
37
  const isMain = ref(false)
38
38
  const isContacts = ref(false)
@@ -62,7 +62,7 @@ watch(activeModule, (e) => {
62
62
  } else if (e === 'profile') {
63
63
  isProfile.value = true
64
64
  } else if (e === 'tariff') {
65
- navigateTo(`${landingUrl}/tariffs`, { external: true })
65
+ navigateTo(`${landing}/tariffs`, { external: true })
66
66
  }
67
67
  activeModule.value = ''
68
68
  })
@@ -2,8 +2,12 @@
2
2
  <div
3
3
  ref="tabs"
4
4
  class="scroll-container overflow-auto whitespace-nowrap"
5
- :class="props.wrapper === 'row' ? 'flex gap-1' : 'flex flex-col gap-1'"
5
+ :class="[
6
+ props.wrapper === 'row' ? 'flex gap-1' : 'flex flex-col gap-1',
7
+ isSegmented ? 'rounded-[12px] bg-gray-50 p-1 shadow-[inset_2px_2px_4px_0_#00000014] dark:bg-gray-800' : ''
8
+ ]"
6
9
  >
10
+
7
11
  <button
8
12
  v-for="option in options"
9
13
  :key="option.key"
@@ -48,8 +52,9 @@ const emit = defineEmits(['selectOption', 'prevent'])
48
52
 
49
53
  interface Props {
50
54
  options: Tab[]
51
- view?: 'transparent' | 'main' | 'gray' | 'blue' | 'mobile'
52
- size?: 'lg' | 'sm' | 'xs'
55
+ // TODO: переименовать segmented
56
+ view?: 'transparent' | 'main' | 'gray' | 'blue' | 'mobile' | 'segmented'
57
+ size?: 'lg' | 'md' | 'sm' | 'xs' | 'ss'
53
58
  badgeSize?: 'sm' | 'md' | 'lg'
54
59
  align?: 'left' | 'center'
55
60
  block?: boolean
@@ -60,7 +65,7 @@ interface Props {
60
65
 
61
66
  const props = withDefaults(defineProps<Props>(), {
62
67
  view: 'main',
63
- size: 'sm',
68
+ size: 'md',
64
69
  align: 'center',
65
70
  badgeSize: 'lg',
66
71
  block: false,
@@ -71,6 +76,10 @@ const tabs = ref<HTMLDivElement | null>(null)
71
76
  const activeTab = defineModel<any>({ default: 1 })
72
77
  const { t } = useI18n()
73
78
 
79
+
80
+ // todo: вынести в пропc
81
+ const isSegmented = computed(() => props.view === 'segmented')
82
+
74
83
  const viewTypeValues: ViewType = {
75
84
  main: {
76
85
  default:
@@ -95,6 +104,10 @@ const viewTypeValues: ViewType = {
95
104
  default:
96
105
  'bg-white dark:text-gray-200 font-semibold dark:bg-gray-900 dark:hover:bg-gray-500 hover:bg-deepblue-100 ',
97
106
  selected: 'text-white dark:text-gray-900 font-semibold dark:bg-white bg-deepblue-900'
107
+ },
108
+ segmented: {
109
+ default: 'text-deepblue-900 bg-transparent hover:bg-black/5 dark:hover:bg-white/10 dark:text-gray-200',
110
+ selected: 'bg-white text-deepblue-900 font-semibold shadow dark:bg-gray-900 dark:text-gray-200 shadow-[2px_2px_4px_0_#00000014]'
98
111
  }
99
112
  }
100
113
 
@@ -114,6 +127,7 @@ const selectedClasses = () => [
114
127
  const sizeOptions = {
115
128
  lg: 'px-4 py-2.5',
116
129
  sm: 'px-4 py-[7.5px]',
130
+ md: 'px-4 py-2',
117
131
  ss: 'px-3 py-1.5',
118
132
  xs: 'px-3 py-[4px]'
119
133
  }
@@ -9,6 +9,7 @@ export type ViewType = {
9
9
  gray: StateType;
10
10
  blue: StateType;
11
11
  mobile: StateType;
12
+ segmented: StateType;
12
13
  };
13
14
 
14
15