adata-ui 2.1.17 → 2.1.18

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 (410) hide show
  1. package/-error.vue +170 -170
  2. package/.editorconfig +12 -12
  3. package/.gitlab-ci.yml +16 -16
  4. package/.nuxtrc +1 -1
  5. package/.nvmrc +1 -1
  6. package/.playground/app.config.ts +5 -5
  7. package/.playground/nuxt.config.ts +3 -3
  8. package/README.md +75 -75
  9. package/app.config.ts +28 -28
  10. package/app.vue +8 -8
  11. package/assets/styles/index.scss +104 -104
  12. package/assets/styles/modules/_base.scss +5 -5
  13. package/assets/styles/modules/_typography.scss +152 -152
  14. package/components/elements/README.md +1 -1
  15. package/components/elements/a-select-row/index.vue +140 -140
  16. package/components/elements/accordion/AAccordion.vue +197 -197
  17. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +145 -145
  18. package/components/elements/accordion/AAccordionGroup/types.ts +20 -20
  19. package/components/elements/accordion/AAccordionGroup/ui.config.ts +22 -22
  20. package/components/elements/accordion/types.ts +14 -14
  21. package/components/elements/accordion/ui.config.ts +22 -22
  22. package/components/elements/alert/AAlert.vue +65 -65
  23. package/components/elements/banner/ABanner.vue +49 -49
  24. package/components/elements/bg-block/ABgBlock.vue +11 -11
  25. package/components/elements/button/AButton.vue +188 -188
  26. package/components/elements/button/types.ts +24 -24
  27. package/components/elements/button-login/index.vue +21 -21
  28. package/components/elements/calendar/ACalendar.vue +83 -83
  29. package/components/elements/carousel/ACarousel.vue +159 -159
  30. package/components/elements/carousel/config.ui.ts +15 -15
  31. package/components/elements/carousel/types.ts +18 -18
  32. package/components/elements/chip-wrapper/AChipWrapper.vue +80 -80
  33. package/components/elements/chip-wrapper/types.ts +12 -12
  34. package/components/elements/chips/AChips.vue +32 -32
  35. package/components/elements/companies/AOurClients.vue +42 -42
  36. package/components/elements/curve-block/ACurveBlock.vue +291 -291
  37. package/components/elements/digit-badge/ADigitBadge.vue +83 -83
  38. package/components/elements/error-template/index.vue +48 -48
  39. package/components/elements/error-template/types.ts +23 -23
  40. package/components/elements/feature-description/AFeatureDescription.vue +112 -112
  41. package/components/elements/illustrations/noAccess.vue +71 -71
  42. package/components/elements/infinite-carousel/AInfiniteCarousel.vue +57 -57
  43. package/components/elements/infinite-scroll/AInfiniteScroll.vue +33 -33
  44. package/components/elements/leave-note/ALeaveNote.vue +78 -78
  45. package/components/elements/pagination/APagination.vue +110 -110
  46. package/components/elements/photos-animation/APhotosAnimation.vue +85 -85
  47. package/components/elements/select/ASelect.vue +445 -445
  48. package/components/elements/select/ASelectMobile.vue +186 -186
  49. package/components/elements/select/ui/select-button.vue +112 -112
  50. package/components/elements/select/ui/select-list.vue +99 -99
  51. package/components/elements/show-more/AShowMore.vue +35 -35
  52. package/components/elements/skeleton/ASkeleton.vue +44 -44
  53. package/components/elements/star-rating/AStarRating.vue +181 -181
  54. package/components/elements/star-rating/types.ts +7 -7
  55. package/components/elements/star-rating/ui/Star.vue +74 -74
  56. package/components/elements/status-badge/AStatusBadge.vue +74 -74
  57. package/components/elements/table/ATable.vue +93 -93
  58. package/components/elements/table/table.config.ts +32 -32
  59. package/components/elements/tree-select/ATreeSelect.vue +169 -169
  60. package/components/elements/tree-select/TreeService.ts +249 -249
  61. package/components/elements/tree-select/components/tree-select-nodes.vue +90 -90
  62. package/components/elements/tree-select/types.ts +34 -34
  63. package/components/elements/tree-select-mobile/ATreeSelectMobile.vue +79 -79
  64. package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +175 -175
  65. package/components/features/color-mode/AColorMode.client.vue +53 -53
  66. package/components/features/dropdown/ADropdown.vue +124 -124
  67. package/components/features/go-top/GoTop.vue +58 -58
  68. package/components/features/lang-switcher/lang-switcher.vue +63 -63
  69. package/components/features/payment/banner/BasicPlusLimitBanner.vue +104 -104
  70. package/components/features/payment/banner/PaymentBanner.vue +108 -108
  71. package/components/features/payment/banner/UpSellBanner.vue +125 -125
  72. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +158 -158
  73. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +112 -112
  74. package/components/features/payment/process/PaymentMethodSidePanel.vue +121 -121
  75. package/components/features/payment/process/PaymentProcess.vue +138 -138
  76. package/components/features/payment/process/PaymentTopUpSidePanel.vue +130 -130
  77. package/components/features/pk-mobile-services/APkMobileServices.vue +149 -149
  78. package/components/features//321/201hange-version/AChangeVersion.vue +20 -20
  79. package/components/forms/README.md +1 -1
  80. package/components/forms/checkbox/ACheckbox.vue +149 -149
  81. package/components/forms/feedback-form/FeedbackForm.vue +177 -171
  82. package/components/forms/input/button/AInputButton.vue +53 -53
  83. package/components/forms/input/date/AInputDate.vue +213 -213
  84. package/components/forms/input/password/AInputPassword.vue +53 -53
  85. package/components/forms/input/standard/AInputStandard.vue +412 -412
  86. package/components/forms/input/textarea/ATextarea.vue +200 -200
  87. package/components/forms/radio-button/ARadioButton.vue +95 -95
  88. package/components/forms/request-demo/ARequestDemo.vue +108 -103
  89. package/components/forms/toggle/AToggle.vue +157 -157
  90. package/components/forms/toggle/types.ts +16 -16
  91. package/components/modals/AConfirmationEmail.vue +40 -40
  92. package/components/modals/AboutTariffModal.vue +114 -114
  93. package/components/modals/AnotherDeviceModal.vue +60 -60
  94. package/components/modals/ApplicationAcceptedModal.vue +47 -47
  95. package/components/modals/ConnectingTariffModal.vue +67 -67
  96. package/components/modals/ContactsMobileModel.vue +182 -182
  97. package/components/modals/ContentNavigationModal.vue +355 -355
  98. package/components/modals/Insufficient-funds-modal.vue +77 -77
  99. package/components/modals/LimitReachedModal.vue +30 -30
  100. package/components/modals/NoAccessModal.vue +37 -37
  101. package/components/modals/PaymentMethodModal.vue +101 -101
  102. package/components/modals/RedirectsBanksModal.vue +69 -69
  103. package/components/modals/ReplenishModal.vue +132 -132
  104. package/components/modals/ReportBugConfirmModal.vue +30 -30
  105. package/components/modals/ReportBugModal.vue +156 -156
  106. package/components/modals/Resend.vue +82 -82
  107. package/components/modals/SubmitApplicationModal.vue +123 -115
  108. package/components/modals/id/AuthModal.vue +82 -82
  109. package/components/modals/id/IdAutoLogoutModal.vue +45 -45
  110. package/components/modals/id/IdBanner.vue +61 -61
  111. package/components/modals/id/IdConfirmAccountOtpModal.vue +186 -186
  112. package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -41
  113. package/components/modals/id/IdLoginModal.vue +326 -326
  114. package/components/modals/id/IdModals.vue +114 -114
  115. package/components/modals/id/IdNewPasswordModal.vue +129 -129
  116. package/components/modals/id/IdOtpInput.vue +155 -155
  117. package/components/modals/id/IdPasswordSuccessfulModal.vue +25 -25
  118. package/components/modals/id/IdRecoveryModal.vue +117 -117
  119. package/components/modals/id/IdRegistrationModal.vue +215 -215
  120. package/components/modals/id/IdResetPasswordOtpModal.vue +158 -158
  121. package/components/modals/id/IdTwoFactorModal.vue +130 -130
  122. package/components/navigation/README.md +1 -1
  123. package/components/navigation/bottom-navigation/ABottomNavigation.vue +106 -106
  124. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +66 -66
  125. package/components/navigation/breadcrumbs/types.ts +4 -4
  126. package/components/navigation/footer/AFooter.vue +279 -279
  127. package/components/navigation/footer/ui/a-footer-accordion.vue +118 -118
  128. package/components/navigation/header/AHeader.vue +217 -217
  129. package/components/navigation/header/AlmatyContacts.vue +145 -145
  130. package/components/navigation/header/AstanaContacts.vue +67 -67
  131. package/components/navigation/header/CardGallery.vue +249 -249
  132. package/components/navigation/header/ContactMenu.vue +114 -114
  133. package/components/navigation/header/HeaderLink.vue +267 -267
  134. package/components/navigation/header/ListItem.vue +31 -31
  135. package/components/navigation/header/NavCard.vue +41 -41
  136. package/components/navigation/header/NavList.vue +131 -131
  137. package/components/navigation/header/NotificationsMenu.vue +51 -51
  138. package/components/navigation/header/ProductMenu.vue +143 -143
  139. package/components/navigation/header/ProfileMenu.vue +194 -194
  140. package/components/navigation/header/TopHeader.vue +194 -194
  141. package/components/navigation/header/types.ts +28 -28
  142. package/components/navigation/line-tabs/ALineTabs.vue +111 -111
  143. package/components/navigation/line-tabs/types.ts +21 -21
  144. package/components/navigation/mobile-navigation/AMobileNavigation.vue +104 -104
  145. package/components/navigation/pill-tabs/APillTabs.vue +171 -171
  146. package/components/navigation/pill-tabs/types.ts +23 -23
  147. package/components/navigation/side-navigation/ASideNavigation.vue +406 -406
  148. package/components/overlays/README.md +1 -1
  149. package/components/overlays/modal/AModal.vue +332 -332
  150. package/components/overlays/side-panel/ASidePanel.vue +439 -439
  151. package/components/overlays/sideover/ASlideover.vue +351 -351
  152. package/components/overlays/tooltip/ATooltip.vue +237 -237
  153. package/components/transitions/ATransitionHeight.vue +67 -67
  154. package/components/utils/index.ts +19 -19
  155. package/components/utils/removeTrailingSlash.ts +7 -7
  156. package/composables/highlight.ts +18 -18
  157. package/composables/modalsState.ts +8 -8
  158. package/composables/projectState.ts +2 -2
  159. package/composables/useAdaptive.ts +46 -46
  160. package/composables/useBuyTariffs.ts +91 -91
  161. package/composables/useCarouselScroll.ts +49 -49
  162. package/composables/useHeaderNavigationLinks.ts +453 -453
  163. package/composables/useIdModals.ts +36 -36
  164. package/composables/usePayment.ts +74 -74
  165. package/composables/useUIValidation.ts +16 -16
  166. package/composables/useUrls.ts +21 -21
  167. package/eslint.config.mjs +45 -45
  168. package/i18n/i18n.config.ts +21 -21
  169. package/i18n.config.ts +21 -21
  170. package/icons/adata-logo.vue +17 -17
  171. package/icons/ai-assistant.vue +13 -13
  172. package/icons/akimat.vue +20 -20
  173. package/icons/arrow/arrow-bottom-left-on-square.vue +5 -5
  174. package/icons/arrow/arrow-circle-down.vue +16 -16
  175. package/icons/arrow/arrow-circle-reset.vue +16 -16
  176. package/icons/arrow/arrow-corner.vue +9 -9
  177. package/icons/arrow/arrow-graph-down.vue +13 -13
  178. package/icons/arrow/arrow-graph-up.vue +14 -14
  179. package/icons/arrow/arrow-square-down.vue +15 -15
  180. package/icons/arrow/arrow-top-right-on-square.vue +6 -6
  181. package/icons/arrow-currency-gray.vue +5 -5
  182. package/icons/arrow-currency-green.vue +5 -5
  183. package/icons/arrow-currency-red.vue +5 -5
  184. package/icons/arrow-side-up.vue +6 -6
  185. package/icons/avatar.vue +12 -12
  186. package/icons/bank.vue +5 -5
  187. package/icons/block.vue +16 -16
  188. package/icons/bookmark/bookmark-filled.vue +18 -18
  189. package/icons/bookmark/bookmark.vue +5 -5
  190. package/icons/browsers/browser-duck.vue +65 -65
  191. package/icons/browsers/browser-google.vue +30 -30
  192. package/icons/browsers/browser-yandex.vue +13 -13
  193. package/icons/building-vector.vue +7 -7
  194. package/icons/calculator.vue +7 -7
  195. package/icons/calendar.vue +24 -24
  196. package/icons/car.vue +7 -7
  197. package/icons/chart-bar.vue +5 -5
  198. package/icons/chart-pie.vue +16 -16
  199. package/icons/check/check-circle.vue +6 -6
  200. package/icons/check/check-shield.vue +14 -14
  201. package/icons/check/check.vue +17 -17
  202. package/icons/check/checkmark-circle.vue +6 -6
  203. package/icons/check-sb.vue +7 -7
  204. package/icons/checkbox/checkbox-active.vue +17 -17
  205. package/icons/checkbox/checkbox-empty.vue +10 -10
  206. package/icons/checkbox/checkbox-intermediate.vue +7 -7
  207. package/icons/chevron/chevron-down.vue +5 -5
  208. package/icons/chevron/chevron-left.vue +5 -5
  209. package/icons/chevron/chevron-right.vue +5 -5
  210. package/icons/chevron/chevron-up.vue +5 -5
  211. package/icons/chevron/double-chevron-right.vue +12 -12
  212. package/icons/clipboard-text.vue +7 -7
  213. package/icons/clock.vue +25 -25
  214. package/icons/close.vue +16 -16
  215. package/icons/company/company-bazis.vue +21 -21
  216. package/icons/company/company-bereke.vue +25 -25
  217. package/icons/company/company-bigroup.vue +16 -16
  218. package/icons/company/company-erg.vue +17 -17
  219. package/icons/company/company-forte.vue +21 -21
  220. package/icons/company/company-halyk.vue +15 -15
  221. package/icons/company/company-jusan.vue +31 -31
  222. package/icons/company/company-kaspi.vue +14 -14
  223. package/icons/company/company-mycar.vue +13 -13
  224. package/icons/company/company-samruk.vue +21 -21
  225. package/icons/company-egov-small.vue +15 -15
  226. package/icons/company.vue +8 -8
  227. package/icons/copy.vue +7 -7
  228. package/icons/currency/currency-dollar.vue +16 -16
  229. package/icons/currency/currency-down.vue +22 -22
  230. package/icons/currency/currency-eur.vue +57 -57
  231. package/icons/currency/currency-rub.vue +7 -7
  232. package/icons/currency/currency-tenge.vue +9 -9
  233. package/icons/currency/currency-usd.vue +221 -221
  234. package/icons/currency/currency-yuan.vue +25 -25
  235. package/icons/default-avatar.vue +20 -20
  236. package/icons/delete.vue +7 -7
  237. package/icons/document.vue +5 -5
  238. package/icons/download.vue +11 -11
  239. package/icons/edit.vue +7 -7
  240. package/icons/education.vue +16 -16
  241. package/icons/egov-small.vue +7 -7
  242. package/icons/excel-icon.vue +14 -14
  243. package/icons/expand-window.vue +7 -7
  244. package/icons/eye-closed.vue +26 -26
  245. package/icons/eye-open.vue +7 -7
  246. package/icons/eye-opened.vue +23 -23
  247. package/icons/file/file.vue +16 -16
  248. package/icons/file/files.vue +16 -16
  249. package/icons/filter.vue +5 -5
  250. package/icons/flag.vue +7 -7
  251. package/icons/gift.vue +8 -8
  252. package/icons/globe.vue +16 -16
  253. package/icons/google.vue +41 -41
  254. package/icons/graph-pie.vue +14 -14
  255. package/icons/hand/hand-thumb-up-filled.vue +5 -5
  256. package/icons/hand/hand-thumb-up.vue +5 -5
  257. package/icons/hand-with-phone/hand-with-phone-dark.vue +52 -52
  258. package/icons/hand-with-phone/hand-with-phone-light.vue +52 -52
  259. package/icons/handshake.vue +5 -5
  260. package/icons/hcheck.vue +14 -14
  261. package/icons/hdocument.vue +7 -7
  262. package/icons/history.vue +5 -5
  263. package/icons/horizontal-more.vue +13 -13
  264. package/icons/hot-line.vue +6 -6
  265. package/icons/hummer.vue +16 -16
  266. package/icons/id.vue +7 -7
  267. package/icons/info/info-circle.vue +29 -29
  268. package/icons/invoice.vue +7 -7
  269. package/icons/judge.vue +14 -14
  270. package/icons/kaspi-qr.vue +13 -13
  271. package/icons/link-chain.vue +28 -28
  272. package/icons/link.vue +7 -7
  273. package/icons/linkedin.vue +24 -24
  274. package/icons/loader-circle.vue +27 -27
  275. package/icons/location.vue +8 -8
  276. package/icons/lock.vue +5 -5
  277. package/icons/logo.vue +15 -15
  278. package/icons/logout.vue +16 -16
  279. package/icons/magnify/magnifying-glass-minus.vue +8 -8
  280. package/icons/magnify/magnifying-glass-plus.vue +9 -9
  281. package/icons/magnify/magnifying-glass.vue +9 -9
  282. package/icons/mail.vue +7 -7
  283. package/icons/mailru.vue +34 -34
  284. package/icons/main-filter.vue +5 -5
  285. package/icons/map/map-pin-filled.vue +7 -7
  286. package/icons/map/map-pin-rect.vue +15 -15
  287. package/icons/map/map-pin.vue +7 -7
  288. package/icons/map-marker-start.vue +7 -7
  289. package/icons/map-paper.vue +5 -5
  290. package/icons/medal.vue +7 -7
  291. package/icons/menu-filled.vue +20 -20
  292. package/icons/menu.vue +8 -8
  293. package/icons/message/message.vue +12 -12
  294. package/icons/minus/minus-circle.vue +10 -10
  295. package/icons/money.vue +5 -5
  296. package/icons/monitoring.vue +10 -10
  297. package/icons/moon.vue +8 -8
  298. package/icons/more.vue +29 -29
  299. package/icons/note-pencil.vue +14 -14
  300. package/icons/note.vue +14 -14
  301. package/icons/notification.vue +16 -16
  302. package/icons/paperclip.vue +7 -7
  303. package/icons/payment/payment-card.vue +6 -6
  304. package/icons/payment/payment-kaspi.vue +11 -11
  305. package/icons/person-vector.vue +7 -7
  306. package/icons/person-with-briefcase.vue +10 -10
  307. package/icons/phone-filled.vue +5 -5
  308. package/icons/phone.vue +7 -7
  309. package/icons/plus/plus-circle.vue +8 -8
  310. package/icons/plus/plus.vue +13 -13
  311. package/icons/profile.vue +5 -5
  312. package/icons/radio/radio-check.vue +8 -8
  313. package/icons/radio/radio-empty.vue +10 -10
  314. package/icons/receipt.vue +8 -8
  315. package/icons/robot.vue +14 -14
  316. package/icons/sanctions.vue +8 -8
  317. package/icons/scales/scale.vue +16 -16
  318. package/icons/scales/scales.vue +5 -5
  319. package/icons/scales/standing-scales.vue +15 -15
  320. package/icons/search.vue +27 -27
  321. package/icons/share/share-alt.vue +5 -5
  322. package/icons/share/share.vue +14 -14
  323. package/icons/ship.vue +8 -8
  324. package/icons/socials/face-book.vue +15 -15
  325. package/icons/socials/instagram.vue +19 -19
  326. package/icons/socials/telegram.vue +15 -15
  327. package/icons/socials/tik-tok.vue +15 -15
  328. package/icons/socials/youtube.vue +16 -16
  329. package/icons/sort/sort-asc.vue +15 -15
  330. package/icons/sort/sort-desc.vue +15 -15
  331. package/icons/splitting-arrows.vue +8 -8
  332. package/icons/star/star-filled.vue +40 -40
  333. package/icons/star/star-half-filled.vue +20 -20
  334. package/icons/star/star.vue +25 -25
  335. package/icons/sun.vue +14 -14
  336. package/icons/sviazi.vue +5 -5
  337. package/icons/tag.vue +30 -30
  338. package/icons/tasks.vue +10 -10
  339. package/icons/tender-search.vue +11 -11
  340. package/icons/toasts/check-circle-toast.vue +6 -6
  341. package/icons/toasts/warning-triangle-toast.vue +7 -7
  342. package/icons/trash.vue +13 -13
  343. package/icons/triangle.vue +10 -10
  344. package/icons/truck.vue +7 -7
  345. package/icons/user-square.vue +14 -14
  346. package/icons/user.vue +22 -22
  347. package/icons/users-focus.vue +8 -8
  348. package/icons/users-three.vue +7 -7
  349. package/icons/users.vue +8 -8
  350. package/icons/warning/warning-circle.vue +29 -29
  351. package/icons/warning/warning-triangle-filled.vue +12 -12
  352. package/icons/warning/warning-triangle.vue +28 -28
  353. package/icons/whatsapp.vue +8 -8
  354. package/icons/work-bag.vue +11 -11
  355. package/icons/work-case.vue +9 -9
  356. package/icons/work-search.vue +10 -10
  357. package/icons/work.vue +5 -5
  358. package/icons/x-mark.vue +15 -15
  359. package/icons/yandex.vue +28 -28
  360. package/illustrations/address-location.vue +38 -38
  361. package/illustrations/ball-with-chain.vue +120 -120
  362. package/illustrations/bill.vue +133 -133
  363. package/illustrations/buildings.vue +82 -82
  364. package/illustrations/calendar.vue +156 -156
  365. package/illustrations/chains.vue +152 -152
  366. package/illustrations/coin-percent.vue +126 -126
  367. package/illustrations/coins-stack.vue +202 -202
  368. package/illustrations/delete-dark.vue +31 -31
  369. package/illustrations/delete.vue +32 -32
  370. package/illustrations/doc-with-stamp.vue +126 -126
  371. package/illustrations/document.vue +64 -64
  372. package/illustrations/door.vue +74 -74
  373. package/illustrations/empty-box.vue +77 -77
  374. package/illustrations/empty-wallet.vue +161 -161
  375. package/illustrations/graph-in-coin.vue +119 -119
  376. package/illustrations/hammer.vue +156 -156
  377. package/illustrations/hand-cash.vue +108 -108
  378. package/illustrations/info.vue +39 -39
  379. package/illustrations/mail.vue +68 -68
  380. package/illustrations/ok.vue +62 -62
  381. package/illustrations/people-group.vue +237 -237
  382. package/illustrations/person-with-phone.vue +187 -187
  383. package/illustrations/person.vue +159 -159
  384. package/illustrations/phone-check.vue +90 -90
  385. package/illustrations/phone-payment-method.vue +223 -223
  386. package/illustrations/stop-hand.vue +77 -77
  387. package/illustrations/stop-sign.vue +34 -34
  388. package/illustrations/suit.vue +111 -111
  389. package/illustrations/suitcase.vue +105 -105
  390. package/illustrations/terminal-dark.vue +48 -48
  391. package/illustrations/terminal.vue +234 -234
  392. package/illustrations/trash-can.vue +108 -108
  393. package/illustrations/turn-on-tariff.vue +38 -38
  394. package/illustrations/two-persons.vue +169 -169
  395. package/lang/en.ts +834 -834
  396. package/lang/kk.ts +836 -836
  397. package/lang/ru.ts +837 -837
  398. package/layouts/default.vue +13 -13
  399. package/nuxt.config.ts +88 -88
  400. package/package.json +69 -69
  401. package/plugins/maska.ts +4 -4
  402. package/plugins/toast.client.ts +58 -58
  403. package/public/kaspi/logo.svg +4 -4
  404. package/shared/constans/pages.ts +89 -89
  405. package/tailwind.config.ts +163 -163
  406. package/tests/AButton.test.ts +81 -81
  407. package/tsconfig.json +6 -6
  408. package/utils/getMaxZindex.ts +25 -25
  409. package/utils/localizedNavigation.ts +36 -36
  410. package/vitest.config.ts +14 -14
@@ -1,267 +1,267 @@
1
- <script setup lang="ts">
2
- import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'
3
-
4
- import { PAGES } from '#adata-ui/shared/constans/pages'
5
- import ProductMenu from '#adata-ui/components/navigation/header/ProductMenu.vue'
6
-
7
- import ContactMenu from '#adata-ui/components/navigation/header/ContactMenu.vue'
8
- import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
9
- import { useUrls } from '#adata-ui/composables/useUrls'
10
-
11
- const { landing } = useUrls()
12
- const { t, locale } = useI18n()
13
-
14
- const navs: any = [
15
- {
16
- label: 'header.navs.products',
17
- to: landing + PAGES.totalServices
18
- },
19
- {
20
- label: 'header.navs.contacts',
21
- to: landing + PAGES.contacts
22
- },
23
- {
24
- label: 'header.navs.tariffs',
25
- to: landing + PAGES.tariffs
26
- },
27
- {
28
- label: 'header.navs.api',
29
- to: landing + PAGES.api
30
- }
31
- ]
32
-
33
- const menu = ref<HTMLElement | null>(null)
34
- const isBodyAlreadyLocked = ref<boolean>(false)
35
- const currentIndex = ref(0)
36
- const forward = ref(true)
37
- const show = ref(false)
38
- const isMenuLocked = ref(false)
39
- const animation = ref('slide-fade')
40
- const currentMenu = shallowRef(null)
41
- const delayTimer = ref<ReturnType<typeof setTimeout> | null>(null)
42
-
43
- const currentMenuToShow = (index) => {
44
- switch (index) {
45
- case 0:
46
- return ProductMenu
47
- case 1:
48
- return ContactMenu
49
- case 2:
50
- return null
51
- }
52
- }
53
- const toggleMenu = (index: number) => {
54
- if (index === 2) {
55
- const pageUrl = useRequestURL()
56
-
57
- let code = ''
58
-
59
- if (pageUrl.hostname.includes('pk')) code = '?code=pk'
60
- if (pageUrl.hostname.includes('avto')) code = '?code=auto'
61
- if (pageUrl.hostname.includes('tnved')) code = '?code=ved'
62
- if (pageUrl.hostname.includes('analytics-new')) code = '?code=analytics'
63
- if (pageUrl.hostname.includes('ac')) code = '?code=compliance'
64
- if (pageUrl.hostname.includes('zakupki')) code = '?code=procurement'
65
- if (pageUrl.hostname.includes('edo')) code = '?code=edo'
66
-
67
- navigateToLocalizedPage({ locale, projectUrl: landing, path: PAGES.tariffs + code, target: '_blank' })
68
- } else if (index === 3) {
69
- navigateToLocalizedPage({ locale, projectUrl: landing, path: PAGES.api, target: '_blank' })
70
- } else {
71
- currentMenu.value = currentMenuToShow(index)
72
- const prev = currentIndex.value
73
- if (prev < index) {
74
- forward.value = false
75
- } else if (prev > index) {
76
- forward.value = true
77
- }
78
- animation.value = forward.value ? ' prev' : 'next'
79
- if (!show.value) animation.value = 'slide-fade'
80
- currentIndex.value = index
81
- show.value = true
82
- }
83
- }
84
- const closeMenu = (forceClose = false) => {
85
- if (isMenuLocked.value && !forceClose) {
86
- return
87
- } else {
88
- animation.value = 'slide-fade'
89
- show.value = false
90
-
91
- setTimeout(() => {
92
- isMenuLocked.value = false
93
- currentMenu.value = null
94
- }, 200)
95
- }
96
- }
97
- const onMenuMouseEnter = (index: number) => {
98
- if (![2, 3].includes(index)) {
99
- if (show.value === false) {
100
- delayTimer.value = setTimeout(() => {
101
- toggleMenu(index)
102
- }, 600)
103
- } else {
104
- delayTimer.value = setTimeout(() => {
105
- toggleMenu(index)
106
- }, 100)
107
- }
108
- } else show.value = false
109
- }
110
- const onMenuMouseLeave = () => {
111
- if (delayTimer.value) {
112
- clearTimeout(delayTimer.value)
113
- delayTimer.value = null
114
- }
115
- }
116
- const lockMenu = () => {
117
- isMenuLocked.value = true
118
- }
119
- const toggleBodyScroll = (el: HTMLBodyElement | HTMLDivElement, lock: boolean) => {
120
- if (lock) {
121
- setTimeout(() => {
122
- disableBodyScroll(el, { reserveScrollBarGap: true })
123
- }, 0)
124
- return
125
- }
126
- enableBodyScroll(el)
127
- }
128
-
129
- onBeforeUnmount(() => {
130
- if (show.value) toggleBodyScroll(menu.value, false)
131
- })
132
-
133
- watch(
134
- () => [show.value, menu.value],
135
- (newVal, oldVal) => {
136
- const wasShown = oldVal ? oldVal[0] : false
137
- const [isShown, menuEl] = newVal
138
- const isOpening = isShown
139
- const isClosing = wasShown && !isShown
140
-
141
- if (!menuEl) return
142
- if (isOpening) isBodyAlreadyLocked.value = !!document.body.style.overflow
143
-
144
- if (isShown) {
145
- toggleBodyScroll(menuEl, true)
146
- return
147
- }
148
-
149
- if (!isClosing || isBodyAlreadyLocked.value) return
150
-
151
- setTimeout(() => {
152
- if (menuEl) toggleBodyScroll(menuEl, false)
153
- }, 100)
154
- }
155
- )
156
- </script>
157
-
158
- <template>
159
- <div class="relative">
160
- <ul>
161
- <li
162
- v-for="(nav, index) in navs"
163
- :key="nav.label"
164
- class="group inline-block border-r border-[#2C3E501A] px-2 last-of-type:border-none dark:border-[#E3E5E81A]"
165
- @click="lockMenu"
166
- role="listitem"
167
- >
168
- <div
169
- class="relative cursor-pointer font-bold uppercase text-gray-800 hover:text-gray-600 dark:text-gray-200 hover:dark:text-gray-600"
170
- @mouseenter="onMenuMouseEnter(index)"
171
- @click="toggleMenu(index)"
172
- @mouseleave="onMenuMouseLeave"
173
- >
174
- {{ t(nav.label) }}
175
- </div>
176
- </li>
177
- </ul>
178
- <div
179
- v-show="show"
180
- ref="menu"
181
- class="top-[104px] fixed left-0 z-20 h-full w-full"
182
- >
183
- <div class="h-full w-full">
184
- <transition :name="animation">
185
- <keep-alive>
186
- <component
187
- :is="currentMenu"
188
- v-show="show"
189
- :animation="forward ? 'next' : 'prev'"
190
- :index="currentIndex"
191
- :url="buildLocalizedUrl(locale, landing, PAGES.contacts)"
192
- @outer-click="closeMenu(true)"
193
- @mouse-over="closeMenu"
194
- />
195
- </keep-alive>
196
- </transition>
197
- <div
198
- v-show="show"
199
- class="absolute left-[-25%] h-full w-[150%] bg-[#E3E5E833] backdrop-blur transition"
200
- @click="closeMenu(true)"
201
- @mouseover="closeMenu(false)"
202
- />
203
- </div>
204
- </div>
205
- </div>
206
- </template>
207
-
208
- <style scoped lang="scss">
209
- $percent: 30%;
210
- .next-enter-from,
211
- .next-leave-to {
212
- opacity: 0;
213
- transform: translateX($percent);
214
- position: absolute;
215
- }
216
-
217
- .next-enter-active {
218
- transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
219
- }
220
-
221
- .next-leave-active {
222
- transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
223
- opacity: 0;
224
- transform: translateX(-$percent);
225
- }
226
-
227
- // Backwards transition
228
-
229
- .prev-enter-from,
230
- .prev-leave-to {
231
- position: absolute;
232
-
233
- opacity: 0;
234
- transform: translateX(-$percent);
235
- }
236
-
237
- .prev-enter-active {
238
- transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
239
- }
240
-
241
- .prev-leave-active {
242
- transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
243
- opacity: 0;
244
- transform: translateX($percent);
245
- }
246
-
247
- .slide-fade-enter-active,
248
- .slide-fade-leave-active {
249
- transition: all 0.2s ease-in-out;
250
- }
251
-
252
- .slide-fade-enter-from,
253
- .slide-fade-leave-to {
254
- transform: translateY(-12px);
255
- opacity: 0;
256
- }
257
-
258
- .slide-change-enter-active,
259
- .slide-change-leave-active {
260
- transition: all 0.2s ease-in-out;
261
- }
262
-
263
- .slide-change-enter-from,
264
- .slide-change-leave-to {
265
- opacity: 0;
266
- }
267
- </style>
1
+ <script setup lang="ts">
2
+ import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'
3
+
4
+ import { PAGES } from '#adata-ui/shared/constans/pages'
5
+ import ProductMenu from '#adata-ui/components/navigation/header/ProductMenu.vue'
6
+
7
+ import ContactMenu from '#adata-ui/components/navigation/header/ContactMenu.vue'
8
+ import { buildLocalizedUrl } from '#adata-ui/utils/localizedNavigation'
9
+ import { useUrls } from '#adata-ui/composables/useUrls'
10
+
11
+ const { landing } = useUrls()
12
+ const { t, locale } = useI18n()
13
+
14
+ const navs: any = [
15
+ {
16
+ label: 'header.navs.products',
17
+ to: landing + PAGES.totalServices
18
+ },
19
+ {
20
+ label: 'header.navs.contacts',
21
+ to: landing + PAGES.contacts
22
+ },
23
+ {
24
+ label: 'header.navs.tariffs',
25
+ to: landing + PAGES.tariffs
26
+ },
27
+ {
28
+ label: 'header.navs.api',
29
+ to: landing + PAGES.api
30
+ }
31
+ ]
32
+
33
+ const menu = ref<HTMLElement | null>(null)
34
+ const isBodyAlreadyLocked = ref<boolean>(false)
35
+ const currentIndex = ref(0)
36
+ const forward = ref(true)
37
+ const show = ref(false)
38
+ const isMenuLocked = ref(false)
39
+ const animation = ref('slide-fade')
40
+ const currentMenu = shallowRef(null)
41
+ const delayTimer = ref<ReturnType<typeof setTimeout> | null>(null)
42
+
43
+ const currentMenuToShow = (index) => {
44
+ switch (index) {
45
+ case 0:
46
+ return ProductMenu
47
+ case 1:
48
+ return ContactMenu
49
+ case 2:
50
+ return null
51
+ }
52
+ }
53
+ const toggleMenu = (index: number) => {
54
+ if (index === 2) {
55
+ const pageUrl = useRequestURL()
56
+
57
+ let code = ''
58
+
59
+ if (pageUrl.hostname.includes('pk')) code = '?code=pk'
60
+ if (pageUrl.hostname.includes('avto')) code = '?code=auto'
61
+ if (pageUrl.hostname.includes('tnved')) code = '?code=ved'
62
+ if (pageUrl.hostname.includes('analytics-new')) code = '?code=analytics'
63
+ if (pageUrl.hostname.includes('ac')) code = '?code=compliance'
64
+ if (pageUrl.hostname.includes('zakupki')) code = '?code=procurement'
65
+ if (pageUrl.hostname.includes('edo')) code = '?code=edo'
66
+
67
+ navigateToLocalizedPage({ locale, projectUrl: landing, path: PAGES.tariffs + code, target: '_blank' })
68
+ } else if (index === 3) {
69
+ navigateToLocalizedPage({ locale, projectUrl: landing, path: PAGES.api, target: '_blank' })
70
+ } else {
71
+ currentMenu.value = currentMenuToShow(index)
72
+ const prev = currentIndex.value
73
+ if (prev < index) {
74
+ forward.value = false
75
+ } else if (prev > index) {
76
+ forward.value = true
77
+ }
78
+ animation.value = forward.value ? ' prev' : 'next'
79
+ if (!show.value) animation.value = 'slide-fade'
80
+ currentIndex.value = index
81
+ show.value = true
82
+ }
83
+ }
84
+ const closeMenu = (forceClose = false) => {
85
+ if (isMenuLocked.value && !forceClose) {
86
+ return
87
+ } else {
88
+ animation.value = 'slide-fade'
89
+ show.value = false
90
+
91
+ setTimeout(() => {
92
+ isMenuLocked.value = false
93
+ currentMenu.value = null
94
+ }, 200)
95
+ }
96
+ }
97
+ const onMenuMouseEnter = (index: number) => {
98
+ if (![2, 3].includes(index)) {
99
+ if (show.value === false) {
100
+ delayTimer.value = setTimeout(() => {
101
+ toggleMenu(index)
102
+ }, 600)
103
+ } else {
104
+ delayTimer.value = setTimeout(() => {
105
+ toggleMenu(index)
106
+ }, 100)
107
+ }
108
+ } else show.value = false
109
+ }
110
+ const onMenuMouseLeave = () => {
111
+ if (delayTimer.value) {
112
+ clearTimeout(delayTimer.value)
113
+ delayTimer.value = null
114
+ }
115
+ }
116
+ const lockMenu = () => {
117
+ isMenuLocked.value = true
118
+ }
119
+ const toggleBodyScroll = (el: HTMLBodyElement | HTMLDivElement, lock: boolean) => {
120
+ if (lock) {
121
+ setTimeout(() => {
122
+ disableBodyScroll(el, { reserveScrollBarGap: true })
123
+ }, 0)
124
+ return
125
+ }
126
+ enableBodyScroll(el)
127
+ }
128
+
129
+ onBeforeUnmount(() => {
130
+ if (show.value) toggleBodyScroll(menu.value, false)
131
+ })
132
+
133
+ watch(
134
+ () => [show.value, menu.value],
135
+ (newVal, oldVal) => {
136
+ const wasShown = oldVal ? oldVal[0] : false
137
+ const [isShown, menuEl] = newVal
138
+ const isOpening = isShown
139
+ const isClosing = wasShown && !isShown
140
+
141
+ if (!menuEl) return
142
+ if (isOpening) isBodyAlreadyLocked.value = !!document.body.style.overflow
143
+
144
+ if (isShown) {
145
+ toggleBodyScroll(menuEl, true)
146
+ return
147
+ }
148
+
149
+ if (!isClosing || isBodyAlreadyLocked.value) return
150
+
151
+ setTimeout(() => {
152
+ if (menuEl) toggleBodyScroll(menuEl, false)
153
+ }, 100)
154
+ }
155
+ )
156
+ </script>
157
+
158
+ <template>
159
+ <div class="relative">
160
+ <ul>
161
+ <li
162
+ v-for="(nav, index) in navs"
163
+ :key="nav.label"
164
+ class="group inline-block border-r border-[#2C3E501A] px-2 last-of-type:border-none dark:border-[#E3E5E81A]"
165
+ @click="lockMenu"
166
+ role="listitem"
167
+ >
168
+ <div
169
+ class="relative cursor-pointer font-bold uppercase text-gray-800 hover:text-gray-600 dark:text-gray-200 hover:dark:text-gray-600"
170
+ @mouseenter="onMenuMouseEnter(index)"
171
+ @click="toggleMenu(index)"
172
+ @mouseleave="onMenuMouseLeave"
173
+ >
174
+ {{ t(nav.label) }}
175
+ </div>
176
+ </li>
177
+ </ul>
178
+ <div
179
+ v-show="show"
180
+ ref="menu"
181
+ class="top-[104px] fixed left-0 z-20 h-full w-full"
182
+ >
183
+ <div class="h-full w-full">
184
+ <transition :name="animation">
185
+ <keep-alive>
186
+ <component
187
+ :is="currentMenu"
188
+ v-show="show"
189
+ :animation="forward ? 'next' : 'prev'"
190
+ :index="currentIndex"
191
+ :url="buildLocalizedUrl(locale, landing, PAGES.contacts)"
192
+ @outer-click="closeMenu(true)"
193
+ @mouse-over="closeMenu"
194
+ />
195
+ </keep-alive>
196
+ </transition>
197
+ <div
198
+ v-show="show"
199
+ class="absolute left-[-25%] h-full w-[150%] bg-[#E3E5E833] backdrop-blur transition"
200
+ @click="closeMenu(true)"
201
+ @mouseover="closeMenu(false)"
202
+ />
203
+ </div>
204
+ </div>
205
+ </div>
206
+ </template>
207
+
208
+ <style scoped lang="scss">
209
+ $percent: 30%;
210
+ .next-enter-from,
211
+ .next-leave-to {
212
+ opacity: 0;
213
+ transform: translateX($percent);
214
+ position: absolute;
215
+ }
216
+
217
+ .next-enter-active {
218
+ transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
219
+ }
220
+
221
+ .next-leave-active {
222
+ transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
223
+ opacity: 0;
224
+ transform: translateX(-$percent);
225
+ }
226
+
227
+ // Backwards transition
228
+
229
+ .prev-enter-from,
230
+ .prev-leave-to {
231
+ position: absolute;
232
+
233
+ opacity: 0;
234
+ transform: translateX(-$percent);
235
+ }
236
+
237
+ .prev-enter-active {
238
+ transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
239
+ }
240
+
241
+ .prev-leave-active {
242
+ transition: all 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275);
243
+ opacity: 0;
244
+ transform: translateX($percent);
245
+ }
246
+
247
+ .slide-fade-enter-active,
248
+ .slide-fade-leave-active {
249
+ transition: all 0.2s ease-in-out;
250
+ }
251
+
252
+ .slide-fade-enter-from,
253
+ .slide-fade-leave-to {
254
+ transform: translateY(-12px);
255
+ opacity: 0;
256
+ }
257
+
258
+ .slide-change-enter-active,
259
+ .slide-change-leave-active {
260
+ transition: all 0.2s ease-in-out;
261
+ }
262
+
263
+ .slide-change-enter-from,
264
+ .slide-change-leave-to {
265
+ opacity: 0;
266
+ }
267
+ </style>
@@ -1,31 +1,31 @@
1
- <template>
2
- <nuxt-link-locale
3
- :to="item.to"
4
- @mouseenter="hover = true"
5
- @mouseleave="hover = false"
6
- :class="{'opacity-30' : !hover && someHovered}"
7
- class="flex items-center gap-4 px-2.5 py-2 hover:bg-gray-50 rounded-lg dark:hover:bg-gray-800 normal-case transition-all "
8
- >
9
- <div class="min-w-8 h-8 rounded-lg flex items-center justify-center dark:text-gray-900 text-white bg-gradient-blue">
10
- <component
11
- :is="item.icon"
12
- class="h-5 w-5"
13
- />
14
- </div>
15
- <span class="text-sm text-deepblue-900 dark:text-[#E3E5E8]">{{ item.title }}</span>
16
- </nuxt-link-locale>
17
- </template>
18
-
19
- <script setup lang="ts">
20
- import type {NavChildItem} from "#adata-ui/components/navigation/header/types";
21
-
22
- defineProps<{
23
- item: NavChildItem
24
- someHovered: boolean
25
- }>()
26
- const hover = ref(false)
27
- </script>
28
-
29
- <style scoped>
30
-
31
- </style>
1
+ <template>
2
+ <nuxt-link-locale
3
+ :to="item.to"
4
+ @mouseenter="hover = true"
5
+ @mouseleave="hover = false"
6
+ :class="{'opacity-30' : !hover && someHovered}"
7
+ class="flex items-center gap-4 px-2.5 py-2 hover:bg-gray-50 rounded-lg dark:hover:bg-gray-800 normal-case transition-all "
8
+ >
9
+ <div class="min-w-8 h-8 rounded-lg flex items-center justify-center dark:text-gray-900 text-white bg-gradient-blue">
10
+ <component
11
+ :is="item.icon"
12
+ class="h-5 w-5"
13
+ />
14
+ </div>
15
+ <span class="text-sm text-deepblue-900 dark:text-[#E3E5E8]">{{ item.title }}</span>
16
+ </nuxt-link-locale>
17
+ </template>
18
+
19
+ <script setup lang="ts">
20
+ import type {NavChildItem} from "#adata-ui/components/navigation/header/types";
21
+
22
+ defineProps<{
23
+ item: NavChildItem
24
+ someHovered: boolean
25
+ }>()
26
+ const hover = ref(false)
27
+ </script>
28
+
29
+ <style scoped>
30
+
31
+ </style>
@@ -1,41 +1,41 @@
1
- <script setup lang="ts">
2
- import type {NavChild, NavChildItem} from '#adata-ui/components/navigation/header/types'
3
-
4
- defineProps<{
5
- item: NavChildItem
6
- size: 'lg' | 'sm',
7
- someHovered: boolean
8
- }>()
9
- const hover = ref(false)
10
- </script>
11
-
12
- <template>
13
- <nuxt-link-locale
14
- :to="item.to"
15
- class="flex h-full justify-between xl:gap-4 rounded-[0.5rem] bg-gray-50 p-4 dark:bg-gray-800 transition-all dark:hover:bg-gray-800"
16
- :class="{'opacity-30': !hover && someHovered}"
17
- @mouseenter="hover = true"
18
- @mouseleave="hover = false"
19
- >
20
- <div class="normal-case">
21
- <h4
22
- class="mb-2 font-semibold text-deepblue-900 dark:text-[#E3E5E8]"
23
- :class="{'heading-04' : size==='lg', 'heading-05' : size === 'sm'}"
24
- >
25
- {{ item.title }}
26
- </h4>
27
- <p class="text-gray-600 dark:text-gray-300 body-400">
28
- {{ item.subtitle ? item.subtitle : '' }}
29
- </p>
30
- </div>
31
- <div
32
- class="flex items-center justify-center self-end rounded-lg bg-gradient-blue dark:text-gray-900 text-white"
33
- :class="{'h-8 min-w-8' : size==='sm', 'h-16 min-w-16' : size==='lg'}"
34
- >
35
- <component
36
- :is="item.icon"
37
- :class="{'h-5 w-5' : size==='sm', 'h-11 w-11' : size==='lg'}"
38
- />
39
- </div>
40
- </nuxt-link-locale>
41
- </template>
1
+ <script setup lang="ts">
2
+ import type {NavChild, NavChildItem} from '#adata-ui/components/navigation/header/types'
3
+
4
+ defineProps<{
5
+ item: NavChildItem
6
+ size: 'lg' | 'sm',
7
+ someHovered: boolean
8
+ }>()
9
+ const hover = ref(false)
10
+ </script>
11
+
12
+ <template>
13
+ <nuxt-link-locale
14
+ :to="item.to"
15
+ class="flex h-full justify-between xl:gap-4 rounded-[0.5rem] bg-gray-50 p-4 dark:bg-gray-800 transition-all dark:hover:bg-gray-800"
16
+ :class="{'opacity-30': !hover && someHovered}"
17
+ @mouseenter="hover = true"
18
+ @mouseleave="hover = false"
19
+ >
20
+ <div class="normal-case">
21
+ <h4
22
+ class="mb-2 font-semibold text-deepblue-900 dark:text-[#E3E5E8]"
23
+ :class="{'heading-04' : size==='lg', 'heading-05' : size === 'sm'}"
24
+ >
25
+ {{ item.title }}
26
+ </h4>
27
+ <p class="text-gray-600 dark:text-gray-300 body-400">
28
+ {{ item.subtitle ? item.subtitle : '' }}
29
+ </p>
30
+ </div>
31
+ <div
32
+ class="flex items-center justify-center self-end rounded-lg bg-gradient-blue dark:text-gray-900 text-white"
33
+ :class="{'h-8 min-w-8' : size==='sm', 'h-16 min-w-16' : size==='lg'}"
34
+ >
35
+ <component
36
+ :is="item.icon"
37
+ :class="{'h-5 w-5' : size==='sm', 'h-11 w-11' : size==='lg'}"
38
+ />
39
+ </div>
40
+ </nuxt-link-locale>
41
+ </template>