adata-ui 2.1.40-beta.17 → 2.1.40-beta.19
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/.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 +3 -3
- package/README.md +75 -75
- package/app.config.ts +28 -28
- package/app.vue +8 -8
- package/assets/styles/index.scss +166 -166
- package/assets/styles/modules/_base.scss +5 -5
- package/assets/styles/modules/_typography.scss +152 -152
- package/components/elements/README.md +1 -1
- package/components/elements/a-select-row/ASelectRowV2.vue +214 -214
- package/components/elements/a-select-row/index.vue +138 -138
- 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 +188 -188
- package/components/elements/button/AButtonV2.vue +133 -114
- package/components/elements/button/types.ts +24 -24
- package/components/elements/button-login/index.vue +18 -18
- 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 +80 -80
- package/components/elements/chip-wrapper/types.ts +12 -12
- package/components/elements/chips/AChips.vue +32 -32
- package/components/elements/companies/AOurClients.vue +47 -45
- package/components/elements/curve-block/ACurveBlock.vue +292 -292
- package/components/elements/curve-block-v2/ACurveBlockV2.vue +85 -0
- package/components/elements/digit-badge/ADigitBadge.vue +85 -85
- package/components/elements/error-template/index.vue +48 -48
- package/components/elements/error-template/types.ts +23 -23
- package/components/elements/feature-description/AFeatureDescription.vue +112 -112
- package/components/elements/illustrations/noAccess.vue +71 -71
- package/components/elements/infinite-carousel/AInfiniteCarousel.vue +57 -57
- package/components/elements/infinite-scroll/AInfiniteScroll.vue +33 -33
- package/components/elements/leave-note/ALeaveNote.vue +99 -99
- package/components/elements/pagination/APagination.vue +110 -110
- package/components/elements/photos-animation/APhotosAnimation.vue +85 -85
- package/components/elements/segmented/ASegmentedV2.vue +151 -151
- package/components/elements/select/ASelect.vue +447 -447
- package/components/elements/select/ASelectMobile.vue +186 -186
- package/components/elements/select/ASelectV2.vue +588 -588
- 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 +174 -0
- package/components/elements/slider/ASliderItem.vue +31 -0
- package/components/elements/slider/types.ts +21 -0
- 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 +121 -105
- package/components/elements/step-slider/AStepSliderColCard.vue +232 -0
- package/components/elements/step-slider/AStepSliderColNumber.vue +178 -0
- 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 +96 -96
- 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 +104 -104
- package/components/features/payment/banner/PaymentBanner.vue +108 -108
- package/components/features/payment/banner/UpSellBanner.vue +125 -125
- package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +179 -179
- 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 +136 -136
- 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 +182 -0
- package/components/forms/input/AInputV2.vue +542 -542
- package/components/forms/input/button/AInputButton.vue +53 -53
- package/components/forms/input/date/AInputDate.vue +213 -213
- package/components/forms/input/password/AInputPassword.vue +59 -59
- package/components/forms/input/standard/AInputStandard.vue +415 -415
- package/components/forms/input/textarea/ATextarea.vue +203 -203
- package/components/forms/input/textarea/ATextareaV2.vue +248 -248
- package/components/forms/radio-button/ARadioButton.vue +95 -95
- package/components/forms/request-demo/ARequestDemo.vue +108 -108
- package/components/forms/toggle/AToggle.vue +156 -156
- package/components/forms/toggle/AToggleV2.vue +71 -71
- package/components/forms/toggle/types.ts +16 -16
- package/components/modals/AConfirmationEmail.vue +40 -40
- package/components/modals/AboutTariffModal.vue +114 -114
- package/components/modals/AnotherDeviceModal.vue +64 -64
- package/components/modals/ApplicationAcceptedModal.vue +44 -44
- package/components/modals/ConnectingTariffModal.vue +60 -60
- package/components/modals/ContactsMobileModel.vue +182 -182
- package/components/modals/ContentNavigationModal.vue +99 -99
- package/components/modals/Insufficient-funds-modal.vue +62 -62
- package/components/modals/LimitReachedModal.vue +33 -31
- package/components/modals/NoAccessModal.vue +35 -35
- 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 +92 -92
- package/components/modals/id/IdAutoLogoutModal.vue +45 -45
- package/components/modals/id/IdBanner.vue +61 -61
- package/components/modals/id/IdConfirmAccountOtpModal.vue +181 -181
- package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -41
- package/components/modals/id/IdLoginModal.vue +336 -336
- package/components/modals/id/IdModals.vue +127 -127
- 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 +158 -158
- package/components/modals/id/IdTwoFactorModal.vue +125 -125
- 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 +251 -251
- package/components/navigation/header/ContactMenu.vue +48 -48
- package/components/navigation/header/HeaderLink.vue +254 -254
- package/components/navigation/header/HeaderUsage.vue +139 -139
- package/components/navigation/header/ListItem.vue +31 -31
- package/components/navigation/header/NavCard.vue +41 -41
- package/components/navigation/header/NavList.vue +72 -72
- package/components/navigation/header/NotificationsMenu.vue +50 -50
- package/components/navigation/header/ProductMenu.vue +100 -100
- package/components/navigation/header/ProfileMenu.vue +167 -167
- package/components/navigation/header/SystemNotification.vue +108 -108
- package/components/navigation/header/types.ts +28 -28
- package/components/navigation/line-tabs/ALineTabs.vue +111 -111
- 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 +177 -177
- package/components/navigation/pill-tabs/APillTabsV2.vue +226 -154
- 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 +397 -397
- package/components/overlays/side-panel/ASidePanel.vue +442 -442
- package/components/overlays/sideover/ASlideover.vue +351 -351
- package/components/overlays/tooltip/ATooltip.vue +237 -237
- package/components/overlays/tooltip/ATooltipV2.vue +223 -223
- 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 +18 -18
- 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 +45 -45
- 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 -0
- 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/bill.vue +3 -0
- package/icons/block.vue +16 -16
- package/icons/bookmark/bookmark-filled.vue +18 -18
- package/icons/bookmark/bookmark.vue +5 -5
- package/icons/bot.vue +52 -52
- 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 -0
- 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 -0
- package/icons/chart-pie.vue +16 -16
- package/icons/check/check-circle.vue +6 -6
- 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.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-text.vue +7 -7
- 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 -0
- package/icons/code.vue +9 -0
- 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/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-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 -0
- package/icons/file/file-spreadsheet.vue +3 -0
- package/icons/file/file.vue +16 -16
- package/icons/file/files.vue +16 -16
- package/icons/file-pen.vue +31 -31
- package/icons/file-stack.vue +31 -31
- 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/gauge.vue +17 -17
- package/icons/gift.vue +8 -8
- package/icons/git-compare.vue +38 -38
- package/icons/git-fork.vue +3 -0
- 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 -0
- package/icons/help-question-circle.vue +26 -26
- package/icons/history.vue +5 -5
- 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 +7 -7
- package/icons/judge.vue +14 -14
- package/icons/kaspi-qr.vue +13 -13
- package/icons/landmark.vue +3 -0
- package/icons/layers.vue +3 -0
- package/icons/letter/letter-a.vue +6 -0
- package/icons/letter/letter-b.vue +6 -0
- package/icons/letter/letter-c.vue +6 -0
- package/icons/letter/letter-d.vue +6 -0
- package/icons/letter/letter-e.vue +6 -0
- package/icons/link-chain.vue +28 -28
- package/icons/link-url.vue +3 -0
- package/icons/link.vue +7 -7
- package/icons/linkedin.vue +24 -24
- package/icons/list-tree.vue +3 -0
- 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 -0
- 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 -0
- package/icons/message/message.vue +12 -12
- package/icons/message-dotted.vue +30 -30
- 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 -0
- package/icons/newspaper.vue +3 -0
- 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 -0
- package/icons/phone-filled.vue +5 -5
- package/icons/phone-reversed.vue +3 -0
- 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.vue +14 -14
- package/icons/route.vue +7 -0
- package/icons/sanctions.vue +8 -8
- 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 -0
- package/icons/search.vue +27 -27
- 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 -0
- package/icons/splitting-arrows.vue +8 -8
- package/icons/star/star-filled.vue +40 -40
- package/icons/star/star-half-filled.vue +20 -20
- package/icons/star/star.vue +25 -25
- package/icons/sun.vue +24 -24
- 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/toasts/check-circle-toast.vue +6 -6
- package/icons/toasts/warning-triangle-toast.vue +7 -7
- package/icons/trash.vue +13 -13
- 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-round.vue +3 -0
- 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/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 -0
- package/icons/x-mark.vue +15 -15
- package/icons/yandex.vue +28 -28
- package/icons/zap.vue +3 -0
- package/illustrations/address-location.vue +38 -38
- 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 +31 -31
- package/illustrations/delete.vue +32 -32
- package/illustrations/doc-with-stamp.vue +126 -126
- package/illustrations/document.vue +64 -64
- package/illustrations/door.vue +74 -74
- package/illustrations/empty-box.vue +77 -77
- package/illustrations/empty-wallet.vue +161 -161
- 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 +39 -39
- package/illustrations/mail.vue +68 -68
- package/illustrations/ok.vue +62 -62
- 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 +90 -90
- package/illustrations/phone-payment-method.vue +223 -223
- package/illustrations/search.vue +14 -14
- package/illustrations/stop-hand.vue +77 -77
- package/illustrations/stop-sign.vue +34 -34
- package/illustrations/suit.vue +111 -111
- package/illustrations/suitcase.vue +105 -105
- package/illustrations/terminal-dark.vue +48 -48
- package/illustrations/terminal.vue +234 -234
- package/illustrations/trash-can.vue +108 -108
- package/illustrations/turn-on-tariff.vue +38 -38
- package/illustrations/two-persons.vue +169 -169
- package/lang/en.ts +881 -878
- package/lang/kk.ts +883 -880
- package/lang/ru.ts +884 -881
- package/layouts/default.vue +13 -13
- package/nuxt.config.ts +88 -88
- package/package.json +69 -69
- 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/tailwind.config.ts +194 -194
- package/tests/AButton.test.ts +81 -81
- 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
- package/.claude/settings.local.json +0 -19
|
@@ -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-white p-4 dark:bg-gray-900">
|
|
18
|
-
<div class="flex items-center justify-between">
|
|
19
|
-
<h4 class="heading-04">Уведомления</h4>
|
|
20
|
-
<ADigitBadge :value="`${notifications?.length} новых`" size="lg" />
|
|
21
|
-
</div>
|
|
22
|
-
<hr class="border-deepblue-900/5 dark:border-gray-200/5" />
|
|
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-gray-50 px-4 py-2 dark:bg-gray-950"
|
|
29
|
-
>
|
|
30
|
-
<div class="rounded-full bg-blue-500 p-2">
|
|
31
|
-
<icon-user />
|
|
32
|
-
</div>
|
|
33
|
-
<div class="flex flex-col items-start gap-1 break-all">
|
|
34
|
-
<p class="body-s-400">
|
|
35
|
-
{{ notification.message + ' ' }}
|
|
36
|
-
<a class="link-s-400" href="#">{{ notification.email }}</a>
|
|
37
|
-
</p>
|
|
38
|
-
<p class="text-[12px] leading-4 dark:text-gray-300">{{ 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="body-400">Новых уведомлений нет</p>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
<hr class="border-deepblue-900/5 dark:border-gray-200/5" />
|
|
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-white p-4 dark:bg-gray-900">
|
|
18
|
+
<div class="flex items-center justify-between">
|
|
19
|
+
<h4 class="heading-04">Уведомления</h4>
|
|
20
|
+
<ADigitBadge :value="`${notifications?.length} новых`" size="lg" />
|
|
21
|
+
</div>
|
|
22
|
+
<hr class="border-deepblue-900/5 dark:border-gray-200/5" />
|
|
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-gray-50 px-4 py-2 dark:bg-gray-950"
|
|
29
|
+
>
|
|
30
|
+
<div class="rounded-full bg-blue-500 p-2">
|
|
31
|
+
<icon-user />
|
|
32
|
+
</div>
|
|
33
|
+
<div class="flex flex-col items-start gap-1 break-all">
|
|
34
|
+
<p class="body-s-400">
|
|
35
|
+
{{ notification.message + ' ' }}
|
|
36
|
+
<a class="link-s-400" href="#">{{ notification.email }}</a>
|
|
37
|
+
</p>
|
|
38
|
+
<p class="text-[12px] leading-4 dark:text-gray-300">{{ 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="body-400">Новых уведомлений нет</p>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<hr class="border-deepblue-900/5 dark:border-gray-200/5" />
|
|
48
|
+
<AButton block>Посмотреть все уведомления</AButton>
|
|
49
|
+
</div>
|
|
50
|
+
</template>
|
|
@@ -1,100 +1,100 @@
|
|
|
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-white dark:bg-gray-950">
|
|
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-gray-100 pl-3 dark:border-gray-800' : ''"
|
|
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
|
-
<div class="mt-4 flex flex-col gap-4 rounded-lg bg-blue-700 p-4 normal-case text-white dark:bg-blue-500">
|
|
66
|
-
<div class="flex items-center gap-3">
|
|
67
|
-
<span class="rounded-[10px] bg-white p-[10px] dark:bg-gray-950">
|
|
68
|
-
<a-icon-download-rounded class="size-5 text-blue-700 dark:text-blue-500" />
|
|
69
|
-
</span>
|
|
70
|
-
<span class="font-semibold text-white dark:text-gray-950">
|
|
71
|
-
{{ t('header.products.exportCard.title') }}
|
|
72
|
-
</span>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
<div class="text-xs text-white dark:text-gray-950">
|
|
76
|
-
{{ t('header.products.exportCard.subTitle') }}
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
<a-button-v2
|
|
80
|
-
view="soft"
|
|
81
|
-
class="!h-9 w-fit !bg-white text-blue-700 dark:!bg-gray-950 dark:text-blue-500"
|
|
82
|
-
size="sm"
|
|
83
|
-
:icon="AIconArrowRight"
|
|
84
|
-
icon-right
|
|
85
|
-
@click="handleExportClick"
|
|
86
|
-
>
|
|
87
|
-
<span class="text-sm">
|
|
88
|
-
{{ t('header.products.exportCard.receive') }}
|
|
89
|
-
</span>
|
|
90
|
-
</a-button-v2>
|
|
91
|
-
</div>
|
|
92
|
-
</template>
|
|
93
|
-
</nav-list>
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
</div>
|
|
98
|
-
</div>
|
|
99
|
-
</div>
|
|
100
|
-
</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-white dark:bg-gray-950">
|
|
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-gray-100 pl-3 dark:border-gray-800' : ''"
|
|
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
|
+
<div class="mt-4 flex flex-col gap-4 rounded-lg bg-blue-700 p-4 normal-case text-white dark:bg-blue-500">
|
|
66
|
+
<div class="flex items-center gap-3">
|
|
67
|
+
<span class="rounded-[10px] bg-white p-[10px] dark:bg-gray-950">
|
|
68
|
+
<a-icon-download-rounded class="size-5 text-blue-700 dark:text-blue-500" />
|
|
69
|
+
</span>
|
|
70
|
+
<span class="font-semibold text-white dark:text-gray-950">
|
|
71
|
+
{{ t('header.products.exportCard.title') }}
|
|
72
|
+
</span>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<div class="text-xs text-white dark:text-gray-950">
|
|
76
|
+
{{ t('header.products.exportCard.subTitle') }}
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<a-button-v2
|
|
80
|
+
view="soft"
|
|
81
|
+
class="!h-9 w-fit !bg-white text-blue-700 dark:!bg-gray-950 dark:text-blue-500"
|
|
82
|
+
size="sm"
|
|
83
|
+
:icon="AIconArrowRight"
|
|
84
|
+
icon-right
|
|
85
|
+
@click="handleExportClick"
|
|
86
|
+
>
|
|
87
|
+
<span class="text-sm">
|
|
88
|
+
{{ t('header.products.exportCard.receive') }}
|
|
89
|
+
</span>
|
|
90
|
+
</a-button-v2>
|
|
91
|
+
</div>
|
|
92
|
+
</template>
|
|
93
|
+
</nav-list>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</template>
|
|
@@ -1,167 +1,167 @@
|
|
|
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-white text-deepblue-900 dark:bg-gray-900 dark:text-gray-200 lg:w-[320px] lg:rounded-lg lg:border lg:border-gray-200 lg:dark:border-gray-800">
|
|
43
|
-
<div class="p-2">
|
|
44
|
-
<div class="relative overflow-hidden rounded-lg bg-gradient-to-br from-blue-700/95 to-blue-500/85 p-3 text-white">
|
|
45
|
-
<div class="pointer-events-none absolute -right-8 -top-10 size-28 rounded-full bg-white/20 blur-2xl" aria-hidden="true" />
|
|
46
|
-
|
|
47
|
-
<div class="relative">
|
|
48
|
-
<p class="text-overline-medium uppercase text-white/70">
|
|
49
|
-
{{ t('header.profile.tariff') }}
|
|
50
|
-
</p>
|
|
51
|
-
<div class="mt-0.5 flex items-center justify-between gap-2">
|
|
52
|
-
<p class="truncate text-h4">
|
|
53
|
-
{{ rate }}
|
|
54
|
-
</p>
|
|
55
|
-
<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">
|
|
56
|
-
<span class="relative flex size-1.5 items-center justify-center">
|
|
57
|
-
<span class="absolute inline-flex size-full animate-ping rounded-full bg-green-400/80" />
|
|
58
|
-
<span class="relative inline-flex size-1.5 rounded-full bg-green-400" />
|
|
59
|
-
</span>
|
|
60
|
-
{{ t('header.profile.connected') }}
|
|
61
|
-
</span>
|
|
62
|
-
</div>
|
|
63
|
-
|
|
64
|
-
<p
|
|
65
|
-
v-if="email"
|
|
66
|
-
class="mt-1 truncate text-body-sm text-white/75 lg:hidden"
|
|
67
|
-
data-test-id="profile-menu-email"
|
|
68
|
-
>
|
|
69
|
-
{{ email }}
|
|
70
|
-
</p>
|
|
71
|
-
|
|
72
|
-
<div class="my-2 h-px bg-white/15" />
|
|
73
|
-
|
|
74
|
-
<div class="flex items-center justify-between gap-2">
|
|
75
|
-
<span class="text-body-sm text-white/80">{{ t('header.profile.currentBalance') }}</span>
|
|
76
|
-
<span class="text-body-lg font-bold tabular-nums">{{ formattedBalance }} ₸</span>
|
|
77
|
-
</div>
|
|
78
|
-
|
|
79
|
-
<div class="mt-2 grid grid-cols-2 gap-2 lg:hidden">
|
|
80
|
-
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
81
|
-
<gauge class="size-4 shrink-0 text-white/80" />
|
|
82
|
-
<div class="min-w-0">
|
|
83
|
-
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
84
|
-
{{ t('header.profile.requests') }}
|
|
85
|
-
</p>
|
|
86
|
-
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
87
|
-
{{ limitRemaining }}
|
|
88
|
-
</p>
|
|
89
|
-
</div>
|
|
90
|
-
</div>
|
|
91
|
-
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
92
|
-
<calendar class="size-4 shrink-0 text-white/80" />
|
|
93
|
-
<div class="min-w-0">
|
|
94
|
-
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
95
|
-
{{ t('header.profile.daysLeft') }}
|
|
96
|
-
</p>
|
|
97
|
-
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
98
|
-
{{ daysRemaining }}
|
|
99
|
-
</p>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
|
|
104
|
-
<button
|
|
105
|
-
type="button"
|
|
106
|
-
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-blue-700 shadow-sm transition-all duration-150 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-blue-600 active:scale-[0.98]"
|
|
107
|
-
@click="onReplenish"
|
|
108
|
-
>
|
|
109
|
-
<a-icon-plus-circle class="size-4" />
|
|
110
|
-
<span class="bg-gradient-to-r from-blue-700 to-blue-500 bg-clip-text text-transparent">
|
|
111
|
-
{{ t('header.profile.addBalance') }}
|
|
112
|
-
</span>
|
|
113
|
-
</button>
|
|
114
|
-
</div>
|
|
115
|
-
</div>
|
|
116
|
-
</div>
|
|
117
|
-
|
|
118
|
-
<nav class="flex flex-col px-2 pb-2">
|
|
119
|
-
<nuxt-link-locale
|
|
120
|
-
v-for="item in items"
|
|
121
|
-
:key="item.title"
|
|
122
|
-
class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/60"
|
|
123
|
-
:to="item.to"
|
|
124
|
-
:data-test-id="item?.dataTestId"
|
|
125
|
-
target="_blank"
|
|
126
|
-
>
|
|
127
|
-
<!-- <span -->
|
|
128
|
-
<!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-blue-100 bg-blue-50 text-blue-700 dark:border-blue-900/40 dark:bg-blue-900/30 dark:text-blue-400" -->
|
|
129
|
-
<!-- > -->
|
|
130
|
-
<!-- <component -->
|
|
131
|
-
<!-- :is="item.icon" -->
|
|
132
|
-
<!-- class="size-4" -->
|
|
133
|
-
<!-- /> -->
|
|
134
|
-
<!-- </span> -->
|
|
135
|
-
<span class="truncate text-deepblue-900 group-hover:text-blue-700 dark:text-gray-200 dark:group-hover:text-blue-400">
|
|
136
|
-
{{ item.title }}
|
|
137
|
-
</span>
|
|
138
|
-
</nuxt-link-locale>
|
|
139
|
-
</nav>
|
|
140
|
-
|
|
141
|
-
<div class="border-t border-gray-100 p-2 dark:border-gray-800">
|
|
142
|
-
<a-change-version
|
|
143
|
-
v-if="oldVersion"
|
|
144
|
-
:url="oldVersion"
|
|
145
|
-
class="mb-2"
|
|
146
|
-
/>
|
|
147
|
-
|
|
148
|
-
<div
|
|
149
|
-
v-if="!isLargeScreen"
|
|
150
|
-
class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-deepblue-900 dark:text-gray-200"
|
|
151
|
-
>
|
|
152
|
-
<span>{{ t('header.profile.colorScheme') }}</span>
|
|
153
|
-
<a-color-mode />
|
|
154
|
-
</div>
|
|
155
|
-
|
|
156
|
-
<button
|
|
157
|
-
type="button"
|
|
158
|
-
class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-red-600 transition-colors hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"
|
|
159
|
-
data-test-id="logout-button"
|
|
160
|
-
@click="$emit('logout')"
|
|
161
|
-
>
|
|
162
|
-
<icon-logout class="size-4 shrink-0" />
|
|
163
|
-
<span>{{ t('header.profile.logout') }}</span>
|
|
164
|
-
</button>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
</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-white text-deepblue-900 dark:bg-gray-900 dark:text-gray-200 lg:w-[320px] lg:rounded-lg lg:border lg:border-gray-200 lg:dark:border-gray-800">
|
|
43
|
+
<div class="p-2">
|
|
44
|
+
<div class="relative overflow-hidden rounded-lg bg-gradient-to-br from-blue-700/95 to-blue-500/85 p-3 text-white">
|
|
45
|
+
<div class="pointer-events-none absolute -right-8 -top-10 size-28 rounded-full bg-white/20 blur-2xl" aria-hidden="true" />
|
|
46
|
+
|
|
47
|
+
<div class="relative">
|
|
48
|
+
<p class="text-overline-medium uppercase text-white/70">
|
|
49
|
+
{{ t('header.profile.tariff') }}
|
|
50
|
+
</p>
|
|
51
|
+
<div class="mt-0.5 flex items-center justify-between gap-2">
|
|
52
|
+
<p class="truncate text-h4">
|
|
53
|
+
{{ rate }}
|
|
54
|
+
</p>
|
|
55
|
+
<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">
|
|
56
|
+
<span class="relative flex size-1.5 items-center justify-center">
|
|
57
|
+
<span class="absolute inline-flex size-full animate-ping rounded-full bg-green-400/80" />
|
|
58
|
+
<span class="relative inline-flex size-1.5 rounded-full bg-green-400" />
|
|
59
|
+
</span>
|
|
60
|
+
{{ t('header.profile.connected') }}
|
|
61
|
+
</span>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<p
|
|
65
|
+
v-if="email"
|
|
66
|
+
class="mt-1 truncate text-body-sm text-white/75 lg:hidden"
|
|
67
|
+
data-test-id="profile-menu-email"
|
|
68
|
+
>
|
|
69
|
+
{{ email }}
|
|
70
|
+
</p>
|
|
71
|
+
|
|
72
|
+
<div class="my-2 h-px bg-white/15" />
|
|
73
|
+
|
|
74
|
+
<div class="flex items-center justify-between gap-2">
|
|
75
|
+
<span class="text-body-sm text-white/80">{{ t('header.profile.currentBalance') }}</span>
|
|
76
|
+
<span class="text-body-lg font-bold tabular-nums">{{ formattedBalance }} ₸</span>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<div class="mt-2 grid grid-cols-2 gap-2 lg:hidden">
|
|
80
|
+
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
81
|
+
<gauge class="size-4 shrink-0 text-white/80" />
|
|
82
|
+
<div class="min-w-0">
|
|
83
|
+
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
84
|
+
{{ t('header.profile.requests') }}
|
|
85
|
+
</p>
|
|
86
|
+
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
87
|
+
{{ limitRemaining }}
|
|
88
|
+
</p>
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="flex items-center gap-2 rounded-md px-2 py-1.5 ring-1 ring-inset ring-white/15">
|
|
92
|
+
<calendar class="size-4 shrink-0 text-white/80" />
|
|
93
|
+
<div class="min-w-0">
|
|
94
|
+
<p class="truncate text-body-sm uppercase leading-none text-white/70">
|
|
95
|
+
{{ t('header.profile.daysLeft') }}
|
|
96
|
+
</p>
|
|
97
|
+
<p class="mt-1 text-body-md font-bold tabular-nums leading-none">
|
|
98
|
+
{{ daysRemaining }}
|
|
99
|
+
</p>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<button
|
|
105
|
+
type="button"
|
|
106
|
+
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-blue-700 shadow-sm transition-all duration-150 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-blue-600 active:scale-[0.98]"
|
|
107
|
+
@click="onReplenish"
|
|
108
|
+
>
|
|
109
|
+
<a-icon-plus-circle class="size-4" />
|
|
110
|
+
<span class="bg-gradient-to-r from-blue-700 to-blue-500 bg-clip-text text-transparent">
|
|
111
|
+
{{ t('header.profile.addBalance') }}
|
|
112
|
+
</span>
|
|
113
|
+
</button>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
|
|
118
|
+
<nav class="flex flex-col px-2 pb-2">
|
|
119
|
+
<nuxt-link-locale
|
|
120
|
+
v-for="item in items"
|
|
121
|
+
:key="item.title"
|
|
122
|
+
class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/60"
|
|
123
|
+
:to="item.to"
|
|
124
|
+
:data-test-id="item?.dataTestId"
|
|
125
|
+
target="_blank"
|
|
126
|
+
>
|
|
127
|
+
<!-- <span -->
|
|
128
|
+
<!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-blue-100 bg-blue-50 text-blue-700 dark:border-blue-900/40 dark:bg-blue-900/30 dark:text-blue-400" -->
|
|
129
|
+
<!-- > -->
|
|
130
|
+
<!-- <component -->
|
|
131
|
+
<!-- :is="item.icon" -->
|
|
132
|
+
<!-- class="size-4" -->
|
|
133
|
+
<!-- /> -->
|
|
134
|
+
<!-- </span> -->
|
|
135
|
+
<span class="truncate text-deepblue-900 group-hover:text-blue-700 dark:text-gray-200 dark:group-hover:text-blue-400">
|
|
136
|
+
{{ item.title }}
|
|
137
|
+
</span>
|
|
138
|
+
</nuxt-link-locale>
|
|
139
|
+
</nav>
|
|
140
|
+
|
|
141
|
+
<div class="border-t border-gray-100 p-2 dark:border-gray-800">
|
|
142
|
+
<a-change-version
|
|
143
|
+
v-if="oldVersion"
|
|
144
|
+
:url="oldVersion"
|
|
145
|
+
class="mb-2"
|
|
146
|
+
/>
|
|
147
|
+
|
|
148
|
+
<div
|
|
149
|
+
v-if="!isLargeScreen"
|
|
150
|
+
class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-deepblue-900 dark:text-gray-200"
|
|
151
|
+
>
|
|
152
|
+
<span>{{ t('header.profile.colorScheme') }}</span>
|
|
153
|
+
<a-color-mode />
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<button
|
|
157
|
+
type="button"
|
|
158
|
+
class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-red-600 transition-colors hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"
|
|
159
|
+
data-test-id="logout-button"
|
|
160
|
+
@click="$emit('logout')"
|
|
161
|
+
>
|
|
162
|
+
<icon-logout class="size-4 shrink-0" />
|
|
163
|
+
<span>{{ t('header.profile.logout') }}</span>
|
|
164
|
+
</button>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</template>
|