adata-ui 2.1.41-beta.0 → 2.1.41-beta.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 (569) hide show
  1. package/-error.vue +170 -170
  2. package/.claude/settings.local.json +19 -0
  3. package/.editorconfig +12 -12
  4. package/.gitlab-ci.yml +16 -16
  5. package/.nuxtrc +1 -1
  6. package/.nvmrc +1 -1
  7. package/.playground/app.config.ts +5 -5
  8. package/.playground/app.vue +102 -102
  9. package/.playground/nuxt.config.ts +4 -4
  10. package/CLAUDE.md +63 -62
  11. package/README.md +75 -75
  12. package/app.config.ts +28 -28
  13. package/app.vue +8 -8
  14. package/assets/styles/main.css +12 -11
  15. package/assets/styles/theme.css +583 -576
  16. package/assets/styles/ui.css +247 -170
  17. package/components/elements/README.md +1 -1
  18. package/components/elements/a-select-row/ASelectRowV2.vue +210 -210
  19. package/components/elements/a-select-row/index.vue +139 -139
  20. package/components/elements/accordion/AAccordion.vue +199 -199
  21. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +145 -145
  22. package/components/elements/accordion/AAccordionGroup/types.ts +20 -20
  23. package/components/elements/accordion/AAccordionGroup/ui.config.ts +22 -22
  24. package/components/elements/accordion/types.ts +14 -14
  25. package/components/elements/accordion/ui.config.ts +22 -22
  26. package/components/elements/alert/AAlert.vue +52 -52
  27. package/components/elements/banner/ABanner.vue +49 -49
  28. package/components/elements/bg-block/ABgBlock.vue +11 -11
  29. package/components/elements/button/AButton.vue +191 -191
  30. package/components/elements/button/AButtonV2.vue +179 -134
  31. package/components/elements/button/types.ts +24 -24
  32. package/components/elements/button-login/index.vue +19 -19
  33. package/components/elements/calendar/ACalendar.vue +83 -83
  34. package/components/elements/carousel/ACarousel.vue +159 -159
  35. package/components/elements/carousel/config.ui.ts +15 -15
  36. package/components/elements/carousel/types.ts +18 -18
  37. package/components/elements/chip-wrapper/AChipWrapper.vue +81 -81
  38. package/components/elements/chip-wrapper/types.ts +12 -12
  39. package/components/elements/chips/AChips.vue +33 -33
  40. package/components/elements/companies/AOurClients.vue +47 -47
  41. package/components/elements/count-up/ACountUp.vue +54 -0
  42. package/components/elements/curve-block/ACurveBlock.vue +259 -259
  43. package/components/elements/curve-block-v2/ACurveBlockV2.vue +122 -84
  44. package/components/elements/digit-badge/ADigitBadge.vue +86 -86
  45. package/components/elements/empty-box/empty-box-V2.vue +92 -92
  46. package/components/elements/error-template/index.vue +116 -116
  47. package/components/elements/feature-description/AFeatureDescription.vue +112 -112
  48. package/components/elements/illustrations/noAccess.vue +71 -71
  49. package/components/elements/infinite-carousel/AInfiniteCarousel.vue +85 -47
  50. package/components/elements/infinite-scroll/AInfiniteScroll.vue +33 -33
  51. package/components/elements/leave-note/ALeaveNote.vue +102 -102
  52. package/components/elements/pagination/APagination.vue +110 -110
  53. package/components/elements/photos-animation/APhotosAnimation.vue +85 -85
  54. package/components/elements/section-heading/ASectionHeading.vue +35 -0
  55. package/components/elements/segmented/ASegmentedV2.vue +154 -154
  56. package/components/elements/select/ASelect.vue +448 -448
  57. package/components/elements/select/ASelectMobile.vue +186 -186
  58. package/components/elements/select/ASelectV2.vue +580 -580
  59. package/components/elements/select/ui/select-button.vue +112 -112
  60. package/components/elements/select/ui/select-list.vue +99 -99
  61. package/components/elements/show-more/AShowMore.vue +35 -35
  62. package/components/elements/show-more/AShowMoreV2.vue +26 -26
  63. package/components/elements/skeleton/ASkeleton.vue +44 -44
  64. package/components/elements/slider/ASlider.vue +175 -175
  65. package/components/elements/slider/ASliderItem.vue +31 -31
  66. package/components/elements/slider/ASliderV2.vue +182 -182
  67. package/components/elements/slider/types.ts +21 -21
  68. package/components/elements/star-rating/AStarRating.vue +189 -189
  69. package/components/elements/star-rating/types.ts +7 -7
  70. package/components/elements/star-rating/ui/Star.vue +74 -74
  71. package/components/elements/status-badge/AStatusBadge.vue +125 -125
  72. package/components/elements/step-slider/AStepSliderColCard.vue +270 -233
  73. package/components/elements/step-slider/AStepSliderColNumber.vue +199 -178
  74. package/components/elements/table/ATable.vue +93 -93
  75. package/components/elements/table/table.config.ts +32 -32
  76. package/components/elements/tree-select/ATreeSelect.vue +157 -157
  77. package/components/elements/tree-select/TreeService.ts +184 -184
  78. package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -104
  79. package/components/elements/tree-select/types.ts +63 -63
  80. package/components/elements/tree-select/utils.ts +30 -30
  81. package/components/elements/tree-select-mobile/ATreeSelectMobile.vue +79 -79
  82. package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +175 -175
  83. package/components/elements/tree-select-modal/ATreeSelectModal.vue +217 -217
  84. package/components/features/color-mode/AColorMode.client.vue +74 -96
  85. package/components/features/dropdown/ADropdown.vue +127 -127
  86. package/components/features/dropdown/ADropdownV2.vue +140 -140
  87. package/components/features/go-top/GoTop.vue +63 -63
  88. package/components/features/lang-switcher/lang-switcher.vue +158 -158
  89. package/components/features/payment/banner/BasicPlusLimitBanner.vue +84 -84
  90. package/components/features/payment/banner/PaymentBanner.vue +88 -88
  91. package/components/features/payment/banner/UpSellBanner.vue +105 -105
  92. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +180 -180
  93. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +123 -123
  94. package/components/features/payment/process/PaymentMethodSidePanel.vue +138 -138
  95. package/components/features/payment/process/PaymentProcess.vue +158 -158
  96. package/components/features/payment/process/PaymentTopUpSidePanel.vue +119 -119
  97. package/components/features/pk-mobile-services/APkMobileServices.vue +107 -107
  98. package/components/features//321/201hange-version/AChangeVersion.vue +20 -20
  99. package/components/forms/README.md +1 -1
  100. package/components/forms/checkbox/ACheckbox.vue +149 -149
  101. package/components/forms/checkbox/ACheckboxV2.vue +229 -229
  102. package/components/forms/feedback-form/FeedbackForm.vue +177 -177
  103. package/components/forms/feedback-form/FeedbackFormV2.vue +186 -183
  104. package/components/forms/input/AInputV2.vue +560 -538
  105. package/components/forms/input/button/AInputButton.vue +53 -53
  106. package/components/forms/input/date/AInputDate.vue +217 -217
  107. package/components/forms/input/password/AInputPassword.vue +59 -59
  108. package/components/forms/input/standard/AInputStandard.vue +424 -424
  109. package/components/forms/input/textarea/ATextarea.vue +207 -207
  110. package/components/forms/input/textarea/ATextareaV2.vue +253 -248
  111. package/components/forms/radio-button/ARadioButton.vue +95 -95
  112. package/components/forms/request-demo/ARequestDemo.vue +108 -108
  113. package/components/forms/toggle/AToggle.vue +157 -157
  114. package/components/forms/toggle/AToggleV2.vue +72 -72
  115. package/components/forms/toggle/types.ts +16 -16
  116. package/components/modals/AConfirmationEmail.vue +40 -40
  117. package/components/modals/AboutTariffModal.vue +115 -115
  118. package/components/modals/AnotherDeviceModal.vue +65 -65
  119. package/components/modals/ApplicationAcceptedModal.vue +45 -45
  120. package/components/modals/ConnectingTariffModal.vue +60 -60
  121. package/components/modals/ContactsMobileModel.vue +182 -182
  122. package/components/modals/ContentNavigationModal.vue +100 -100
  123. package/components/modals/Insufficient-funds-modal.vue +62 -62
  124. package/components/modals/LimitReachedModal.vue +44 -44
  125. package/components/modals/NoAccessModal.vue +39 -39
  126. package/components/modals/PaymentMethodModal.vue +101 -101
  127. package/components/modals/RedirectsBanksModal.vue +69 -69
  128. package/components/modals/ReplenishModal.vue +132 -132
  129. package/components/modals/ReportBugConfirmModal.vue +32 -32
  130. package/components/modals/ReportBugModal.vue +172 -172
  131. package/components/modals/Resend.vue +81 -81
  132. package/components/modals/SubmitApplicationModal.vue +126 -126
  133. package/components/modals/id/AuthModal.vue +72 -72
  134. package/components/modals/id/IdAutoLogoutModal.vue +44 -44
  135. package/components/modals/id/IdBanner.vue +41 -41
  136. package/components/modals/id/IdConfirmAccountOtpModal.vue +182 -182
  137. package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -41
  138. package/components/modals/id/IdLoginModal.vue +336 -336
  139. package/components/modals/id/IdModals.vue +125 -125
  140. package/components/modals/id/IdNewPasswordModal.vue +129 -129
  141. package/components/modals/id/IdOtpInput.vue +156 -156
  142. package/components/modals/id/IdPasswordSuccessfulModal.vue +25 -25
  143. package/components/modals/id/IdRecoveryModal.vue +117 -117
  144. package/components/modals/id/IdRegistrationModal.vue +215 -215
  145. package/components/modals/id/IdResetPasswordOtpModal.vue +159 -159
  146. package/components/modals/id/IdTwoFactorModal.vue +126 -126
  147. package/components/navigation/README.md +1 -1
  148. package/components/navigation/bottom-navigation/ABottomNavigation.vue +106 -106
  149. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +128 -128
  150. package/components/navigation/breadcrumbs/types.ts +8 -8
  151. package/components/navigation/footer/AFooter.vue +283 -283
  152. package/components/navigation/footer/ui/a-footer-accordion.vue +118 -118
  153. package/components/navigation/header/AHeader.vue +237 -237
  154. package/components/navigation/header/AlmatyContacts.vue +145 -145
  155. package/components/navigation/header/AstanaContacts.vue +67 -67
  156. package/components/navigation/header/CardGallery.vue +252 -252
  157. package/components/navigation/header/ContactMenu.vue +48 -48
  158. package/components/navigation/header/HeaderLink.vue +250 -250
  159. package/components/navigation/header/HeaderUsage.vue +139 -139
  160. package/components/navigation/header/ListItem.vue +32 -32
  161. package/components/navigation/header/NavCard.vue +42 -42
  162. package/components/navigation/header/NavList.vue +73 -73
  163. package/components/navigation/header/NotificationsMenu.vue +50 -50
  164. package/components/navigation/header/ProductMenu.vue +101 -101
  165. package/components/navigation/header/ProfileMenu.vue +168 -168
  166. package/components/navigation/header/SystemNotification.vue +108 -108
  167. package/components/navigation/header/types.ts +28 -28
  168. package/components/navigation/line-tabs/ALineTabs.vue +112 -112
  169. package/components/navigation/line-tabs/types.ts +21 -21
  170. package/components/navigation/mobile-navigation/AMobileNavigation.vue +112 -112
  171. package/components/navigation/pill-tabs/APillTabs.vue +179 -179
  172. package/components/navigation/pill-tabs/APillTabsV2.vue +241 -226
  173. package/components/navigation/pill-tabs/types.ts +24 -24
  174. package/components/navigation/side-navigation/ASideNavigation.vue +406 -406
  175. package/components/overlays/README.md +1 -1
  176. package/components/overlays/drawer/ADrawerV2.vue +335 -335
  177. package/components/overlays/modal/AModal.vue +335 -335
  178. package/components/overlays/modal/AModalV2.vue +400 -400
  179. package/components/overlays/side-panel/ASidePanel.vue +445 -445
  180. package/components/overlays/sideover/ASlideover.vue +351 -351
  181. package/components/overlays/tooltip/ATooltip.vue +238 -238
  182. package/components/overlays/tooltip/ATooltipV2.vue +226 -226
  183. package/components/overlays/tooltip/types.ts +26 -26
  184. package/components/overlays/tooltip/useTooltipTrigger.ts +101 -101
  185. package/components/transitions/ATransitionHeight.vue +67 -67
  186. package/components/utils/index.ts +19 -19
  187. package/components/utils/removeTrailingSlash.ts +7 -7
  188. package/composables/highlight.ts +19 -19
  189. package/composables/modalsState.ts +8 -8
  190. package/composables/projectState.ts +2 -2
  191. package/composables/useAccessTokenCookie.ts +25 -25
  192. package/composables/useActiveNavigation.ts +84 -84
  193. package/composables/useAdaptive.ts +46 -46
  194. package/composables/useBuyTariffs.ts +91 -91
  195. package/composables/useCarouselScroll.ts +49 -49
  196. package/composables/useChipOverflow.ts +92 -92
  197. package/composables/useHeaderNavigationLinks.ts +519 -519
  198. package/composables/useIdModals.ts +36 -36
  199. package/composables/usePayment.ts +78 -78
  200. package/composables/useUIValidation.ts +16 -16
  201. package/composables/useUrls.ts +23 -23
  202. package/eslint.config.mjs +58 -58
  203. package/i18n/i18n.config.ts +21 -21
  204. package/i18n.config.ts +21 -21
  205. package/icons/adata-logo.vue +17 -17
  206. package/icons/ai-assistant.vue +13 -13
  207. package/icons/akimat.vue +20 -20
  208. package/icons/archive.vue +16 -16
  209. package/icons/arrow/arrow-bottom-left-on-square.vue +5 -5
  210. package/icons/arrow/arrow-circle-down.vue +16 -16
  211. package/icons/arrow/arrow-circle-reset.vue +16 -16
  212. package/icons/arrow/arrow-corner.vue +9 -9
  213. package/icons/arrow/arrow-graph-down.vue +13 -13
  214. package/icons/arrow/arrow-graph-up.vue +14 -14
  215. package/icons/arrow/arrow-left-right.vue +8 -8
  216. package/icons/arrow/arrow-left.vue +14 -14
  217. package/icons/arrow/arrow-right.vue +14 -14
  218. package/icons/arrow/arrow-square-down.vue +15 -15
  219. package/icons/arrow/arrow-top-right-on-square.vue +6 -6
  220. package/icons/arrow/arrows-in.vue +11 -11
  221. package/icons/arrow/arrows-out.vue +11 -11
  222. package/icons/arrow/arrows-resize-in.vue +38 -38
  223. package/icons/arrow/arrows-resize-out.vue +17 -17
  224. package/icons/arrow-currency-gray.vue +5 -5
  225. package/icons/arrow-currency-green.vue +5 -5
  226. package/icons/arrow-currency-red.vue +5 -5
  227. package/icons/arrow-side-up.vue +6 -6
  228. package/icons/avatar.vue +12 -12
  229. package/icons/bank.vue +5 -5
  230. package/icons/bar-chart-3.vue +3 -3
  231. package/icons/bill.vue +3 -3
  232. package/icons/block.vue +16 -16
  233. package/icons/book-open.vue +3 -3
  234. package/icons/bookmark/bookmark-filled.vue +19 -19
  235. package/icons/bookmark/bookmark.vue +5 -5
  236. package/icons/bot.vue +52 -52
  237. package/icons/braces.vue +3 -3
  238. package/icons/briefcase.vue +14 -14
  239. package/icons/browsers/browser-duck.vue +65 -65
  240. package/icons/browsers/browser-google.vue +30 -30
  241. package/icons/browsers/browser-yandex.vue +13 -13
  242. package/icons/building-vector.vue +7 -7
  243. package/icons/building.vue +9 -9
  244. package/icons/calculator.vue +7 -7
  245. package/icons/calendar.vue +24 -24
  246. package/icons/car-side.vue +16 -16
  247. package/icons/car.vue +7 -7
  248. package/icons/cart.vue +15 -15
  249. package/icons/chart-bar.vue +5 -5
  250. package/icons/chart-no-axes-column.vue +3 -3
  251. package/icons/chart-pie.vue +16 -16
  252. package/icons/check/check-circle.vue +6 -6
  253. package/icons/check/check-outline.vue +3 -3
  254. package/icons/check/check-shield.vue +14 -14
  255. package/icons/check/check.vue +17 -17
  256. package/icons/check/checkmark-circle.vue +6 -6
  257. package/icons/check-sb.vue +7 -7
  258. package/icons/checkbox/checkbox-active.vue +17 -17
  259. package/icons/checkbox/checkbox-empty.vue +10 -10
  260. package/icons/checkbox/checkbox-intermediate.vue +7 -7
  261. package/icons/chevron/chevron-down-outline.vue +3 -3
  262. package/icons/chevron/chevron-down.vue +5 -5
  263. package/icons/chevron/chevron-left.vue +5 -5
  264. package/icons/chevron/chevron-right.vue +5 -5
  265. package/icons/chevron/chevron-up.vue +5 -5
  266. package/icons/chevron/double-chevron-right.vue +12 -12
  267. package/icons/clipboard-list.vue +3 -3
  268. package/icons/clipboard-text.vue +7 -7
  269. package/icons/clock-outline.vue +3 -3
  270. package/icons/clock-time.vue +24 -24
  271. package/icons/clock.vue +25 -25
  272. package/icons/close.vue +16 -16
  273. package/icons/cloud/cloud-upload.vue +3 -3
  274. package/icons/code.vue +9 -9
  275. package/icons/company/company-bazis.vue +21 -21
  276. package/icons/company/company-bereke.vue +25 -25
  277. package/icons/company/company-bigroup.vue +16 -16
  278. package/icons/company/company-erg.vue +17 -17
  279. package/icons/company/company-forte.vue +21 -21
  280. package/icons/company/company-halyk.vue +15 -15
  281. package/icons/company/company-jusan.vue +31 -31
  282. package/icons/company/company-kaspi.vue +14 -14
  283. package/icons/company/company-kazzinc.vue +22 -22
  284. package/icons/company/company-mycar.vue +13 -13
  285. package/icons/company/company-samruk.vue +21 -21
  286. package/icons/company-egov-small.vue +15 -15
  287. package/icons/company.vue +8 -8
  288. package/icons/compare-outlined.vue +8 -8
  289. package/icons/copy.vue +7 -7
  290. package/icons/currency/currency-dollar.vue +16 -16
  291. package/icons/currency/currency-down.vue +22 -22
  292. package/icons/currency/currency-eur.vue +57 -57
  293. package/icons/currency/currency-rub.vue +7 -7
  294. package/icons/currency/currency-tenge.vue +9 -9
  295. package/icons/currency/currency-usd.vue +221 -221
  296. package/icons/currency/currency-yuan.vue +25 -25
  297. package/icons/database.vue +3 -3
  298. package/icons/default-avatar.vue +20 -20
  299. package/icons/delete.vue +7 -7
  300. package/icons/document.vue +5 -5
  301. package/icons/dots-horizontal.vue +31 -31
  302. package/icons/download-line.vue +13 -13
  303. package/icons/download-outline.vue +3 -3
  304. package/icons/download-rounded.vue +15 -15
  305. package/icons/download.vue +11 -11
  306. package/icons/edit.vue +7 -7
  307. package/icons/education.vue +16 -16
  308. package/icons/egov-small.vue +7 -7
  309. package/icons/egov.vue +41 -41
  310. package/icons/elicense.vue +38 -38
  311. package/icons/excel-icon.vue +14 -14
  312. package/icons/expand-window.vue +7 -7
  313. package/icons/eye-closed.vue +26 -26
  314. package/icons/eye-open.vue +7 -7
  315. package/icons/eye-opened.vue +23 -23
  316. package/icons/favourite-bookmark-outline.vue +17 -17
  317. package/icons/file/file-check-corner.vue +3 -3
  318. package/icons/file/file-spreadsheet.vue +3 -3
  319. package/icons/file/file.vue +16 -16
  320. package/icons/file/files.vue +16 -16
  321. package/icons/file-json.vue +3 -3
  322. package/icons/file-pen.vue +31 -31
  323. package/icons/file-search.vue +3 -3
  324. package/icons/file-stack.vue +31 -31
  325. package/icons/file-text.vue +3 -3
  326. package/icons/file-types/excel.vue +131 -131
  327. package/icons/file-types/html.vue +13 -13
  328. package/icons/file-types/jpeg.vue +16 -16
  329. package/icons/file-types/pdf.vue +11 -11
  330. package/icons/file-types/png.vue +11 -11
  331. package/icons/file-types/rar.vue +11 -11
  332. package/icons/file-types/word.vue +50 -50
  333. package/icons/file-types/zip.vue +11 -11
  334. package/icons/filter.vue +5 -5
  335. package/icons/flag.vue +7 -7
  336. package/icons/flask-conical.vue +3 -3
  337. package/icons/folder-open.vue +3 -3
  338. package/icons/gauge.vue +17 -17
  339. package/icons/gift-outline.vue +3 -3
  340. package/icons/gift.vue +8 -8
  341. package/icons/git-compare.vue +38 -38
  342. package/icons/git-fork.vue +3 -3
  343. package/icons/globe-2.vue +3 -3
  344. package/icons/globe.vue +16 -16
  345. package/icons/google.vue +41 -41
  346. package/icons/gradiend-icons/files-gradient.vue +22 -22
  347. package/icons/gradiend-icons/hammer-gradient.vue +62 -62
  348. package/icons/graduation-cap.vue +31 -31
  349. package/icons/graph-loading.vue +34 -34
  350. package/icons/graph-pie.vue +14 -14
  351. package/icons/hand/hand-thumb-up-filled.vue +5 -5
  352. package/icons/hand/hand-thumb-up.vue +5 -5
  353. package/icons/hand-with-phone/hand-with-phone-dark.vue +52 -52
  354. package/icons/hand-with-phone/hand-with-phone-light.vue +52 -52
  355. package/icons/handshake.vue +5 -5
  356. package/icons/hcheck.vue +14 -14
  357. package/icons/hdocument.vue +7 -7
  358. package/icons/headset.vue +6 -6
  359. package/icons/help-question-circle.vue +26 -26
  360. package/icons/history.vue +5 -5
  361. package/icons/home.vue +14 -14
  362. package/icons/horizontal-more.vue +13 -13
  363. package/icons/hot-line.vue +6 -6
  364. package/icons/hummer.vue +16 -16
  365. package/icons/id.vue +7 -7
  366. package/icons/in-row-type.vue +46 -46
  367. package/icons/in-table-type.vue +29 -29
  368. package/icons/info/info-circle.vue +29 -29
  369. package/icons/invoice.vue +8 -8
  370. package/icons/judge.vue +14 -14
  371. package/icons/kaspi-qr.vue +13 -13
  372. package/icons/key-round.vue +3 -3
  373. package/icons/landmark.vue +3 -3
  374. package/icons/layers.vue +3 -3
  375. package/icons/letter/letter-a.vue +8 -6
  376. package/icons/letter/letter-b.vue +6 -6
  377. package/icons/letter/letter-c.vue +6 -6
  378. package/icons/letter/letter-d.vue +6 -6
  379. package/icons/letter/letter-e.vue +6 -6
  380. package/icons/link-chain.vue +28 -28
  381. package/icons/link-url.vue +3 -3
  382. package/icons/link.vue +7 -7
  383. package/icons/linkedin.vue +24 -24
  384. package/icons/list-tree.vue +3 -3
  385. package/icons/loader-circle.vue +27 -27
  386. package/icons/location.vue +8 -8
  387. package/icons/lock.vue +5 -5
  388. package/icons/logo.vue +15 -15
  389. package/icons/logout.vue +16 -16
  390. package/icons/magnify/magnifying-glass-minus.vue +8 -8
  391. package/icons/magnify/magnifying-glass-plus.vue +9 -9
  392. package/icons/magnify/magnifying-glass.vue +9 -9
  393. package/icons/mail-question-mark.vue +8 -8
  394. package/icons/mail.vue +7 -7
  395. package/icons/mailru.vue +34 -34
  396. package/icons/main-filter.vue +5 -5
  397. package/icons/map/map-pin-filled.vue +7 -7
  398. package/icons/map/map-pin-rect.vue +15 -15
  399. package/icons/map/map-pin.vue +7 -7
  400. package/icons/map-marker-start.vue +7 -7
  401. package/icons/map-paper.vue +5 -5
  402. package/icons/medal.vue +7 -7
  403. package/icons/menu-filled.vue +20 -20
  404. package/icons/menu.vue +8 -8
  405. package/icons/message/message-square.vue +3 -3
  406. package/icons/message/message.vue +12 -12
  407. package/icons/message-dotted.vue +30 -30
  408. package/icons/messages-square.vue +3 -3
  409. package/icons/minus/minus-circle.vue +10 -10
  410. package/icons/money.vue +5 -5
  411. package/icons/monitoring.vue +10 -10
  412. package/icons/moon.vue +8 -8
  413. package/icons/more.vue +29 -29
  414. package/icons/network.vue +3 -3
  415. package/icons/newspaper.vue +3 -3
  416. package/icons/note-pencil.vue +14 -14
  417. package/icons/note.vue +14 -14
  418. package/icons/notification-error.vue +17 -17
  419. package/icons/notification.vue +16 -16
  420. package/icons/paperclip.vue +7 -7
  421. package/icons/payment/payment-card.vue +6 -6
  422. package/icons/payment/payment-kaspi.vue +11 -11
  423. package/icons/person-vector.vue +7 -7
  424. package/icons/person-with-briefcase.vue +10 -10
  425. package/icons/person.vue +22 -22
  426. package/icons/phone-call.vue +6 -6
  427. package/icons/phone-filled.vue +5 -5
  428. package/icons/phone-reversed.vue +3 -3
  429. package/icons/phone.vue +7 -7
  430. package/icons/plus/plus-circle.vue +8 -8
  431. package/icons/plus/plus.vue +13 -13
  432. package/icons/profile.vue +5 -5
  433. package/icons/radio/radio-check.vue +8 -8
  434. package/icons/radio/radio-empty.vue +10 -10
  435. package/icons/receipt.vue +8 -8
  436. package/icons/robot-outline.vue +3 -3
  437. package/icons/robot.vue +14 -14
  438. package/icons/route.vue +7 -7
  439. package/icons/sanctions.vue +8 -8
  440. package/icons/scales/scale-outline.vue +3 -3
  441. package/icons/scales/scale.vue +16 -16
  442. package/icons/scales/scales.vue +5 -5
  443. package/icons/scales/standing-scales.vue +15 -15
  444. package/icons/scan-search.vue +3 -3
  445. package/icons/search-outline.vue +3 -3
  446. package/icons/search.vue +27 -27
  447. package/icons/send.vue +3 -3
  448. package/icons/settings.vue +26 -26
  449. package/icons/share/share-alt.vue +5 -5
  450. package/icons/share/share.vue +14 -14
  451. package/icons/shield-alert.vue +31 -31
  452. package/icons/shield-verified.vue +14 -14
  453. package/icons/ship.vue +8 -8
  454. package/icons/socials/face-book.vue +15 -15
  455. package/icons/socials/facebook-color.vue +16 -16
  456. package/icons/socials/globe-color.vue +16 -16
  457. package/icons/socials/instagram-color.vue +46 -46
  458. package/icons/socials/instagram.vue +19 -19
  459. package/icons/socials/linkedin-color.vue +14 -14
  460. package/icons/socials/telegram-color.vue +16 -16
  461. package/icons/socials/telegram.vue +15 -15
  462. package/icons/socials/tik-tok.vue +15 -15
  463. package/icons/socials/tiktok-color.vue +14 -14
  464. package/icons/socials/vk-color.vue +16 -16
  465. package/icons/socials/youtube-color.vue +16 -16
  466. package/icons/socials/youtube.vue +16 -16
  467. package/icons/sort/sort-asc.vue +15 -15
  468. package/icons/sort/sort-desc.vue +15 -15
  469. package/icons/sparkles.vue +3 -3
  470. package/icons/splitting-arrows.vue +8 -8
  471. package/icons/star/star-filled.vue +41 -41
  472. package/icons/star/star-half-filled.vue +21 -21
  473. package/icons/star/star.vue +25 -25
  474. package/icons/sun.vue +25 -25
  475. package/icons/sviazi.vue +5 -5
  476. package/icons/tag.vue +30 -30
  477. package/icons/tasks.vue +10 -10
  478. package/icons/tender-search.vue +11 -11
  479. package/icons/terminal.vue +3 -3
  480. package/icons/toasts/check-circle-toast.vue +6 -6
  481. package/icons/toasts/warning-triangle-toast.vue +8 -8
  482. package/icons/trash.vue +13 -13
  483. package/icons/triangle-alert.vue +3 -3
  484. package/icons/triangle.vue +10 -10
  485. package/icons/truck.vue +7 -7
  486. package/icons/user-square.vue +14 -14
  487. package/icons/user.vue +22 -22
  488. package/icons/users-focus.vue +8 -8
  489. package/icons/users-outline.vue +3 -3
  490. package/icons/users-round.vue +3 -3
  491. package/icons/users-three.vue +7 -7
  492. package/icons/users.vue +8 -8
  493. package/icons/view-eye-open.vue +13 -13
  494. package/icons/warning/warning-circle.vue +29 -29
  495. package/icons/warning/warning-triangle-filled.vue +12 -12
  496. package/icons/warning/warning-triangle.vue +28 -28
  497. package/icons/webhook.vue +3 -3
  498. package/icons/whatsapp.vue +8 -8
  499. package/icons/work-bag.vue +11 -11
  500. package/icons/work-case.vue +9 -9
  501. package/icons/work-search.vue +10 -10
  502. package/icons/work.vue +5 -5
  503. package/icons/workflow.vue +3 -3
  504. package/icons/x-mark.vue +15 -15
  505. package/icons/x-outline.vue +3 -3
  506. package/icons/yandex.vue +29 -29
  507. package/icons/zap.vue +3 -3
  508. package/illustrations/address-location.vue +38 -38
  509. package/illustrations/award-badge.vue +105 -105
  510. package/illustrations/ball-with-chain.vue +120 -120
  511. package/illustrations/bill.vue +133 -133
  512. package/illustrations/buildings.vue +82 -82
  513. package/illustrations/calendar.vue +156 -156
  514. package/illustrations/chains.vue +152 -152
  515. package/illustrations/coin-percent.vue +126 -126
  516. package/illustrations/coins-stack.vue +202 -202
  517. package/illustrations/delete-dark.vue +32 -32
  518. package/illustrations/delete.vue +33 -33
  519. package/illustrations/doc-with-stamp.vue +126 -126
  520. package/illustrations/document.vue +64 -64
  521. package/illustrations/door.vue +85 -85
  522. package/illustrations/empty-badge-check.vue +20 -20
  523. package/illustrations/empty-ban.vue +18 -18
  524. package/illustrations/empty-box.vue +77 -77
  525. package/illustrations/empty-filter.vue +20 -20
  526. package/illustrations/empty-inbox.vue +19 -19
  527. package/illustrations/empty-scale.vue +22 -22
  528. package/illustrations/empty-search-x.vue +21 -21
  529. package/illustrations/empty-shopping-cart.vue +21 -21
  530. package/illustrations/empty-users-round.vue +20 -20
  531. package/illustrations/empty-wallet.vue +127 -127
  532. package/illustrations/graph-in-coin.vue +119 -119
  533. package/illustrations/hammer.vue +156 -156
  534. package/illustrations/hand-cash.vue +108 -108
  535. package/illustrations/info.vue +52 -52
  536. package/illustrations/mail-active.vue +86 -86
  537. package/illustrations/mail.vue +68 -68
  538. package/illustrations/no-access.vue +92 -92
  539. package/illustrations/ok.vue +90 -90
  540. package/illustrations/people-group.vue +237 -237
  541. package/illustrations/person-with-phone.vue +187 -187
  542. package/illustrations/person.vue +159 -159
  543. package/illustrations/phone-check.vue +110 -110
  544. package/illustrations/phone-payment-method.vue +223 -223
  545. package/illustrations/search.vue +14 -14
  546. package/illustrations/shield-user.vue +94 -94
  547. package/illustrations/stop-hand.vue +84 -84
  548. package/illustrations/stop-sign.vue +34 -34
  549. package/illustrations/suit.vue +97 -97
  550. package/illustrations/suitcase.vue +105 -105
  551. package/illustrations/terminal.vue +100 -100
  552. package/illustrations/trash-can.vue +66 -66
  553. package/illustrations/turn-on-tariff.vue +38 -38
  554. package/illustrations/two-persons.vue +169 -169
  555. package/lang/en.ts +877 -877
  556. package/lang/kk.ts +879 -879
  557. package/lang/ru.ts +879 -879
  558. package/layouts/default.vue +13 -13
  559. package/nuxt.config.ts +95 -92
  560. package/package.json +64 -64
  561. package/plugins/maska.ts +4 -4
  562. package/plugins/toast.client.ts +41 -41
  563. package/public/kaspi/logo.svg +4 -4
  564. package/shared/constans/pages.ts +96 -96
  565. package/tsconfig.json +6 -6
  566. package/utils/getMaxZindex.ts +25 -25
  567. package/utils/localizedNavigation.ts +36 -36
  568. package/utils/twMerge.ts +34 -34
  569. package/vitest.config.ts +14 -14
@@ -1,406 +1,406 @@
1
- <script setup lang="ts">
2
- import Hummer from "#adata-ui/icons/hummer.vue";
3
- import Work from "#adata-ui/icons/work.vue";
4
- import Company from "#adata-ui/icons/company.vue";
5
- import Car from "#adata-ui/icons/car.vue";
6
- import IconArrowGraph from "#adata-ui/icons/arrow/arrow-graph-up.vue";
7
- import IconSearch from "#adata-ui/icons/search.vue"
8
- import IconUsers from "#adata-ui/icons/users.vue";
9
- import IconDocument from "#adata-ui/icons/hdocument.vue";
10
- import IconArrowCircle from "#adata-ui/icons/arrow/arrow-circle-down.vue";
11
- import IconScales from "#adata-ui/icons/scales/scale.vue";
12
- import IconLink from "#adata-ui/icons/link-chain.vue";
13
- import IconGlobe from "#adata-ui/icons/globe.vue";
14
- import IconBlock from "#adata-ui/icons/block.vue";
15
- import IconWork from "#adata-ui/icons/work-bag.vue";
16
- import IconDollar from "#adata-ui/icons/currency/currency-dollar.vue";
17
- import IconFile from "#adata-ui/icons/file/file.vue";
18
- import IconCheck from "#adata-ui/icons/hcheck.vue";
19
- import IconCheckCircle from "#adata-ui/icons/check/check-circle.vue";
20
- import IconCar from "#adata-ui/icons/car.vue";
21
- import IconTruck from "#adata-ui/icons/truck.vue";
22
- import IconCompany from "#adata-ui/icons/company.vue";
23
- import IconMedal from "#adata-ui/icons/medal.vue";
24
-
25
- import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'
26
- import {PAGES} from "#adata-ui/shared/constans/pages";
27
- import { useUrls } from '#adata-ui/composables/useUrls'
28
-
29
- type Modules = 'counterparty' | 'work' | 'tender' | 'fines' | 'analytics'
30
-
31
- interface Props {
32
- topMargin?: number
33
- width?: string
34
- panelDuration: number
35
- overlayDuration: number
36
- zIndex: number | string
37
- }
38
-
39
- const props = withDefaults(defineProps<Props>(), {
40
- topMargin: 0,
41
- width: 'auto',
42
- panelDuration: 300,
43
- overlayDuration: 500,
44
- zIndex: 'auto'
45
- })
46
- const { myLayer }: any = useAppConfig()
47
- const urls = useUrls()
48
-
49
- const activeModule = ref<Modules | null>(null)
50
- const bottom = ref<HTMLElement | null>(null)
51
- const bottomHeight = ref(0)
52
- const windowHeight = ref(0)
53
- const open = ref(!!activeModule.value)
54
-
55
- const calculateSize = () => {
56
- if (window?.innerHeight > 0) windowHeight.value = window.innerHeight
57
-
58
- bottomHeight.value = bottom.value ? bottom.value.clientHeight : 0
59
- }
60
-
61
- const sidebarHeight = computed(() => {
62
- if (!windowHeight.value) return
63
-
64
- return windowHeight.value - props.topMargin - bottomHeight.value
65
- })
66
-
67
- const menu = ref<HTMLElement | null>(null)
68
- const isBodyAlreadyLocked = ref<boolean>(false)
69
- const zIndex = ref()
70
- const items = [
71
- {
72
- label: "Контрагенты",
73
- icon: Company,
74
- value: "counterparty"
75
- },
76
- {
77
- label: "Работа",
78
- icon: Work,
79
- value: "work"
80
- },
81
- {
82
- label: "Тендеры",
83
- icon: Hummer,
84
- value: "tender"
85
- },
86
- {
87
- label: "Штрафы",
88
- icon: Car,
89
- value: "fines"
90
- },
91
- {
92
- label: "Аналитика",
93
- icon: IconArrowGraph,
94
- value: "analytics"
95
- }
96
- ]
97
-
98
- const sideLinks = {
99
- counterparty: [
100
- {
101
- icon: IconSearch,
102
- label: "Проверка контрагентов",
103
- link: urls.pk + PAGES.pk.main
104
- },
105
- {
106
- icon: IconScales,
107
- label: "Сравнение контрагентов",
108
- link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.compare : urls.pk + PAGES.pk.compare
109
- },
110
- {
111
- icon: IconLink,
112
- label: "Косвенные связи",
113
- link: myLayer.counterParty ? urls.pk + myLayer.counterParty + '/search-connections/check' : urls.pk + PAGES.pk.connections
114
- },
115
- {
116
- icon: IconUsers,
117
- label: "Массовая проверка",
118
- link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.employees : urls.pk + PAGES.pk.employees
119
- },
120
- {
121
- icon: IconGlobe,
122
- label: "Зарубежные контрагенты",
123
- link: urls.pk + PAGES.pk.foreign
124
- },
125
- {
126
- icon: IconBlock,
127
- label: "Санкции",
128
- link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.sanctions : urls.pk + PAGES.pk.sanctions
129
- },
130
- {
131
- icon: IconDollar,
132
- label: "Офшоры",
133
- link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.offshore : urls.pk + PAGES.pk.offshore
134
- },
135
- {
136
- icon: IconDocument,
137
- label: "Экспресс проверка",
138
- link: "#"
139
- },
140
- {
141
- icon: IconArrowCircle,
142
- label: "Выгрузка данных",
143
- link: urls.pk + PAGES.pk.unload
144
- }
145
- ],
146
- work: [
147
- {
148
- icon: IconWork,
149
- label: "Вакансии",
150
- link: urls.work + PAGES.work.vacancy
151
- },
152
- {
153
- icon: IconDocument,
154
- label: "Резюме",
155
- link: urls.work + PAGES.work.summary
156
- },
157
- ],
158
- tender: [
159
- {
160
- icon: IconSearch,
161
- label: "Поиск тендеров",
162
- link: urls.tender + PAGES.tender.main
163
- },
164
- {
165
- icon: IconFile,
166
- label: "Поиск договоров",
167
- link: urls.tender + PAGES.tender.contracts
168
- },
169
- {
170
- icon: IconCheck,
171
- label: "Планы закупок",
172
- link: urls.tender + PAGES.tender.plans
173
- }
174
- ],
175
- fines: [
176
- {
177
- icon: IconCheckCircle,
178
- label: "Проверка штрафов",
179
- link: urls.avto + PAGES.fines.main
180
- },
181
- {
182
- icon: IconCar,
183
- label: "Проверка авто",
184
- link: urls.avto + PAGES.fines.avto
185
- },
186
- {
187
- icon: IconTruck,
188
- label: "Массовая проверка авто",
189
- link: urls.avto + PAGES.fines.bulk
190
- }
191
- ],
192
- analytics: [
193
- {
194
- icon: IconSearch,
195
- label: "Поиск клиентов",
196
- link: urls.analytics + PAGES.analytics.clients
197
- },
198
- {
199
- icon: IconCheck,
200
- label: "Анализ закупок",
201
- link: urls.analytics + PAGES.analytics.analysis
202
- },
203
- {
204
- icon: IconArrowGraph,
205
- label: "Индекс деловой активности",
206
- link: urls.analytics + PAGES.analytics.index
207
- },
208
- {
209
- icon: IconCompany,
210
- label: "Субьекты бизнеса",
211
- link: urls.analytics + PAGES.analytics.business
212
- },
213
- {
214
- icon: IconMedal,
215
- label: "Рейтинг налогоплательщиков",
216
- link: urls.analytics + PAGES.analytics.rating
217
- }
218
- ],
219
- }
220
- const currentLinks = ref(sideLinks.counterparty)
221
-
222
- const getMaxZIndex = () =>
223
- Math.max(
224
- ...Array.from(document.querySelectorAll('body *'), (el) =>
225
- parseFloat(window.getComputedStyle(el).zIndex)
226
- ).filter((zIndex) => !Number.isNaN(zIndex)),
227
- 0
228
- )
229
-
230
- onMounted(() => {
231
- zIndex.value = props.zIndex === 'auto' ? getMaxZIndex() : props.zIndex
232
- })
233
-
234
- const toggleBodyScroll = (el: HTMLBodyElement | HTMLDivElement, lock: boolean) => {
235
- if (lock) {
236
- setTimeout(() => {
237
- disableBodyScroll(el, { reserveScrollBarGap: true })
238
- }, 0)
239
- return
240
- }
241
-
242
- enableBodyScroll(el)
243
- document.documentElement.style.removeProperty('overflow')
244
- }
245
-
246
- watch(() => [
247
- bottom.value,
248
- props.topMargin,
249
- open.value
250
- ], () => {
251
- nextTick(() => calculateSize())
252
- })
253
-
254
- watch(
255
- () => [open.value, menu.value],
256
- (newVal, oldVal) => {
257
- const wasShown = oldVal ? oldVal[0] : false
258
- const [isShown, menuEl] = newVal
259
- const isOpening = isShown
260
- const isClosing = wasShown && !isShown
261
-
262
- if (!menuEl) return
263
- if (isOpening) isBodyAlreadyLocked.value = !!document.body.style.overflow
264
-
265
- if (isShown) {
266
- toggleBodyScroll(menuEl, true)
267
- return;
268
- }
269
-
270
- if (!isClosing || isBodyAlreadyLocked.value) return;
271
-
272
- setTimeout(() => {
273
- if (menuEl) toggleBodyScroll(menuEl, false)
274
- }, props.panelDuration)
275
- })
276
-
277
- watch(activeModule, (e) => {
278
- if (e) {
279
- currentLinks.value = sideLinks[e]
280
- }
281
- open.value = !!e;
282
- })
283
-
284
- const overlayStyles = computed(() => ({
285
- zIndex: zIndex.value,
286
- animationDuration: `${props.overlayDuration}ms`,
287
- pointerEvents: !open.value ? 'none' : 'all',
288
- top: `${props.topMargin}px`,
289
- bottom: `${bottomHeight.value}px`,
290
- height: `${sidebarHeight.value}px`,
291
- }))
292
-
293
- const panelStyles = computed(() => ({
294
- zIndex: zIndex.value,
295
- width: props.width === 'auto' ? '100%': props.width,
296
- height: `${sidebarHeight.value}px`,
297
- bottom: `${bottomHeight.value}px`,
298
- top: `${props.topMargin}px`,
299
- animationDuration: `${props.panelDuration}ms`
300
- }))
301
- </script>
302
-
303
- <template>
304
- <div class="lg:hidden">
305
- <Transition name="overlay">
306
- <div
307
- v-show="open"
308
- ref="overlay"
309
- class="w-full h-full fixed left-0 top-0 backdrop-blur bg-badge/20"
310
- :style="overlayStyles"
311
- @click="activeModule = null"
312
- />
313
- </Transition>
314
- <Transition name="slide">
315
- <div
316
- v-if="open"
317
- ref="menu"
318
- class="bg-main fixed w-full h-full overflow-y-auto overflow-x-hidden px-4 py-5"
319
- :style="panelStyles"
320
- >
321
- <Transition
322
- mode="out-in"
323
- name="module-slide"
324
- >
325
- <div :key="activeModule ? activeModule : 0">
326
- <nuxt-link
327
- v-for="item in currentLinks"
328
- :key="item.label"
329
- :to="item.link"
330
- class="flex items-center gap-4 px-4 py-3 bg-muted mb-2 rounded"
331
- >
332
- <component
333
- :is="item.icon"
334
- class="w-6 h-6"
335
- />
336
- <span>{{ item.label }}</span>
337
- </nuxt-link>
338
- </div>
339
- </Transition>
340
- </div>
341
- </Transition>
342
- </div>
343
- <div
344
- ref="bottom"
345
- class="sticky bottom-0 lg:hidden z-10"
346
- >
347
- <a-bottom-navigation
348
- v-model="activeModule"
349
- :items="items"
350
- grow
351
- />
352
- </div>
353
- </template>
354
-
355
- <style scoped lang="scss">
356
- .slide-enter-active,
357
- .slide-leave-active {
358
- animation: slide-left;
359
- }
360
-
361
- .slide-leave-active {
362
- animation-direction: reverse;
363
- }
364
-
365
- .overlay-enter-active,
366
- .overlay-leave-active {
367
- animation: overlay-transition;
368
- }
369
-
370
- .overlay-leave-active {
371
- animation-direction: reverse;
372
- }
373
-
374
- .module-slide-enter-active,
375
- .module-slide-leave-active {
376
- transition: .2s ease-in-out;
377
- }
378
-
379
- .module-slide-enter-from,
380
- .module-slide-leave-to {
381
- transform: translateX(50px);
382
- opacity: 0;
383
- }
384
-
385
- @keyframes slide-left {
386
- 0% {
387
- opacity: 0;
388
- transform: translateX(-100%);
389
- }
390
-
391
- 100% {
392
- opacity: 1;
393
- transform: translateX(0);
394
- }
395
- }
396
-
397
- @keyframes overlay-transition {
398
- 0% {
399
- opacity: 0;
400
- }
401
-
402
- 100% {
403
- opacity: 1;
404
- }
405
- }
406
- </style>
1
+ <script setup lang="ts">
2
+ import Hummer from "#adata-ui/icons/hummer.vue";
3
+ import Work from "#adata-ui/icons/work.vue";
4
+ import Company from "#adata-ui/icons/company.vue";
5
+ import Car from "#adata-ui/icons/car.vue";
6
+ import IconArrowGraph from "#adata-ui/icons/arrow/arrow-graph-up.vue";
7
+ import IconSearch from "#adata-ui/icons/search.vue"
8
+ import IconUsers from "#adata-ui/icons/users.vue";
9
+ import IconDocument from "#adata-ui/icons/hdocument.vue";
10
+ import IconArrowCircle from "#adata-ui/icons/arrow/arrow-circle-down.vue";
11
+ import IconScales from "#adata-ui/icons/scales/scale.vue";
12
+ import IconLink from "#adata-ui/icons/link-chain.vue";
13
+ import IconGlobe from "#adata-ui/icons/globe.vue";
14
+ import IconBlock from "#adata-ui/icons/block.vue";
15
+ import IconWork from "#adata-ui/icons/work-bag.vue";
16
+ import IconDollar from "#adata-ui/icons/currency/currency-dollar.vue";
17
+ import IconFile from "#adata-ui/icons/file/file.vue";
18
+ import IconCheck from "#adata-ui/icons/hcheck.vue";
19
+ import IconCheckCircle from "#adata-ui/icons/check/check-circle.vue";
20
+ import IconCar from "#adata-ui/icons/car.vue";
21
+ import IconTruck from "#adata-ui/icons/truck.vue";
22
+ import IconCompany from "#adata-ui/icons/company.vue";
23
+ import IconMedal from "#adata-ui/icons/medal.vue";
24
+
25
+ import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock'
26
+ import {PAGES} from "#adata-ui/shared/constans/pages";
27
+ import { useUrls } from '#adata-ui/composables/useUrls'
28
+
29
+ type Modules = 'counterparty' | 'work' | 'tender' | 'fines' | 'analytics'
30
+
31
+ interface Props {
32
+ topMargin?: number
33
+ width?: string
34
+ panelDuration: number
35
+ overlayDuration: number
36
+ zIndex: number | string
37
+ }
38
+
39
+ const props = withDefaults(defineProps<Props>(), {
40
+ topMargin: 0,
41
+ width: 'auto',
42
+ panelDuration: 300,
43
+ overlayDuration: 500,
44
+ zIndex: 'auto'
45
+ })
46
+ const { myLayer }: any = useAppConfig()
47
+ const urls = useUrls()
48
+
49
+ const activeModule = ref<Modules | null>(null)
50
+ const bottom = ref<HTMLElement | null>(null)
51
+ const bottomHeight = ref(0)
52
+ const windowHeight = ref(0)
53
+ const open = ref(!!activeModule.value)
54
+
55
+ const calculateSize = () => {
56
+ if (window?.innerHeight > 0) windowHeight.value = window.innerHeight
57
+
58
+ bottomHeight.value = bottom.value ? bottom.value.clientHeight : 0
59
+ }
60
+
61
+ const sidebarHeight = computed(() => {
62
+ if (!windowHeight.value) return
63
+
64
+ return windowHeight.value - props.topMargin - bottomHeight.value
65
+ })
66
+
67
+ const menu = ref<HTMLElement | null>(null)
68
+ const isBodyAlreadyLocked = ref<boolean>(false)
69
+ const zIndex = ref()
70
+ const items = [
71
+ {
72
+ label: "Контрагенты",
73
+ icon: Company,
74
+ value: "counterparty"
75
+ },
76
+ {
77
+ label: "Работа",
78
+ icon: Work,
79
+ value: "work"
80
+ },
81
+ {
82
+ label: "Тендеры",
83
+ icon: Hummer,
84
+ value: "tender"
85
+ },
86
+ {
87
+ label: "Штрафы",
88
+ icon: Car,
89
+ value: "fines"
90
+ },
91
+ {
92
+ label: "Аналитика",
93
+ icon: IconArrowGraph,
94
+ value: "analytics"
95
+ }
96
+ ]
97
+
98
+ const sideLinks = {
99
+ counterparty: [
100
+ {
101
+ icon: IconSearch,
102
+ label: "Проверка контрагентов",
103
+ link: urls.pk + PAGES.pk.main
104
+ },
105
+ {
106
+ icon: IconScales,
107
+ label: "Сравнение контрагентов",
108
+ link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.compare : urls.pk + PAGES.pk.compare
109
+ },
110
+ {
111
+ icon: IconLink,
112
+ label: "Косвенные связи",
113
+ link: myLayer.counterParty ? urls.pk + myLayer.counterParty + '/search-connections/check' : urls.pk + PAGES.pk.connections
114
+ },
115
+ {
116
+ icon: IconUsers,
117
+ label: "Массовая проверка",
118
+ link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.employees : urls.pk + PAGES.pk.employees
119
+ },
120
+ {
121
+ icon: IconGlobe,
122
+ label: "Зарубежные контрагенты",
123
+ link: urls.pk + PAGES.pk.foreign
124
+ },
125
+ {
126
+ icon: IconBlock,
127
+ label: "Санкции",
128
+ link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.sanctions : urls.pk + PAGES.pk.sanctions
129
+ },
130
+ {
131
+ icon: IconDollar,
132
+ label: "Офшоры",
133
+ link: myLayer.counterParty ? urls.pk + myLayer.counterParty + PAGES.pk.offshore : urls.pk + PAGES.pk.offshore
134
+ },
135
+ {
136
+ icon: IconDocument,
137
+ label: "Экспресс проверка",
138
+ link: "#"
139
+ },
140
+ {
141
+ icon: IconArrowCircle,
142
+ label: "Выгрузка данных",
143
+ link: urls.pk + PAGES.pk.unload
144
+ }
145
+ ],
146
+ work: [
147
+ {
148
+ icon: IconWork,
149
+ label: "Вакансии",
150
+ link: urls.work + PAGES.work.vacancy
151
+ },
152
+ {
153
+ icon: IconDocument,
154
+ label: "Резюме",
155
+ link: urls.work + PAGES.work.summary
156
+ },
157
+ ],
158
+ tender: [
159
+ {
160
+ icon: IconSearch,
161
+ label: "Поиск тендеров",
162
+ link: urls.tender + PAGES.tender.main
163
+ },
164
+ {
165
+ icon: IconFile,
166
+ label: "Поиск договоров",
167
+ link: urls.tender + PAGES.tender.contracts
168
+ },
169
+ {
170
+ icon: IconCheck,
171
+ label: "Планы закупок",
172
+ link: urls.tender + PAGES.tender.plans
173
+ }
174
+ ],
175
+ fines: [
176
+ {
177
+ icon: IconCheckCircle,
178
+ label: "Проверка штрафов",
179
+ link: urls.avto + PAGES.fines.main
180
+ },
181
+ {
182
+ icon: IconCar,
183
+ label: "Проверка авто",
184
+ link: urls.avto + PAGES.fines.avto
185
+ },
186
+ {
187
+ icon: IconTruck,
188
+ label: "Массовая проверка авто",
189
+ link: urls.avto + PAGES.fines.bulk
190
+ }
191
+ ],
192
+ analytics: [
193
+ {
194
+ icon: IconSearch,
195
+ label: "Поиск клиентов",
196
+ link: urls.analytics + PAGES.analytics.clients
197
+ },
198
+ {
199
+ icon: IconCheck,
200
+ label: "Анализ закупок",
201
+ link: urls.analytics + PAGES.analytics.analysis
202
+ },
203
+ {
204
+ icon: IconArrowGraph,
205
+ label: "Индекс деловой активности",
206
+ link: urls.analytics + PAGES.analytics.index
207
+ },
208
+ {
209
+ icon: IconCompany,
210
+ label: "Субьекты бизнеса",
211
+ link: urls.analytics + PAGES.analytics.business
212
+ },
213
+ {
214
+ icon: IconMedal,
215
+ label: "Рейтинг налогоплательщиков",
216
+ link: urls.analytics + PAGES.analytics.rating
217
+ }
218
+ ],
219
+ }
220
+ const currentLinks = ref(sideLinks.counterparty)
221
+
222
+ const getMaxZIndex = () =>
223
+ Math.max(
224
+ ...Array.from(document.querySelectorAll('body *'), (el) =>
225
+ parseFloat(window.getComputedStyle(el).zIndex)
226
+ ).filter((zIndex) => !Number.isNaN(zIndex)),
227
+ 0
228
+ )
229
+
230
+ onMounted(() => {
231
+ zIndex.value = props.zIndex === 'auto' ? getMaxZIndex() : props.zIndex
232
+ })
233
+
234
+ const toggleBodyScroll = (el: HTMLBodyElement | HTMLDivElement, lock: boolean) => {
235
+ if (lock) {
236
+ setTimeout(() => {
237
+ disableBodyScroll(el, { reserveScrollBarGap: true })
238
+ }, 0)
239
+ return
240
+ }
241
+
242
+ enableBodyScroll(el)
243
+ document.documentElement.style.removeProperty('overflow')
244
+ }
245
+
246
+ watch(() => [
247
+ bottom.value,
248
+ props.topMargin,
249
+ open.value
250
+ ], () => {
251
+ nextTick(() => calculateSize())
252
+ })
253
+
254
+ watch(
255
+ () => [open.value, menu.value],
256
+ (newVal, oldVal) => {
257
+ const wasShown = oldVal ? oldVal[0] : false
258
+ const [isShown, menuEl] = newVal
259
+ const isOpening = isShown
260
+ const isClosing = wasShown && !isShown
261
+
262
+ if (!menuEl) return
263
+ if (isOpening) isBodyAlreadyLocked.value = !!document.body.style.overflow
264
+
265
+ if (isShown) {
266
+ toggleBodyScroll(menuEl, true)
267
+ return;
268
+ }
269
+
270
+ if (!isClosing || isBodyAlreadyLocked.value) return;
271
+
272
+ setTimeout(() => {
273
+ if (menuEl) toggleBodyScroll(menuEl, false)
274
+ }, props.panelDuration)
275
+ })
276
+
277
+ watch(activeModule, (e) => {
278
+ if (e) {
279
+ currentLinks.value = sideLinks[e]
280
+ }
281
+ open.value = !!e;
282
+ })
283
+
284
+ const overlayStyles = computed(() => ({
285
+ zIndex: zIndex.value,
286
+ animationDuration: `${props.overlayDuration}ms`,
287
+ pointerEvents: !open.value ? 'none' : 'all',
288
+ top: `${props.topMargin}px`,
289
+ bottom: `${bottomHeight.value}px`,
290
+ height: `${sidebarHeight.value}px`,
291
+ }))
292
+
293
+ const panelStyles = computed(() => ({
294
+ zIndex: zIndex.value,
295
+ width: props.width === 'auto' ? '100%': props.width,
296
+ height: `${sidebarHeight.value}px`,
297
+ bottom: `${bottomHeight.value}px`,
298
+ top: `${props.topMargin}px`,
299
+ animationDuration: `${props.panelDuration}ms`
300
+ }))
301
+ </script>
302
+
303
+ <template>
304
+ <div class="lg:hidden">
305
+ <Transition name="overlay">
306
+ <div
307
+ v-show="open"
308
+ ref="overlay"
309
+ class="w-full h-full fixed left-0 top-0 backdrop-blur bg-badge/20"
310
+ :style="overlayStyles"
311
+ @click="activeModule = null"
312
+ />
313
+ </Transition>
314
+ <Transition name="slide">
315
+ <div
316
+ v-if="open"
317
+ ref="menu"
318
+ class="bg-main fixed w-full h-full overflow-y-auto overflow-x-hidden px-4 py-5"
319
+ :style="panelStyles"
320
+ >
321
+ <Transition
322
+ mode="out-in"
323
+ name="module-slide"
324
+ >
325
+ <div :key="activeModule ? activeModule : 0">
326
+ <nuxt-link
327
+ v-for="item in currentLinks"
328
+ :key="item.label"
329
+ :to="item.link"
330
+ class="flex items-center gap-4 px-4 py-3 bg-muted mb-2 rounded"
331
+ >
332
+ <component
333
+ :is="item.icon"
334
+ class="w-6 h-6"
335
+ />
336
+ <span>{{ item.label }}</span>
337
+ </nuxt-link>
338
+ </div>
339
+ </Transition>
340
+ </div>
341
+ </Transition>
342
+ </div>
343
+ <div
344
+ ref="bottom"
345
+ class="sticky bottom-0 lg:hidden z-10"
346
+ >
347
+ <a-bottom-navigation
348
+ v-model="activeModule"
349
+ :items="items"
350
+ grow
351
+ />
352
+ </div>
353
+ </template>
354
+
355
+ <style scoped lang="scss">
356
+ .slide-enter-active,
357
+ .slide-leave-active {
358
+ animation: slide-left;
359
+ }
360
+
361
+ .slide-leave-active {
362
+ animation-direction: reverse;
363
+ }
364
+
365
+ .overlay-enter-active,
366
+ .overlay-leave-active {
367
+ animation: overlay-transition;
368
+ }
369
+
370
+ .overlay-leave-active {
371
+ animation-direction: reverse;
372
+ }
373
+
374
+ .module-slide-enter-active,
375
+ .module-slide-leave-active {
376
+ transition: .2s ease-in-out;
377
+ }
378
+
379
+ .module-slide-enter-from,
380
+ .module-slide-leave-to {
381
+ transform: translateX(50px);
382
+ opacity: 0;
383
+ }
384
+
385
+ @keyframes slide-left {
386
+ 0% {
387
+ opacity: 0;
388
+ transform: translateX(-100%);
389
+ }
390
+
391
+ 100% {
392
+ opacity: 1;
393
+ transform: translateX(0);
394
+ }
395
+ }
396
+
397
+ @keyframes overlay-transition {
398
+ 0% {
399
+ opacity: 0;
400
+ }
401
+
402
+ 100% {
403
+ opacity: 1;
404
+ }
405
+ }
406
+ </style>