adata-ui 2.1.41-beta.1 → 2.1.41-beta.3
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.
- package/-error.vue +170 -170
- package/.claude/settings.local.json +19 -0
- package/.editorconfig +12 -12
- package/.gitlab-ci.yml +16 -16
- package/.nuxtrc +1 -1
- package/.nvmrc +1 -1
- package/.playground/app.config.ts +5 -5
- package/.playground/app.vue +102 -102
- package/.playground/nuxt.config.ts +4 -4
- package/CLAUDE.md +63 -63
- package/README.md +75 -75
- package/app.config.ts +28 -28
- package/app.vue +8 -8
- package/assets/styles/main.css +12 -12
- package/assets/styles/theme.css +583 -583
- package/assets/styles/ui.css +247 -247
- package/components/elements/README.md +1 -1
- package/components/elements/a-select-row/ASelectRowV2.vue +210 -210
- package/components/elements/a-select-row/index.vue +139 -139
- package/components/elements/accordion/AAccordion.vue +199 -199
- package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +145 -145
- package/components/elements/accordion/AAccordionGroup/types.ts +20 -20
- package/components/elements/accordion/AAccordionGroup/ui.config.ts +22 -22
- package/components/elements/accordion/types.ts +14 -14
- package/components/elements/accordion/ui.config.ts +22 -22
- package/components/elements/alert/AAlert.vue +52 -52
- package/components/elements/banner/ABanner.vue +49 -49
- package/components/elements/bg-block/ABgBlock.vue +11 -11
- package/components/elements/button/AButton.vue +191 -191
- package/components/elements/button/AButtonV2.vue +179 -177
- package/components/elements/button/types.ts +24 -24
- package/components/elements/button-login/index.vue +19 -19
- package/components/elements/calendar/ACalendar.vue +83 -83
- package/components/elements/carousel/ACarousel.vue +159 -159
- package/components/elements/carousel/config.ui.ts +15 -15
- package/components/elements/carousel/types.ts +18 -18
- package/components/elements/chip-wrapper/AChipWrapper.vue +81 -81
- package/components/elements/chip-wrapper/types.ts +12 -12
- package/components/elements/chips/AChips.vue +33 -33
- package/components/elements/companies/AOurClients.vue +47 -47
- package/components/elements/count-up/ACountUp.vue +54 -54
- package/components/elements/curve-block/ACurveBlock.vue +259 -259
- package/components/elements/curve-block-v2/ACurveBlockV2.vue +122 -120
- package/components/elements/digit-badge/ADigitBadge.vue +86 -86
- package/components/elements/empty-box/empty-box-V2.vue +92 -92
- package/components/elements/error-template/index.vue +116 -116
- package/components/elements/feature-description/AFeatureDescription.vue +112 -112
- package/components/elements/illustrations/noAccess.vue +71 -71
- package/components/elements/infinite-carousel/AInfiniteCarousel.vue +85 -85
- package/components/elements/infinite-scroll/AInfiniteScroll.vue +33 -33
- package/components/elements/leave-note/ALeaveNote.vue +102 -102
- package/components/elements/pagination/APagination.vue +110 -110
- package/components/elements/photos-animation/APhotosAnimation.vue +85 -85
- package/components/elements/section-heading/ASectionHeading.vue +35 -35
- package/components/elements/segmented/ASegmentedV2.vue +154 -154
- package/components/elements/select/ASelect.vue +448 -448
- package/components/elements/select/ASelectMobile.vue +186 -186
- package/components/elements/select/ASelectV2.vue +580 -580
- package/components/elements/select/ui/select-button.vue +112 -112
- package/components/elements/select/ui/select-list.vue +99 -99
- package/components/elements/show-more/AShowMore.vue +35 -35
- package/components/elements/show-more/AShowMoreV2.vue +26 -26
- package/components/elements/skeleton/ASkeleton.vue +44 -44
- package/components/elements/slider/ASlider.vue +175 -175
- package/components/elements/slider/ASliderItem.vue +31 -31
- package/components/elements/slider/ASliderV2.vue +182 -182
- package/components/elements/slider/types.ts +21 -21
- package/components/elements/star-rating/AStarRating.vue +189 -189
- package/components/elements/star-rating/types.ts +7 -7
- package/components/elements/star-rating/ui/Star.vue +74 -74
- package/components/elements/status-badge/AStatusBadge.vue +125 -125
- package/components/elements/step-slider/AStepSliderColCard.vue +270 -270
- package/components/elements/step-slider/AStepSliderColNumber.vue +199 -199
- package/components/elements/table/ATable.vue +93 -93
- package/components/elements/table/table.config.ts +32 -32
- package/components/elements/tree-select/ATreeSelect.vue +157 -157
- package/components/elements/tree-select/TreeService.ts +184 -184
- package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -104
- package/components/elements/tree-select/types.ts +63 -63
- package/components/elements/tree-select/utils.ts +30 -30
- package/components/elements/tree-select-mobile/ATreeSelectMobile.vue +79 -79
- package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +175 -175
- package/components/elements/tree-select-modal/ATreeSelectModal.vue +217 -217
- package/components/features/color-mode/AColorMode.client.vue +74 -74
- package/components/features/dropdown/ADropdown.vue +127 -127
- package/components/features/dropdown/ADropdownV2.vue +140 -140
- package/components/features/go-top/GoTop.vue +63 -63
- package/components/features/lang-switcher/lang-switcher.vue +158 -158
- package/components/features/payment/banner/BasicPlusLimitBanner.vue +84 -84
- package/components/features/payment/banner/PaymentBanner.vue +88 -88
- package/components/features/payment/banner/UpSellBanner.vue +105 -105
- package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +180 -180
- package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +123 -123
- package/components/features/payment/process/PaymentMethodSidePanel.vue +138 -138
- package/components/features/payment/process/PaymentProcess.vue +158 -158
- package/components/features/payment/process/PaymentTopUpSidePanel.vue +119 -119
- package/components/features/pk-mobile-services/APkMobileServices.vue +107 -107
- package/components/features//321/201hange-version/AChangeVersion.vue +20 -20
- package/components/forms/README.md +1 -1
- package/components/forms/checkbox/ACheckbox.vue +149 -149
- package/components/forms/checkbox/ACheckboxV2.vue +229 -229
- package/components/forms/feedback-form/FeedbackForm.vue +177 -177
- package/components/forms/feedback-form/FeedbackFormV2.vue +186 -183
- package/components/forms/input/AInputV2.vue +560 -556
- package/components/forms/input/button/AInputButton.vue +53 -53
- package/components/forms/input/date/AInputDate.vue +217 -217
- package/components/forms/input/password/AInputPassword.vue +59 -59
- package/components/forms/input/standard/AInputStandard.vue +424 -424
- package/components/forms/input/textarea/ATextarea.vue +207 -207
- package/components/forms/input/textarea/ATextareaV2.vue +253 -253
- package/components/forms/radio-button/ARadioButton.vue +95 -95
- package/components/forms/request-demo/ARequestDemo.vue +108 -108
- package/components/forms/toggle/AToggle.vue +157 -157
- package/components/forms/toggle/AToggleV2.vue +72 -72
- package/components/forms/toggle/types.ts +16 -16
- package/components/modals/AConfirmationEmail.vue +40 -40
- package/components/modals/AboutTariffModal.vue +115 -115
- package/components/modals/AnotherDeviceModal.vue +65 -65
- package/components/modals/ApplicationAcceptedModal.vue +45 -45
- package/components/modals/ConnectingTariffModal.vue +60 -60
- package/components/modals/ContactsMobileModel.vue +182 -182
- package/components/modals/ContentNavigationModal.vue +100 -100
- package/components/modals/Insufficient-funds-modal.vue +62 -62
- package/components/modals/LimitReachedModal.vue +44 -44
- package/components/modals/NoAccessModal.vue +39 -39
- package/components/modals/PaymentMethodModal.vue +101 -101
- package/components/modals/RedirectsBanksModal.vue +69 -69
- package/components/modals/ReplenishModal.vue +132 -132
- package/components/modals/ReportBugConfirmModal.vue +32 -32
- package/components/modals/ReportBugModal.vue +172 -172
- package/components/modals/Resend.vue +81 -81
- package/components/modals/SubmitApplicationModal.vue +126 -126
- package/components/modals/id/AuthModal.vue +72 -72
- package/components/modals/id/IdAutoLogoutModal.vue +44 -44
- package/components/modals/id/IdBanner.vue +41 -41
- package/components/modals/id/IdConfirmAccountOtpModal.vue +182 -182
- package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -41
- package/components/modals/id/IdLoginModal.vue +336 -336
- package/components/modals/id/IdModals.vue +125 -125
- package/components/modals/id/IdNewPasswordModal.vue +129 -129
- package/components/modals/id/IdOtpInput.vue +156 -156
- package/components/modals/id/IdPasswordSuccessfulModal.vue +25 -25
- package/components/modals/id/IdRecoveryModal.vue +117 -117
- package/components/modals/id/IdRegistrationModal.vue +215 -215
- package/components/modals/id/IdResetPasswordOtpModal.vue +159 -159
- package/components/modals/id/IdTwoFactorModal.vue +126 -126
- package/components/navigation/README.md +1 -1
- package/components/navigation/bottom-navigation/ABottomNavigation.vue +106 -106
- package/components/navigation/breadcrumbs/ABreadcrumbs.vue +128 -128
- package/components/navigation/breadcrumbs/types.ts +8 -8
- package/components/navigation/footer/AFooter.vue +283 -283
- package/components/navigation/footer/ui/a-footer-accordion.vue +118 -118
- package/components/navigation/header/AHeader.vue +237 -237
- package/components/navigation/header/AlmatyContacts.vue +145 -145
- package/components/navigation/header/AstanaContacts.vue +67 -67
- package/components/navigation/header/CardGallery.vue +252 -252
- package/components/navigation/header/ContactMenu.vue +48 -48
- package/components/navigation/header/HeaderLink.vue +250 -250
- package/components/navigation/header/HeaderUsage.vue +139 -139
- package/components/navigation/header/ListItem.vue +32 -32
- package/components/navigation/header/NavCard.vue +42 -42
- package/components/navigation/header/NavList.vue +73 -73
- package/components/navigation/header/NotificationsMenu.vue +50 -50
- package/components/navigation/header/ProductMenu.vue +101 -101
- package/components/navigation/header/ProfileMenu.vue +168 -168
- package/components/navigation/header/SystemNotification.vue +108 -108
- package/components/navigation/header/types.ts +28 -28
- package/components/navigation/line-tabs/ALineTabs.vue +112 -112
- package/components/navigation/line-tabs/types.ts +21 -21
- package/components/navigation/mobile-navigation/AMobileNavigation.vue +112 -112
- package/components/navigation/pill-tabs/APillTabs.vue +179 -179
- package/components/navigation/pill-tabs/APillTabsV2.vue +241 -241
- package/components/navigation/pill-tabs/types.ts +24 -24
- package/components/navigation/side-navigation/ASideNavigation.vue +406 -406
- package/components/overlays/README.md +1 -1
- package/components/overlays/drawer/ADrawerV2.vue +335 -335
- package/components/overlays/modal/AModal.vue +335 -335
- package/components/overlays/modal/AModalV2.vue +400 -400
- package/components/overlays/side-panel/ASidePanel.vue +445 -445
- package/components/overlays/sideover/ASlideover.vue +351 -351
- package/components/overlays/tooltip/ATooltip.vue +238 -238
- package/components/overlays/tooltip/ATooltipV2.vue +226 -226
- package/components/overlays/tooltip/types.ts +26 -26
- package/components/overlays/tooltip/useTooltipTrigger.ts +101 -101
- package/components/transitions/ATransitionHeight.vue +67 -67
- package/components/utils/index.ts +19 -19
- package/components/utils/removeTrailingSlash.ts +7 -7
- package/composables/highlight.ts +19 -19
- package/composables/modalsState.ts +8 -8
- package/composables/projectState.ts +2 -2
- package/composables/useAccessTokenCookie.ts +25 -25
- package/composables/useActiveNavigation.ts +84 -84
- package/composables/useAdaptive.ts +46 -46
- package/composables/useBuyTariffs.ts +91 -91
- package/composables/useCarouselScroll.ts +49 -49
- package/composables/useChipOverflow.ts +92 -92
- package/composables/useHeaderNavigationLinks.ts +519 -519
- package/composables/useIdModals.ts +36 -36
- package/composables/usePayment.ts +78 -78
- package/composables/useUIValidation.ts +16 -16
- package/composables/useUrls.ts +23 -23
- package/eslint.config.mjs +58 -58
- package/i18n/i18n.config.ts +21 -21
- package/i18n.config.ts +21 -21
- package/icons/adata-logo.vue +17 -17
- package/icons/ai-assistant.vue +13 -13
- package/icons/akimat.vue +20 -20
- package/icons/archive.vue +16 -16
- package/icons/arrow/arrow-bottom-left-on-square.vue +5 -5
- package/icons/arrow/arrow-circle-down.vue +16 -16
- package/icons/arrow/arrow-circle-reset.vue +16 -16
- package/icons/arrow/arrow-corner.vue +9 -9
- package/icons/arrow/arrow-graph-down.vue +13 -13
- package/icons/arrow/arrow-graph-up.vue +14 -14
- package/icons/arrow/arrow-left-right.vue +8 -8
- package/icons/arrow/arrow-left.vue +14 -14
- package/icons/arrow/arrow-right.vue +14 -14
- package/icons/arrow/arrow-square-down.vue +15 -15
- package/icons/arrow/arrow-top-right-on-square.vue +6 -6
- package/icons/arrow/arrows-in.vue +11 -11
- package/icons/arrow/arrows-out.vue +11 -11
- package/icons/arrow/arrows-resize-in.vue +38 -38
- package/icons/arrow/arrows-resize-out.vue +17 -17
- package/icons/arrow-currency-gray.vue +5 -5
- package/icons/arrow-currency-green.vue +5 -5
- package/icons/arrow-currency-red.vue +5 -5
- package/icons/arrow-side-up.vue +6 -6
- package/icons/avatar.vue +12 -12
- package/icons/bank.vue +5 -5
- package/icons/bar-chart-3.vue +3 -3
- package/icons/bill.vue +3 -3
- package/icons/block.vue +16 -16
- package/icons/book-open.vue +3 -3
- package/icons/bookmark/bookmark-filled.vue +19 -19
- package/icons/bookmark/bookmark.vue +5 -5
- package/icons/bot.vue +52 -52
- package/icons/braces.vue +3 -3
- package/icons/briefcase.vue +14 -14
- package/icons/browsers/browser-duck.vue +65 -65
- package/icons/browsers/browser-google.vue +30 -30
- package/icons/browsers/browser-yandex.vue +13 -13
- package/icons/building-vector.vue +7 -7
- package/icons/building.vue +9 -9
- package/icons/calculator.vue +7 -7
- package/icons/calendar.vue +24 -24
- package/icons/car-side.vue +16 -16
- package/icons/car.vue +7 -7
- package/icons/cart.vue +15 -15
- package/icons/chart-bar.vue +5 -5
- package/icons/chart-no-axes-column.vue +3 -3
- package/icons/chart-pie.vue +16 -16
- package/icons/check/check-circle.vue +6 -6
- package/icons/check/check-outline.vue +3 -3
- package/icons/check/check-shield.vue +14 -14
- package/icons/check/check.vue +17 -17
- package/icons/check/checkmark-circle.vue +6 -6
- package/icons/check-sb.vue +7 -7
- package/icons/checkbox/checkbox-active.vue +17 -17
- package/icons/checkbox/checkbox-empty.vue +10 -10
- package/icons/checkbox/checkbox-intermediate.vue +7 -7
- package/icons/chevron/chevron-down-outline.vue +3 -3
- package/icons/chevron/chevron-down.vue +5 -5
- package/icons/chevron/chevron-left.vue +5 -5
- package/icons/chevron/chevron-right.vue +5 -5
- package/icons/chevron/chevron-up.vue +5 -5
- package/icons/chevron/double-chevron-right.vue +12 -12
- package/icons/clipboard-list.vue +3 -3
- package/icons/clipboard-text.vue +7 -7
- package/icons/clock-outline.vue +3 -3
- package/icons/clock-time.vue +24 -24
- package/icons/clock.vue +25 -25
- package/icons/close.vue +16 -16
- package/icons/cloud/cloud-upload.vue +3 -3
- package/icons/code.vue +9 -9
- package/icons/company/company-bazis.vue +21 -21
- package/icons/company/company-bereke.vue +25 -25
- package/icons/company/company-bigroup.vue +16 -16
- package/icons/company/company-erg.vue +17 -17
- package/icons/company/company-forte.vue +21 -21
- package/icons/company/company-halyk.vue +15 -15
- package/icons/company/company-jusan.vue +31 -31
- package/icons/company/company-kaspi.vue +14 -14
- package/icons/company/company-kazzinc.vue +22 -22
- package/icons/company/company-mycar.vue +13 -13
- package/icons/company/company-samruk.vue +21 -21
- package/icons/company-egov-small.vue +15 -15
- package/icons/company.vue +8 -8
- package/icons/compare-outlined.vue +8 -8
- package/icons/copy.vue +7 -7
- package/icons/currency/currency-dollar.vue +16 -16
- package/icons/currency/currency-down.vue +22 -22
- package/icons/currency/currency-eur.vue +57 -57
- package/icons/currency/currency-rub.vue +7 -7
- package/icons/currency/currency-tenge.vue +9 -9
- package/icons/currency/currency-usd.vue +221 -221
- package/icons/currency/currency-yuan.vue +25 -25
- package/icons/database.vue +3 -3
- package/icons/default-avatar.vue +20 -20
- package/icons/delete.vue +7 -7
- package/icons/document.vue +5 -5
- package/icons/dots-horizontal.vue +31 -31
- package/icons/download-line.vue +13 -13
- package/icons/download-outline.vue +3 -3
- package/icons/download-rounded.vue +15 -15
- package/icons/download.vue +11 -11
- package/icons/edit.vue +7 -7
- package/icons/education.vue +16 -16
- package/icons/egov-small.vue +7 -7
- package/icons/egov.vue +41 -41
- package/icons/elicense.vue +38 -38
- package/icons/excel-icon.vue +14 -14
- package/icons/expand-window.vue +7 -7
- package/icons/eye-closed.vue +26 -26
- package/icons/eye-open.vue +7 -7
- package/icons/eye-opened.vue +23 -23
- package/icons/favourite-bookmark-outline.vue +17 -17
- package/icons/file/file-check-corner.vue +3 -3
- package/icons/file/file-spreadsheet.vue +3 -3
- package/icons/file/file.vue +16 -16
- package/icons/file/files.vue +16 -16
- package/icons/file-json.vue +3 -3
- package/icons/file-pen.vue +31 -31
- package/icons/file-search.vue +3 -3
- package/icons/file-stack.vue +31 -31
- package/icons/file-text.vue +3 -3
- package/icons/file-types/excel.vue +131 -131
- package/icons/file-types/html.vue +13 -13
- package/icons/file-types/jpeg.vue +16 -16
- package/icons/file-types/pdf.vue +11 -11
- package/icons/file-types/png.vue +11 -11
- package/icons/file-types/rar.vue +11 -11
- package/icons/file-types/word.vue +50 -50
- package/icons/file-types/zip.vue +11 -11
- package/icons/filter.vue +5 -5
- package/icons/flag.vue +7 -7
- package/icons/flask-conical.vue +3 -3
- package/icons/folder-open.vue +3 -3
- package/icons/gauge.vue +17 -17
- package/icons/gift-outline.vue +3 -3
- package/icons/gift.vue +8 -8
- package/icons/git-compare.vue +38 -38
- package/icons/git-fork.vue +3 -3
- package/icons/globe-2.vue +3 -3
- package/icons/globe.vue +16 -16
- package/icons/google.vue +41 -41
- package/icons/gradiend-icons/files-gradient.vue +22 -22
- package/icons/gradiend-icons/hammer-gradient.vue +62 -62
- package/icons/graduation-cap.vue +31 -31
- package/icons/graph-loading.vue +34 -34
- package/icons/graph-pie.vue +14 -14
- package/icons/hand/hand-thumb-up-filled.vue +5 -5
- package/icons/hand/hand-thumb-up.vue +5 -5
- package/icons/hand-with-phone/hand-with-phone-dark.vue +52 -52
- package/icons/hand-with-phone/hand-with-phone-light.vue +52 -52
- package/icons/handshake.vue +5 -5
- package/icons/hcheck.vue +14 -14
- package/icons/hdocument.vue +7 -7
- package/icons/headset.vue +6 -6
- package/icons/help-question-circle.vue +26 -26
- package/icons/history.vue +5 -5
- package/icons/home.vue +14 -14
- package/icons/horizontal-more.vue +13 -13
- package/icons/hot-line.vue +6 -6
- package/icons/hummer.vue +16 -16
- package/icons/id.vue +7 -7
- package/icons/in-row-type.vue +46 -46
- package/icons/in-table-type.vue +29 -29
- package/icons/info/info-circle.vue +29 -29
- package/icons/invoice.vue +8 -8
- package/icons/judge.vue +14 -14
- package/icons/kaspi-qr.vue +13 -13
- package/icons/key-round.vue +3 -3
- package/icons/landmark.vue +3 -3
- package/icons/layers.vue +3 -3
- package/icons/letter/letter-a.vue +8 -8
- package/icons/letter/letter-b.vue +6 -6
- package/icons/letter/letter-c.vue +6 -6
- package/icons/letter/letter-d.vue +6 -6
- package/icons/letter/letter-e.vue +6 -6
- package/icons/link-chain.vue +28 -28
- package/icons/link-url.vue +3 -3
- package/icons/link.vue +7 -7
- package/icons/linkedin.vue +24 -24
- package/icons/list-tree.vue +3 -3
- package/icons/loader-circle.vue +27 -27
- package/icons/location.vue +8 -8
- package/icons/lock.vue +5 -5
- package/icons/logo.vue +15 -15
- package/icons/logout.vue +16 -16
- package/icons/magnify/magnifying-glass-minus.vue +8 -8
- package/icons/magnify/magnifying-glass-plus.vue +9 -9
- package/icons/magnify/magnifying-glass.vue +9 -9
- package/icons/mail-question-mark.vue +8 -8
- package/icons/mail.vue +7 -7
- package/icons/mailru.vue +34 -34
- package/icons/main-filter.vue +5 -5
- package/icons/map/map-pin-filled.vue +7 -7
- package/icons/map/map-pin-rect.vue +15 -15
- package/icons/map/map-pin.vue +7 -7
- package/icons/map-marker-start.vue +7 -7
- package/icons/map-paper.vue +5 -5
- package/icons/medal.vue +7 -7
- package/icons/menu-filled.vue +20 -20
- package/icons/menu.vue +8 -8
- package/icons/message/message-square.vue +3 -3
- package/icons/message/message.vue +12 -12
- package/icons/message-dotted.vue +30 -30
- package/icons/messages-square.vue +3 -3
- package/icons/minus/minus-circle.vue +10 -10
- package/icons/money.vue +5 -5
- package/icons/monitoring.vue +10 -10
- package/icons/moon.vue +8 -8
- package/icons/more.vue +29 -29
- package/icons/network.vue +3 -3
- package/icons/newspaper.vue +3 -3
- package/icons/note-pencil.vue +14 -14
- package/icons/note.vue +14 -14
- package/icons/notification-error.vue +17 -17
- package/icons/notification.vue +16 -16
- package/icons/paperclip.vue +7 -7
- package/icons/payment/payment-card.vue +6 -6
- package/icons/payment/payment-kaspi.vue +11 -11
- package/icons/person-vector.vue +7 -7
- package/icons/person-with-briefcase.vue +10 -10
- package/icons/person.vue +22 -22
- package/icons/phone-call.vue +6 -6
- package/icons/phone-filled.vue +5 -5
- package/icons/phone-reversed.vue +3 -3
- package/icons/phone.vue +7 -7
- package/icons/plus/plus-circle.vue +8 -8
- package/icons/plus/plus.vue +13 -13
- package/icons/profile.vue +5 -5
- package/icons/radio/radio-check.vue +8 -8
- package/icons/radio/radio-empty.vue +10 -10
- package/icons/receipt.vue +8 -8
- package/icons/robot-outline.vue +3 -3
- package/icons/robot.vue +14 -14
- package/icons/route.vue +7 -7
- package/icons/sanctions.vue +8 -8
- package/icons/scales/scale-outline.vue +3 -3
- package/icons/scales/scale.vue +16 -16
- package/icons/scales/scales.vue +5 -5
- package/icons/scales/standing-scales.vue +15 -15
- package/icons/scan-search.vue +3 -3
- package/icons/search-outline.vue +3 -3
- package/icons/search.vue +27 -27
- package/icons/send.vue +3 -3
- package/icons/settings.vue +26 -26
- package/icons/share/share-alt.vue +5 -5
- package/icons/share/share.vue +14 -14
- package/icons/shield-alert.vue +31 -31
- package/icons/shield-verified.vue +14 -14
- package/icons/ship.vue +8 -8
- package/icons/socials/face-book.vue +15 -15
- package/icons/socials/facebook-color.vue +16 -16
- package/icons/socials/globe-color.vue +16 -16
- package/icons/socials/instagram-color.vue +46 -46
- package/icons/socials/instagram.vue +19 -19
- package/icons/socials/linkedin-color.vue +14 -14
- package/icons/socials/telegram-color.vue +16 -16
- package/icons/socials/telegram.vue +15 -15
- package/icons/socials/tik-tok.vue +15 -15
- package/icons/socials/tiktok-color.vue +14 -14
- package/icons/socials/vk-color.vue +16 -16
- package/icons/socials/youtube-color.vue +16 -16
- package/icons/socials/youtube.vue +16 -16
- package/icons/sort/sort-asc.vue +15 -15
- package/icons/sort/sort-desc.vue +15 -15
- package/icons/sparkles.vue +3 -3
- package/icons/splitting-arrows.vue +8 -8
- package/icons/star/star-filled.vue +41 -41
- package/icons/star/star-half-filled.vue +21 -21
- package/icons/star/star.vue +25 -25
- package/icons/sun.vue +25 -25
- package/icons/sviazi.vue +5 -5
- package/icons/tag.vue +30 -30
- package/icons/tasks.vue +10 -10
- package/icons/tender-search.vue +11 -11
- package/icons/terminal.vue +3 -3
- package/icons/toasts/check-circle-toast.vue +6 -6
- package/icons/toasts/warning-triangle-toast.vue +8 -8
- package/icons/trash.vue +13 -13
- package/icons/triangle-alert.vue +3 -3
- package/icons/triangle.vue +10 -10
- package/icons/truck.vue +7 -7
- package/icons/user-square.vue +14 -14
- package/icons/user.vue +22 -22
- package/icons/users-focus.vue +8 -8
- package/icons/users-outline.vue +3 -3
- package/icons/users-round.vue +3 -3
- package/icons/users-three.vue +7 -7
- package/icons/users.vue +8 -8
- package/icons/view-eye-open.vue +13 -13
- package/icons/warning/warning-circle.vue +29 -29
- package/icons/warning/warning-triangle-filled.vue +12 -12
- package/icons/warning/warning-triangle.vue +28 -28
- package/icons/webhook.vue +3 -3
- package/icons/whatsapp.vue +8 -8
- package/icons/work-bag.vue +11 -11
- package/icons/work-case.vue +9 -9
- package/icons/work-search.vue +10 -10
- package/icons/work.vue +5 -5
- package/icons/workflow.vue +3 -3
- package/icons/x-mark.vue +15 -15
- package/icons/x-outline.vue +3 -3
- package/icons/yandex.vue +29 -29
- package/icons/zap.vue +3 -3
- package/illustrations/address-location.vue +38 -38
- package/illustrations/award-badge.vue +105 -105
- package/illustrations/ball-with-chain.vue +120 -120
- package/illustrations/bill.vue +133 -133
- package/illustrations/buildings.vue +82 -82
- package/illustrations/calendar.vue +156 -156
- package/illustrations/chains.vue +152 -152
- package/illustrations/coin-percent.vue +126 -126
- package/illustrations/coins-stack.vue +202 -202
- package/illustrations/delete-dark.vue +32 -32
- package/illustrations/delete.vue +33 -33
- package/illustrations/doc-with-stamp.vue +126 -126
- package/illustrations/document.vue +64 -64
- package/illustrations/door.vue +85 -85
- package/illustrations/empty-badge-check.vue +20 -20
- package/illustrations/empty-ban.vue +18 -18
- package/illustrations/empty-box.vue +77 -77
- package/illustrations/empty-filter.vue +20 -20
- package/illustrations/empty-inbox.vue +19 -19
- package/illustrations/empty-scale.vue +22 -22
- package/illustrations/empty-search-x.vue +21 -21
- package/illustrations/empty-shopping-cart.vue +21 -21
- package/illustrations/empty-users-round.vue +20 -20
- package/illustrations/empty-wallet.vue +127 -127
- package/illustrations/graph-in-coin.vue +119 -119
- package/illustrations/hammer.vue +156 -156
- package/illustrations/hand-cash.vue +108 -108
- package/illustrations/info.vue +52 -52
- package/illustrations/mail-active.vue +86 -86
- package/illustrations/mail.vue +68 -68
- package/illustrations/no-access.vue +92 -92
- package/illustrations/ok.vue +90 -90
- package/illustrations/people-group.vue +237 -237
- package/illustrations/person-with-phone.vue +187 -187
- package/illustrations/person.vue +159 -159
- package/illustrations/phone-check.vue +110 -110
- package/illustrations/phone-payment-method.vue +223 -223
- package/illustrations/search.vue +14 -14
- package/illustrations/shield-user.vue +94 -94
- package/illustrations/stop-hand.vue +84 -84
- package/illustrations/stop-sign.vue +34 -34
- package/illustrations/suit.vue +97 -97
- package/illustrations/suitcase.vue +105 -105
- package/illustrations/terminal.vue +100 -100
- package/illustrations/trash-can.vue +66 -66
- package/illustrations/turn-on-tariff.vue +38 -38
- package/illustrations/two-persons.vue +169 -169
- package/lang/en.ts +877 -877
- package/lang/kk.ts +879 -879
- package/lang/ru.ts +879 -879
- package/layouts/default.vue +13 -13
- package/nuxt.config.ts +95 -95
- package/package.json +64 -64
- package/plugins/maska.ts +4 -4
- package/plugins/toast.client.ts +41 -41
- package/public/kaspi/logo.svg +4 -4
- package/shared/constans/pages.ts +96 -96
- package/tsconfig.json +6 -6
- package/utils/getMaxZindex.ts +25 -25
- package/utils/localizedNavigation.ts +36 -36
- package/utils/twMerge.ts +34 -34
- package/vitest.config.ts +14 -14
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
<script lang="ts" setup>
|
|
2
|
-
import iconUser from '#adata-ui/icons/user.vue'
|
|
3
|
-
|
|
4
|
-
export interface Notification {
|
|
5
|
-
id: number
|
|
6
|
-
message: string
|
|
7
|
-
date: string
|
|
8
|
-
email: string
|
|
9
|
-
status: string
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
defineProps<{
|
|
13
|
-
notifications: Notification[]
|
|
14
|
-
}>()
|
|
15
|
-
</script>
|
|
16
|
-
<template>
|
|
17
|
-
<div class="flex w-[423px] flex-col gap-4 rounded-md bg-main p-4">
|
|
18
|
-
<div class="flex items-center justify-between">
|
|
19
|
-
<h4 class="text-h5">Уведомления</h4>
|
|
20
|
-
<ADigitBadge :value="`${notifications?.length} новых`" size="lg" />
|
|
21
|
-
</div>
|
|
22
|
-
<hr class="border-default" />
|
|
23
|
-
|
|
24
|
-
<ul v-if="notifications?.length" class="flex flex-col gap-2">
|
|
25
|
-
<li
|
|
26
|
-
v-for="(notification, idx) in notifications"
|
|
27
|
-
:key="idx"
|
|
28
|
-
class="flex items-center justify-between gap-2.5 rounded-sm bg-muted px-4 py-2"
|
|
29
|
-
>
|
|
30
|
-
<div class="rounded-full bg-brand p-2">
|
|
31
|
-
<icon-user />
|
|
32
|
-
</div>
|
|
33
|
-
<div class="flex flex-col items-start gap-1 break-all">
|
|
34
|
-
<p class="text-body-md">
|
|
35
|
-
{{ notification.message + ' ' }}
|
|
36
|
-
<a class="text-body-md text-link" href="#">{{ notification.email }}</a>
|
|
37
|
-
</p>
|
|
38
|
-
<p class="text-body-sm">{{ notification.date }}</p>
|
|
39
|
-
</div>
|
|
40
|
-
</li>
|
|
41
|
-
</ul>
|
|
42
|
-
|
|
43
|
-
<div v-else class="flex flex-col items-center gap-4 py-8">
|
|
44
|
-
<p class="text-body-md">Новых уведомлений нет</p>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<hr class="border-default" />
|
|
48
|
-
<AButton block>Посмотреть все уведомления</AButton>
|
|
49
|
-
</div>
|
|
50
|
-
</template>
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import iconUser from '#adata-ui/icons/user.vue'
|
|
3
|
+
|
|
4
|
+
export interface Notification {
|
|
5
|
+
id: number
|
|
6
|
+
message: string
|
|
7
|
+
date: string
|
|
8
|
+
email: string
|
|
9
|
+
status: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
defineProps<{
|
|
13
|
+
notifications: Notification[]
|
|
14
|
+
}>()
|
|
15
|
+
</script>
|
|
16
|
+
<template>
|
|
17
|
+
<div class="flex w-[423px] flex-col gap-4 rounded-md bg-main p-4">
|
|
18
|
+
<div class="flex items-center justify-between">
|
|
19
|
+
<h4 class="text-h5">Уведомления</h4>
|
|
20
|
+
<ADigitBadge :value="`${notifications?.length} новых`" size="lg" />
|
|
21
|
+
</div>
|
|
22
|
+
<hr class="border-default" />
|
|
23
|
+
|
|
24
|
+
<ul v-if="notifications?.length" class="flex flex-col gap-2">
|
|
25
|
+
<li
|
|
26
|
+
v-for="(notification, idx) in notifications"
|
|
27
|
+
:key="idx"
|
|
28
|
+
class="flex items-center justify-between gap-2.5 rounded-sm bg-muted px-4 py-2"
|
|
29
|
+
>
|
|
30
|
+
<div class="rounded-full bg-brand p-2">
|
|
31
|
+
<icon-user />
|
|
32
|
+
</div>
|
|
33
|
+
<div class="flex flex-col items-start gap-1 break-all">
|
|
34
|
+
<p class="text-body-md">
|
|
35
|
+
{{ notification.message + ' ' }}
|
|
36
|
+
<a class="text-body-md text-link" href="#">{{ notification.email }}</a>
|
|
37
|
+
</p>
|
|
38
|
+
<p class="text-body-sm">{{ notification.date }}</p>
|
|
39
|
+
</div>
|
|
40
|
+
</li>
|
|
41
|
+
</ul>
|
|
42
|
+
|
|
43
|
+
<div v-else class="flex flex-col items-center gap-4 py-8">
|
|
44
|
+
<p class="text-body-md">Новых уведомлений нет</p>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<hr class="border-default" />
|
|
48
|
+
<AButton block>Посмотреть все уведомления</AButton>
|
|
49
|
+
</div>
|
|
50
|
+
</template>
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import NavList from '#adata-ui/components/navigation/header/NavList.vue'
|
|
3
|
-
import { useActiveNavigation } from '#adata-ui/composables/useActiveNavigation'
|
|
4
|
-
import { useHeaderNavigationLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
|
|
5
|
-
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
6
|
-
import AIconArrowRight from '#adata-ui/icons/arrow/arrow-right.vue'
|
|
7
|
-
import AIconDownloadRounded from '#adata-ui/icons/download-rounded.vue'
|
|
8
|
-
import { PAGES } from '#adata-ui/shared/constans/pages'
|
|
9
|
-
|
|
10
|
-
defineProps<{ url?: string }>()
|
|
11
|
-
defineEmits(['outerClick', 'mouseOver'])
|
|
12
|
-
|
|
13
|
-
const urls = useUrls()
|
|
14
|
-
const { t, locale } = useI18n()
|
|
15
|
-
const modules = useHeaderNavigationLinks()
|
|
16
|
-
const { isActiveModule } = useActiveNavigation()
|
|
17
|
-
|
|
18
|
-
const COLUMN_KEYS = [['edo'], ['pk'], ['compliance', 'fines'], ['tenders', 'analytics'], ['fea', 'work']]
|
|
19
|
-
const catalogColumns = computed(() =>
|
|
20
|
-
COLUMN_KEYS.map(keys =>
|
|
21
|
-
keys
|
|
22
|
-
.map(key => modules.value.find(module => module.key === key))
|
|
23
|
-
.filter((module): module is NonNullable<typeof module> => module !== undefined),
|
|
24
|
-
),
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
function handleExportClick() {
|
|
28
|
-
navigateToLocalizedPage({
|
|
29
|
-
locale: locale.value,
|
|
30
|
-
projectUrl: urls.pk,
|
|
31
|
-
path: PAGES.pk.unload,
|
|
32
|
-
})
|
|
33
|
-
}
|
|
34
|
-
</script>
|
|
35
|
-
|
|
36
|
-
<template>
|
|
37
|
-
<div class="capitalize">
|
|
38
|
-
<div class="relative bg-main">
|
|
39
|
-
<div class="a-container max-h-[calc(100dvh-4rem)] overflow-y-auto overscroll-contain py-8">
|
|
40
|
-
<div class="flex justify-between gap-5">
|
|
41
|
-
<div class="grid min-w-0 flex-1 grid-cols-5 gap-3">
|
|
42
|
-
<div
|
|
43
|
-
v-for="(column, index) in catalogColumns"
|
|
44
|
-
:key="index"
|
|
45
|
-
class="flex flex-col gap-[22px]"
|
|
46
|
-
:class="index > 0 ? 'border-l border-default pl-3' : ''"
|
|
47
|
-
>
|
|
48
|
-
<nav-list
|
|
49
|
-
v-for="module in column"
|
|
50
|
-
:id="module.key"
|
|
51
|
-
:key="module.key"
|
|
52
|
-
:current-module="isActiveModule(module)"
|
|
53
|
-
:title="module.name"
|
|
54
|
-
:link="module.link"
|
|
55
|
-
:nav-list="module.items"
|
|
56
|
-
:to="module.to"
|
|
57
|
-
:icon="module.icon"
|
|
58
|
-
:badge="module.is_new"
|
|
59
|
-
:data-test-id="module.data_attribute"
|
|
60
|
-
>
|
|
61
|
-
<template
|
|
62
|
-
v-if="module.key === 'edo'"
|
|
63
|
-
#bottom
|
|
64
|
-
>
|
|
65
|
-
<!-- осознанно константный: белый текст на брендовой solid-карточке bg-brand -->
|
|
66
|
-
<div class="mt-4 flex flex-col gap-4 rounded-lg bg-brand p-4 normal-case text-white">
|
|
67
|
-
<div class="flex items-center gap-3">
|
|
68
|
-
<span class="rounded-[10px] bg-main p-[10px]">
|
|
69
|
-
<a-icon-download-rounded class="size-5 text-brand" />
|
|
70
|
-
</span>
|
|
71
|
-
<span class="font-semibold text-white">
|
|
72
|
-
{{ t('header.products.exportCard.title') }}
|
|
73
|
-
</span>
|
|
74
|
-
</div>
|
|
75
|
-
|
|
76
|
-
<div class="text-body-sm text-white">
|
|
77
|
-
{{ t('header.products.exportCard.subTitle') }}
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<a-button-v2
|
|
81
|
-
view="soft"
|
|
82
|
-
class="!h-9 w-fit !bg-main text-brand"
|
|
83
|
-
size="sm"
|
|
84
|
-
:icon="AIconArrowRight"
|
|
85
|
-
icon-right
|
|
86
|
-
@click="handleExportClick"
|
|
87
|
-
>
|
|
88
|
-
<span class="text-body-md-strong">
|
|
89
|
-
{{ t('header.products.exportCard.receive') }}
|
|
90
|
-
</span>
|
|
91
|
-
</a-button-v2>
|
|
92
|
-
</div>
|
|
93
|
-
</template>
|
|
94
|
-
</nav-list>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import NavList from '#adata-ui/components/navigation/header/NavList.vue'
|
|
3
|
+
import { useActiveNavigation } from '#adata-ui/composables/useActiveNavigation'
|
|
4
|
+
import { useHeaderNavigationLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
|
|
5
|
+
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
6
|
+
import AIconArrowRight from '#adata-ui/icons/arrow/arrow-right.vue'
|
|
7
|
+
import AIconDownloadRounded from '#adata-ui/icons/download-rounded.vue'
|
|
8
|
+
import { PAGES } from '#adata-ui/shared/constans/pages'
|
|
9
|
+
|
|
10
|
+
defineProps<{ url?: string }>()
|
|
11
|
+
defineEmits(['outerClick', 'mouseOver'])
|
|
12
|
+
|
|
13
|
+
const urls = useUrls()
|
|
14
|
+
const { t, locale } = useI18n()
|
|
15
|
+
const modules = useHeaderNavigationLinks()
|
|
16
|
+
const { isActiveModule } = useActiveNavigation()
|
|
17
|
+
|
|
18
|
+
const COLUMN_KEYS = [['edo'], ['pk'], ['compliance', 'fines'], ['tenders', 'analytics'], ['fea', 'work']]
|
|
19
|
+
const catalogColumns = computed(() =>
|
|
20
|
+
COLUMN_KEYS.map(keys =>
|
|
21
|
+
keys
|
|
22
|
+
.map(key => modules.value.find(module => module.key === key))
|
|
23
|
+
.filter((module): module is NonNullable<typeof module> => module !== undefined),
|
|
24
|
+
),
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
function handleExportClick() {
|
|
28
|
+
navigateToLocalizedPage({
|
|
29
|
+
locale: locale.value,
|
|
30
|
+
projectUrl: urls.pk,
|
|
31
|
+
path: PAGES.pk.unload,
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
</script>
|
|
35
|
+
|
|
36
|
+
<template>
|
|
37
|
+
<div class="capitalize">
|
|
38
|
+
<div class="relative bg-main">
|
|
39
|
+
<div class="a-container max-h-[calc(100dvh-4rem)] overflow-y-auto overscroll-contain py-8">
|
|
40
|
+
<div class="flex justify-between gap-5">
|
|
41
|
+
<div class="grid min-w-0 flex-1 grid-cols-5 gap-3">
|
|
42
|
+
<div
|
|
43
|
+
v-for="(column, index) in catalogColumns"
|
|
44
|
+
:key="index"
|
|
45
|
+
class="flex flex-col gap-[22px]"
|
|
46
|
+
:class="index > 0 ? 'border-l border-default pl-3' : ''"
|
|
47
|
+
>
|
|
48
|
+
<nav-list
|
|
49
|
+
v-for="module in column"
|
|
50
|
+
:id="module.key"
|
|
51
|
+
:key="module.key"
|
|
52
|
+
:current-module="isActiveModule(module)"
|
|
53
|
+
:title="module.name"
|
|
54
|
+
:link="module.link"
|
|
55
|
+
:nav-list="module.items"
|
|
56
|
+
:to="module.to"
|
|
57
|
+
:icon="module.icon"
|
|
58
|
+
:badge="module.is_new"
|
|
59
|
+
:data-test-id="module.data_attribute"
|
|
60
|
+
>
|
|
61
|
+
<template
|
|
62
|
+
v-if="module.key === 'edo'"
|
|
63
|
+
#bottom
|
|
64
|
+
>
|
|
65
|
+
<!-- осознанно константный: белый текст на брендовой solid-карточке bg-brand -->
|
|
66
|
+
<div class="mt-4 flex flex-col gap-4 rounded-lg bg-brand p-4 normal-case text-white">
|
|
67
|
+
<div class="flex items-center gap-3">
|
|
68
|
+
<span class="rounded-[10px] bg-main p-[10px]">
|
|
69
|
+
<a-icon-download-rounded class="size-5 text-brand" />
|
|
70
|
+
</span>
|
|
71
|
+
<span class="font-semibold text-white">
|
|
72
|
+
{{ t('header.products.exportCard.title') }}
|
|
73
|
+
</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="text-body-sm text-white">
|
|
77
|
+
{{ t('header.products.exportCard.subTitle') }}
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<a-button-v2
|
|
81
|
+
view="soft"
|
|
82
|
+
class="!h-9 w-fit !bg-main text-brand"
|
|
83
|
+
size="sm"
|
|
84
|
+
:icon="AIconArrowRight"
|
|
85
|
+
icon-right
|
|
86
|
+
@click="handleExportClick"
|
|
87
|
+
>
|
|
88
|
+
<span class="text-body-md-strong">
|
|
89
|
+
{{ t('header.products.exportCard.receive') }}
|
|
90
|
+
</span>
|
|
91
|
+
</a-button-v2>
|
|
92
|
+
</div>
|
|
93
|
+
</template>
|
|
94
|
+
</nav-list>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</template>
|
|
@@ -1,168 +1,168 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { useHeaderMenuLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
|
|
3
|
-
import Calendar from '#adata-ui/icons/calendar.vue'
|
|
4
|
-
import Gauge from '#adata-ui/icons/gauge.vue'
|
|
5
|
-
import IconLogout from '#adata-ui/icons/logout.vue'
|
|
6
|
-
import { useMediaQuery } from '@vueuse/core'
|
|
7
|
-
|
|
8
|
-
const props = withDefaults(defineProps<Props>(), {
|
|
9
|
-
daysRemaining: 0,
|
|
10
|
-
limitRemaining: 0,
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
defineEmits(['logout'])
|
|
14
|
-
|
|
15
|
-
const isLargeScreen = useMediaQuery('(min-width: 1024px)')
|
|
16
|
-
|
|
17
|
-
interface Props {
|
|
18
|
-
rate: string
|
|
19
|
-
daysRemaining?: number
|
|
20
|
-
limitRemaining?: number
|
|
21
|
-
balance: number
|
|
22
|
-
email?: string
|
|
23
|
-
replenish?: string
|
|
24
|
-
oldVersion?: string
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const formattedBalance = computed(() => props.balance.toLocaleString('ru-RU'))
|
|
28
|
-
|
|
29
|
-
const { t } = useI18n()
|
|
30
|
-
|
|
31
|
-
const items = useHeaderMenuLinks()
|
|
32
|
-
|
|
33
|
-
const { topUpSidePanel, rateId } = usePayment()
|
|
34
|
-
|
|
35
|
-
function onReplenish() {
|
|
36
|
-
rateId.value = ''
|
|
37
|
-
topUpSidePanel.value = true
|
|
38
|
-
}
|
|
39
|
-
</script>
|
|
40
|
-
|
|
41
|
-
<template>
|
|
42
|
-
<div class="w-full overflow-hidden bg-main text-primary lg:w-[320px] lg:rounded-lg lg:border lg:border-default">
|
|
43
|
-
<div class="p-2">
|
|
44
|
-
<!-- осознанно константный брендовый баннер: белое/тинты на цветном градиенте -->
|
|
45
|
-
<div class="relative overflow-hidden rounded-lg bg-linear-to-br from-brand-600/95 to-brand-500/85 p-3 text-white">
|
|
46
|
-
<div class="pointer-events-none absolute -right-8 -top-10 size-28 rounded-full bg-white/20 blur-2xl" aria-hidden="true" />
|
|
47
|
-
|
|
48
|
-
<div class="relative">
|
|
49
|
-
<p class="text-overline-medium uppercase text-white/70">
|
|
50
|
-
{{ t('header.profile.tariff') }}
|
|
51
|
-
</p>
|
|
52
|
-
<div class="mt-0.5 flex items-center justify-between gap-2">
|
|
53
|
-
<p class="truncate text-h4">
|
|
54
|
-
{{ rate }}
|
|
55
|
-
</p>
|
|
56
|
-
<span class="inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-body-sm-medium text-white ring-1 ring-inset ring-white/20">
|
|
57
|
-
<span class="relative flex size-1.5 items-center justify-center">
|
|
58
|
-
<span class="absolute inline-flex size-full animate-ping rounded-full bg-icon-success/80" />
|
|
59
|
-
<span class="relative inline-flex size-1.5 rounded-full bg-icon-success" />
|
|
60
|
-
</span>
|
|
61
|
-
{{ t('header.profile.connected') }}
|
|
62
|
-
</span>
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<p
|
|
66
|
-
v-if="email"
|
|
67
|
-
class="mt-1 truncate text-body-sm text-white/75 lg:hidden"
|
|
68
|
-
data-test-id="profile-menu-email"
|
|
69
|
-
>
|
|
70
|
-
{{ email }}
|
|
71
|
-
</p>
|
|
72
|
-
|
|
73
|
-
<div class="my-2 h-px bg-white/15" />
|
|
74
|
-
|
|
75
|
-
<div class="flex items-center justify-between gap-2">
|
|
76
|
-
<span class="text-body-sm text-white/80">{{ t('header.profile.currentBalance') }}</span>
|
|
77
|
-
<span class="text-body-lg font-bold tabular-nums">{{ formattedBalance }} ₸</span>
|
|
78
|
-
</div>
|
|
79
|
-
|
|
80
|
-
<div class="mt-2 grid grid-cols-2 gap-2 lg:hidden">
|
|
81
|
-
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
82
|
-
<gauge class="size-4 shrink-0 text-white/80" />
|
|
83
|
-
<div class="min-w-0">
|
|
84
|
-
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
85
|
-
{{ t('header.profile.requests') }}
|
|
86
|
-
</p>
|
|
87
|
-
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
88
|
-
{{ limitRemaining }}
|
|
89
|
-
</p>
|
|
90
|
-
</div>
|
|
91
|
-
</div>
|
|
92
|
-
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
93
|
-
<calendar class="size-4 shrink-0 text-white/80" />
|
|
94
|
-
<div class="min-w-0">
|
|
95
|
-
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
96
|
-
{{ t('header.profile.daysLeft') }}
|
|
97
|
-
</p>
|
|
98
|
-
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
99
|
-
{{ daysRemaining }}
|
|
100
|
-
</p>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<button
|
|
106
|
-
type="button"
|
|
107
|
-
class="mt-2.5 inline-flex h-8 w-full cursor-pointer items-center justify-center gap-1.5 rounded-full bg-white px-3 text-body-md-strong text-brand shadow-xs transition-all duration-150 hover:shadow-md focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-brand-500 active:scale-[0.98]"
|
|
108
|
-
@click="onReplenish"
|
|
109
|
-
>
|
|
110
|
-
<a-icon-plus-circle class="size-4" />
|
|
111
|
-
<span class="bg-linear-to-r from-brand-600 to-brand-500 bg-clip-text text-transparent">
|
|
112
|
-
{{ t('header.profile.addBalance') }}
|
|
113
|
-
</span>
|
|
114
|
-
</button>
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
</div>
|
|
118
|
-
|
|
119
|
-
<nav class="flex flex-col px-2 pb-2">
|
|
120
|
-
<nuxt-link-locale
|
|
121
|
-
v-for="item in items"
|
|
122
|
-
:key="item.title"
|
|
123
|
-
class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-action-secondary-hover"
|
|
124
|
-
:to="item.to"
|
|
125
|
-
:data-test-id="item?.dataTestId"
|
|
126
|
-
target="_blank"
|
|
127
|
-
>
|
|
128
|
-
<!-- <span -->
|
|
129
|
-
<!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-brand-100 bg-brand-subtle text-brand" -->
|
|
130
|
-
<!-- > -->
|
|
131
|
-
<!-- <component -->
|
|
132
|
-
<!-- :is="item.icon" -->
|
|
133
|
-
<!-- class="size-4" -->
|
|
134
|
-
<!-- /> -->
|
|
135
|
-
<!-- </span> -->
|
|
136
|
-
<span class="truncate text-primary group-hover:text-link-hover">
|
|
137
|
-
{{ item.title }}
|
|
138
|
-
</span>
|
|
139
|
-
</nuxt-link-locale>
|
|
140
|
-
</nav>
|
|
141
|
-
|
|
142
|
-
<div class="border-t border-default p-2">
|
|
143
|
-
<a-change-version
|
|
144
|
-
v-if="oldVersion"
|
|
145
|
-
:url="oldVersion"
|
|
146
|
-
class="mb-2"
|
|
147
|
-
/>
|
|
148
|
-
|
|
149
|
-
<div
|
|
150
|
-
v-if="!isLargeScreen"
|
|
151
|
-
class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-primary"
|
|
152
|
-
>
|
|
153
|
-
<span>{{ t('header.profile.colorScheme') }}</span>
|
|
154
|
-
<a-color-mode />
|
|
155
|
-
</div>
|
|
156
|
-
|
|
157
|
-
<button
|
|
158
|
-
type="button"
|
|
159
|
-
class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-action-danger transition-colors hover:bg-danger-subtle"
|
|
160
|
-
data-test-id="logout-button"
|
|
161
|
-
@click="$emit('logout')"
|
|
162
|
-
>
|
|
163
|
-
<icon-logout class="size-4 shrink-0" />
|
|
164
|
-
<span>{{ t('header.profile.logout') }}</span>
|
|
165
|
-
</button>
|
|
166
|
-
</div>
|
|
167
|
-
</div>
|
|
168
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useHeaderMenuLinks } from '#adata-ui/composables/useHeaderNavigationLinks'
|
|
3
|
+
import Calendar from '#adata-ui/icons/calendar.vue'
|
|
4
|
+
import Gauge from '#adata-ui/icons/gauge.vue'
|
|
5
|
+
import IconLogout from '#adata-ui/icons/logout.vue'
|
|
6
|
+
import { useMediaQuery } from '@vueuse/core'
|
|
7
|
+
|
|
8
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
9
|
+
daysRemaining: 0,
|
|
10
|
+
limitRemaining: 0,
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
defineEmits(['logout'])
|
|
14
|
+
|
|
15
|
+
const isLargeScreen = useMediaQuery('(min-width: 1024px)')
|
|
16
|
+
|
|
17
|
+
interface Props {
|
|
18
|
+
rate: string
|
|
19
|
+
daysRemaining?: number
|
|
20
|
+
limitRemaining?: number
|
|
21
|
+
balance: number
|
|
22
|
+
email?: string
|
|
23
|
+
replenish?: string
|
|
24
|
+
oldVersion?: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const formattedBalance = computed(() => props.balance.toLocaleString('ru-RU'))
|
|
28
|
+
|
|
29
|
+
const { t } = useI18n()
|
|
30
|
+
|
|
31
|
+
const items = useHeaderMenuLinks()
|
|
32
|
+
|
|
33
|
+
const { topUpSidePanel, rateId } = usePayment()
|
|
34
|
+
|
|
35
|
+
function onReplenish() {
|
|
36
|
+
rateId.value = ''
|
|
37
|
+
topUpSidePanel.value = true
|
|
38
|
+
}
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<template>
|
|
42
|
+
<div class="w-full overflow-hidden bg-main text-primary lg:w-[320px] lg:rounded-lg lg:border lg:border-default">
|
|
43
|
+
<div class="p-2">
|
|
44
|
+
<!-- осознанно константный брендовый баннер: белое/тинты на цветном градиенте -->
|
|
45
|
+
<div class="relative overflow-hidden rounded-lg bg-linear-to-br from-brand-600/95 to-brand-500/85 p-3 text-white">
|
|
46
|
+
<div class="pointer-events-none absolute -right-8 -top-10 size-28 rounded-full bg-white/20 blur-2xl" aria-hidden="true" />
|
|
47
|
+
|
|
48
|
+
<div class="relative">
|
|
49
|
+
<p class="text-overline-medium uppercase text-white/70">
|
|
50
|
+
{{ t('header.profile.tariff') }}
|
|
51
|
+
</p>
|
|
52
|
+
<div class="mt-0.5 flex items-center justify-between gap-2">
|
|
53
|
+
<p class="truncate text-h4">
|
|
54
|
+
{{ rate }}
|
|
55
|
+
</p>
|
|
56
|
+
<span class="inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-body-sm-medium text-white ring-1 ring-inset ring-white/20">
|
|
57
|
+
<span class="relative flex size-1.5 items-center justify-center">
|
|
58
|
+
<span class="absolute inline-flex size-full animate-ping rounded-full bg-icon-success/80" />
|
|
59
|
+
<span class="relative inline-flex size-1.5 rounded-full bg-icon-success" />
|
|
60
|
+
</span>
|
|
61
|
+
{{ t('header.profile.connected') }}
|
|
62
|
+
</span>
|
|
63
|
+
</div>
|
|
64
|
+
|
|
65
|
+
<p
|
|
66
|
+
v-if="email"
|
|
67
|
+
class="mt-1 truncate text-body-sm text-white/75 lg:hidden"
|
|
68
|
+
data-test-id="profile-menu-email"
|
|
69
|
+
>
|
|
70
|
+
{{ email }}
|
|
71
|
+
</p>
|
|
72
|
+
|
|
73
|
+
<div class="my-2 h-px bg-white/15" />
|
|
74
|
+
|
|
75
|
+
<div class="flex items-center justify-between gap-2">
|
|
76
|
+
<span class="text-body-sm text-white/80">{{ t('header.profile.currentBalance') }}</span>
|
|
77
|
+
<span class="text-body-lg font-bold tabular-nums">{{ formattedBalance }} ₸</span>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<div class="mt-2 grid grid-cols-2 gap-2 lg:hidden">
|
|
81
|
+
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
82
|
+
<gauge class="size-4 shrink-0 text-white/80" />
|
|
83
|
+
<div class="min-w-0">
|
|
84
|
+
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
85
|
+
{{ t('header.profile.requests') }}
|
|
86
|
+
</p>
|
|
87
|
+
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
88
|
+
{{ limitRemaining }}
|
|
89
|
+
</p>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
93
|
+
<calendar class="size-4 shrink-0 text-white/80" />
|
|
94
|
+
<div class="min-w-0">
|
|
95
|
+
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
96
|
+
{{ t('header.profile.daysLeft') }}
|
|
97
|
+
</p>
|
|
98
|
+
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
99
|
+
{{ daysRemaining }}
|
|
100
|
+
</p>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<button
|
|
106
|
+
type="button"
|
|
107
|
+
class="mt-2.5 inline-flex h-8 w-full cursor-pointer items-center justify-center gap-1.5 rounded-full bg-white px-3 text-body-md-strong text-brand shadow-xs transition-all duration-150 hover:shadow-md focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-brand-500 active:scale-[0.98]"
|
|
108
|
+
@click="onReplenish"
|
|
109
|
+
>
|
|
110
|
+
<a-icon-plus-circle class="size-4" />
|
|
111
|
+
<span class="bg-linear-to-r from-brand-600 to-brand-500 bg-clip-text text-transparent">
|
|
112
|
+
{{ t('header.profile.addBalance') }}
|
|
113
|
+
</span>
|
|
114
|
+
</button>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<nav class="flex flex-col px-2 pb-2">
|
|
120
|
+
<nuxt-link-locale
|
|
121
|
+
v-for="item in items"
|
|
122
|
+
:key="item.title"
|
|
123
|
+
class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-action-secondary-hover"
|
|
124
|
+
:to="item.to"
|
|
125
|
+
:data-test-id="item?.dataTestId"
|
|
126
|
+
target="_blank"
|
|
127
|
+
>
|
|
128
|
+
<!-- <span -->
|
|
129
|
+
<!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-brand-100 bg-brand-subtle text-brand" -->
|
|
130
|
+
<!-- > -->
|
|
131
|
+
<!-- <component -->
|
|
132
|
+
<!-- :is="item.icon" -->
|
|
133
|
+
<!-- class="size-4" -->
|
|
134
|
+
<!-- /> -->
|
|
135
|
+
<!-- </span> -->
|
|
136
|
+
<span class="truncate text-primary group-hover:text-link-hover">
|
|
137
|
+
{{ item.title }}
|
|
138
|
+
</span>
|
|
139
|
+
</nuxt-link-locale>
|
|
140
|
+
</nav>
|
|
141
|
+
|
|
142
|
+
<div class="border-t border-default p-2">
|
|
143
|
+
<a-change-version
|
|
144
|
+
v-if="oldVersion"
|
|
145
|
+
:url="oldVersion"
|
|
146
|
+
class="mb-2"
|
|
147
|
+
/>
|
|
148
|
+
|
|
149
|
+
<div
|
|
150
|
+
v-if="!isLargeScreen"
|
|
151
|
+
class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-primary"
|
|
152
|
+
>
|
|
153
|
+
<span>{{ t('header.profile.colorScheme') }}</span>
|
|
154
|
+
<a-color-mode />
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<button
|
|
158
|
+
type="button"
|
|
159
|
+
class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-action-danger transition-colors hover:bg-danger-subtle"
|
|
160
|
+
data-test-id="logout-button"
|
|
161
|
+
@click="$emit('logout')"
|
|
162
|
+
>
|
|
163
|
+
<icon-logout class="size-4 shrink-0" />
|
|
164
|
+
<span>{{ t('header.profile.logout') }}</span>
|
|
165
|
+
</button>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</template>
|