adata-ui 2.1.40-beta.2 → 2.1.40-beta.20
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 -104
- 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 -213
- package/components/elements/a-select-row/index.vue +138 -140
- package/components/elements/accordion/AAccordion.vue +199 -197
- 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 -65
- 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 -89
- 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 -83
- 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 +102 -78
- package/components/elements/pagination/APagination.vue +110 -110
- package/components/elements/photos-animation/APhotosAnimation.vue +85 -85
- package/components/elements/segmented/ASegmentedV2.vue +151 -58
- package/components/elements/select/ASelect.vue +447 -447
- package/components/elements/select/ASelectMobile.vue +186 -186
- package/components/elements/select/ASelectV2.vue +588 -581
- 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 -181
- 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 -74
- 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 -173
- package/components/elements/tree-select/TreeService.ts +184 -249
- package/components/elements/tree-select/components/ATreeSelectNode.vue +104 -0
- package/components/elements/tree-select/types.ts +63 -34
- package/components/elements/tree-select/utils.ts +30 -0
- 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 -0
- 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 -141
- package/components/features/go-top/GoTop.vue +63 -63
- package/components/features/lang-switcher/lang-switcher.vue +158 -153
- 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 -161
- package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +123 -112
- package/components/features/payment/process/PaymentMethodSidePanel.vue +138 -121
- package/components/features/payment/process/PaymentProcess.vue +158 -158
- package/components/features/payment/process/PaymentTopUpSidePanel.vue +119 -133
- 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 -53
- 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 -0
- 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 -157
- 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 -60
- package/components/modals/ApplicationAcceptedModal.vue +44 -47
- package/components/modals/ConnectingTariffModal.vue +60 -67
- package/components/modals/ContactsMobileModel.vue +182 -182
- package/components/modals/ContentNavigationModal.vue +99 -355
- package/components/modals/Insufficient-funds-modal.vue +62 -77
- package/components/modals/LimitReachedModal.vue +33 -30
- package/components/modals/NoAccessModal.vue +35 -37
- 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 -30
- package/components/modals/ReportBugModal.vue +172 -164
- package/components/modals/Resend.vue +81 -82
- package/components/modals/SubmitApplicationModal.vue +126 -123
- 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 -186
- package/components/modals/id/IdConfirmSuccessfulModal.vue +41 -41
- package/components/modals/id/IdLoginModal.vue +336 -341
- package/components/modals/id/IdModals.vue +127 -114
- 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 -130
- package/components/navigation/README.md +1 -1
- package/components/navigation/bottom-navigation/ABottomNavigation.vue +106 -106
- package/components/navigation/breadcrumbs/ABreadcrumbs.vue +128 -67
- package/components/navigation/breadcrumbs/types.ts +8 -5
- package/components/navigation/footer/AFooter.vue +283 -284
- package/components/navigation/footer/ui/a-footer-accordion.vue +118 -118
- package/components/navigation/header/AHeader.vue +237 -243
- 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 +250 -260
- package/components/navigation/header/HeaderUsage.vue +139 -125
- package/components/navigation/header/ListItem.vue +31 -31
- package/components/navigation/header/NavCard.vue +41 -41
- package/components/navigation/header/NavList.vue +72 -96
- package/components/navigation/header/NotificationsMenu.vue +50 -51
- package/components/navigation/header/ProductMenu.vue +100 -98
- package/components/navigation/header/ProfileMenu.vue +167 -176
- package/components/navigation/header/SystemNotification.vue +108 -110
- 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 -118
- 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 -0
- package/components/overlays/modal/AModal.vue +335 -335
- package/components/overlays/modal/AModalV2.vue +397 -388
- package/components/overlays/side-panel/ASidePanel.vue +445 -439
- package/components/overlays/sideover/ASlideover.vue +351 -351
- package/components/overlays/tooltip/ATooltip.vue +237 -237
- package/components/overlays/tooltip/ATooltipV2.vue +226 -233
- 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 -0
- 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 -82
- package/composables/useHeaderNavigationLinks.ts +519 -477
- 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 -0
- 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 -0
- 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 -0
- package/icons/arrow/arrows-out.vue +11 -0
- package/icons/arrow/arrows-resize-in.vue +38 -0
- package/icons/arrow/arrows-resize-out.vue +17 -0
- 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 -0
- package/icons/briefcase.vue +14 -0
- 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 -0
- package/icons/car.vue +7 -7
- package/icons/cart.vue +15 -0
- 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 -0
- 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 -0
- 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 -0
- package/icons/download-line.vue +13 -0
- package/icons/download-rounded.vue +15 -0
- 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 -0
- package/icons/elicense.vue +38 -0
- 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 -0
- 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 -0
- package/icons/file-stack.vue +31 -0
- package/icons/file-types/excel.vue +131 -0
- package/icons/file-types/html.vue +13 -0
- package/icons/file-types/jpeg.vue +16 -0
- package/icons/file-types/pdf.vue +11 -0
- package/icons/file-types/png.vue +11 -0
- package/icons/file-types/rar.vue +11 -0
- package/icons/file-types/word.vue +50 -0
- package/icons/file-types/zip.vue +11 -0
- 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 -0
- 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 -0
- package/icons/graph-loading.vue +34 -0
- 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 -0
- 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 -0
- package/icons/in-table-type.vue +29 -0
- 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 -0
- 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 -0
- 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 -0
- 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 -0
- package/icons/share/share-alt.vue +5 -5
- package/icons/share/share.vue +14 -14
- package/icons/shield-alert.vue +31 -0
- package/icons/shield-verified.vue +14 -0
- package/icons/ship.vue +8 -8
- package/icons/socials/face-book.vue +15 -15
- package/icons/socials/facebook-color.vue +16 -0
- package/icons/socials/globe-color.vue +16 -0
- package/icons/socials/instagram-color.vue +46 -0
- package/icons/socials/instagram.vue +19 -19
- package/icons/socials/linkedin-color.vue +14 -0
- package/icons/socials/telegram-color.vue +16 -0
- package/icons/socials/telegram.vue +15 -15
- package/icons/socials/tik-tok.vue +15 -15
- package/icons/socials/tiktok-color.vue +14 -0
- package/icons/socials/vk-color.vue +16 -0
- package/icons/socials/youtube-color.vue +16 -0
- 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 -0
- 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 -843
- package/lang/kk.ts +883 -845
- package/lang/ru.ts +884 -846
- 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 -58
- package/public/kaspi/logo.svg +4 -4
- package/shared/constans/pages.ts +96 -90
- package/tailwind.config.ts +194 -163
- 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 -0
- package/vitest.config.ts +14 -14
- package/components/elements/tree-select/components/tree-select-nodes.vue +0 -91
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
import type { Ref } from 'vue'
|
|
2
|
-
import type { TooltipTrigger } from './types'
|
|
3
|
-
import { computed, watch } from 'vue'
|
|
4
|
-
|
|
5
|
-
interface UseTooltipTriggerOptions {
|
|
6
|
-
/** Visibility ref (the component's `v-model:open`). Mutated here. */
|
|
7
|
-
open: Ref<boolean>
|
|
8
|
-
trigger: Ref<TooltipTrigger>
|
|
9
|
-
disabled: Ref<boolean>
|
|
10
|
-
openDelay: Ref<number>
|
|
11
|
-
closeDelay: Ref<number>
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Owns the open/close state machine for {@link ATooltipV2}: debounced show/hide
|
|
16
|
-
* and the per-mode DOM listeners. Kept separate from the SFC so each trigger
|
|
17
|
-
* style (hover/focus, click, manual) stays small and independently testable.
|
|
18
|
-
*/
|
|
19
|
-
export function useTooltipTrigger(options: UseTooltipTriggerOptions) {
|
|
20
|
-
const { open, trigger, disabled, openDelay, closeDelay } = options
|
|
21
|
-
|
|
22
|
-
let openTimer: ReturnType<typeof setTimeout> | null = null
|
|
23
|
-
let closeTimer: ReturnType<typeof setTimeout> | null = null
|
|
24
|
-
|
|
25
|
-
function clearOpenTimer() {
|
|
26
|
-
if (openTimer) {
|
|
27
|
-
clearTimeout(openTimer)
|
|
28
|
-
openTimer = null
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function clearCloseTimer() {
|
|
33
|
-
if (closeTimer) {
|
|
34
|
-
clearTimeout(closeTimer)
|
|
35
|
-
closeTimer = null
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function clearTimers() {
|
|
40
|
-
clearOpenTimer()
|
|
41
|
-
clearCloseTimer()
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
function show() {
|
|
45
|
-
if (disabled.value || open.value) return
|
|
46
|
-
clearCloseTimer()
|
|
47
|
-
if (openDelay.value > 0) {
|
|
48
|
-
openTimer = setTimeout(() => {
|
|
49
|
-
open.value = true
|
|
50
|
-
openTimer = null
|
|
51
|
-
}, openDelay.value)
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
open.value = true
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function hide() {
|
|
59
|
-
clearOpenTimer()
|
|
60
|
-
if (!open.value) return
|
|
61
|
-
if (closeDelay.value > 0) {
|
|
62
|
-
closeTimer = setTimeout(() => {
|
|
63
|
-
open.value = false
|
|
64
|
-
closeTimer = null
|
|
65
|
-
}, closeDelay.value)
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
open.value = false
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
function toggle() {
|
|
73
|
-
if (open.value) hide()
|
|
74
|
-
else show()
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function close() {
|
|
78
|
-
clearTimers()
|
|
79
|
-
open.value = false
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Force-close if disabled while visible.
|
|
83
|
-
watch(disabled, (value) => {
|
|
84
|
-
if (value) close()
|
|
85
|
-
})
|
|
86
|
-
|
|
87
|
-
// Listeners bound on the trigger wrapper via `v-on`, selected by mode.
|
|
88
|
-
const listeners = computed<Record<string, () => void>>(() => {
|
|
89
|
-
if (disabled.value) return {}
|
|
90
|
-
switch (trigger.value) {
|
|
91
|
-
case 'hover':
|
|
92
|
-
return { mouseenter: show, mouseleave: hide, focusin: show, focusout: hide }
|
|
93
|
-
case 'click':
|
|
94
|
-
return { click: toggle }
|
|
95
|
-
default:
|
|
96
|
-
return {}
|
|
97
|
-
}
|
|
98
|
-
})
|
|
99
|
-
|
|
100
|
-
return { show, hide, toggle, close, clearTimers, listeners }
|
|
101
|
-
}
|
|
1
|
+
import type { Ref } from 'vue'
|
|
2
|
+
import type { TooltipTrigger } from './types'
|
|
3
|
+
import { computed, watch } from 'vue'
|
|
4
|
+
|
|
5
|
+
interface UseTooltipTriggerOptions {
|
|
6
|
+
/** Visibility ref (the component's `v-model:open`). Mutated here. */
|
|
7
|
+
open: Ref<boolean>
|
|
8
|
+
trigger: Ref<TooltipTrigger>
|
|
9
|
+
disabled: Ref<boolean>
|
|
10
|
+
openDelay: Ref<number>
|
|
11
|
+
closeDelay: Ref<number>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Owns the open/close state machine for {@link ATooltipV2}: debounced show/hide
|
|
16
|
+
* and the per-mode DOM listeners. Kept separate from the SFC so each trigger
|
|
17
|
+
* style (hover/focus, click, manual) stays small and independently testable.
|
|
18
|
+
*/
|
|
19
|
+
export function useTooltipTrigger(options: UseTooltipTriggerOptions) {
|
|
20
|
+
const { open, trigger, disabled, openDelay, closeDelay } = options
|
|
21
|
+
|
|
22
|
+
let openTimer: ReturnType<typeof setTimeout> | null = null
|
|
23
|
+
let closeTimer: ReturnType<typeof setTimeout> | null = null
|
|
24
|
+
|
|
25
|
+
function clearOpenTimer() {
|
|
26
|
+
if (openTimer) {
|
|
27
|
+
clearTimeout(openTimer)
|
|
28
|
+
openTimer = null
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function clearCloseTimer() {
|
|
33
|
+
if (closeTimer) {
|
|
34
|
+
clearTimeout(closeTimer)
|
|
35
|
+
closeTimer = null
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function clearTimers() {
|
|
40
|
+
clearOpenTimer()
|
|
41
|
+
clearCloseTimer()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function show() {
|
|
45
|
+
if (disabled.value || open.value) return
|
|
46
|
+
clearCloseTimer()
|
|
47
|
+
if (openDelay.value > 0) {
|
|
48
|
+
openTimer = setTimeout(() => {
|
|
49
|
+
open.value = true
|
|
50
|
+
openTimer = null
|
|
51
|
+
}, openDelay.value)
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
open.value = true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function hide() {
|
|
59
|
+
clearOpenTimer()
|
|
60
|
+
if (!open.value) return
|
|
61
|
+
if (closeDelay.value > 0) {
|
|
62
|
+
closeTimer = setTimeout(() => {
|
|
63
|
+
open.value = false
|
|
64
|
+
closeTimer = null
|
|
65
|
+
}, closeDelay.value)
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
open.value = false
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function toggle() {
|
|
73
|
+
if (open.value) hide()
|
|
74
|
+
else show()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function close() {
|
|
78
|
+
clearTimers()
|
|
79
|
+
open.value = false
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Force-close if disabled while visible.
|
|
83
|
+
watch(disabled, (value) => {
|
|
84
|
+
if (value) close()
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
// Listeners bound on the trigger wrapper via `v-on`, selected by mode.
|
|
88
|
+
const listeners = computed<Record<string, () => void>>(() => {
|
|
89
|
+
if (disabled.value) return {}
|
|
90
|
+
switch (trigger.value) {
|
|
91
|
+
case 'hover':
|
|
92
|
+
return { mouseenter: show, mouseleave: hide, focusin: show, focusout: hide }
|
|
93
|
+
case 'click':
|
|
94
|
+
return { click: toggle }
|
|
95
|
+
default:
|
|
96
|
+
return {}
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
return { show, hide, toggle, close, clearTimers, listeners }
|
|
101
|
+
}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import ui from "#adata-ui/components/elements/accordion/AAccordionGroup/ui.config";
|
|
3
|
-
import { twMerge } from '
|
|
4
|
-
|
|
5
|
-
const props = defineProps<{
|
|
6
|
-
transition?: {
|
|
7
|
-
enterActiveClass?: string
|
|
8
|
-
leaveActiveClass?: string
|
|
9
|
-
}
|
|
10
|
-
}>()
|
|
11
|
-
|
|
12
|
-
const mergedUi = computed(() => ({
|
|
13
|
-
transition: {
|
|
14
|
-
enterActiveClass: twMerge(
|
|
15
|
-
ui.transition.enterActiveClass,
|
|
16
|
-
props.transition?.enterActiveClass
|
|
17
|
-
),
|
|
18
|
-
leaveActiveClass: twMerge(
|
|
19
|
-
ui.transition.leaveActiveClass,
|
|
20
|
-
props.transition?.leaveActiveClass
|
|
21
|
-
)
|
|
22
|
-
}
|
|
23
|
-
}))
|
|
24
|
-
|
|
25
|
-
function onEnter(_el: Element, done: () => void) {
|
|
26
|
-
const el = _el as HTMLElement
|
|
27
|
-
el.style.height = '0'
|
|
28
|
-
el.offsetHeight // Trigger a reflow, flushing the CSS changes
|
|
29
|
-
el.style.height = el.scrollHeight + 'px'
|
|
30
|
-
|
|
31
|
-
el.addEventListener('transitionend', done, {once: true})
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function onBeforeLeave(_el: Element) {
|
|
35
|
-
const el = _el as HTMLElement
|
|
36
|
-
el.style.height = el.scrollHeight + 'px'
|
|
37
|
-
el.offsetHeight // Trigger a reflow, flushing the CSS changes
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function onAfterEnter(_el: Element) {
|
|
41
|
-
const el = _el as HTMLElement
|
|
42
|
-
el.style.height = 'auto'
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function onLeave(_el: Element, done: () => void) {
|
|
46
|
-
const el = _el as HTMLElement
|
|
47
|
-
el.style.height = '0'
|
|
48
|
-
|
|
49
|
-
el.addEventListener('transitionend', done, {once: true})
|
|
50
|
-
}
|
|
51
|
-
</script>
|
|
52
|
-
|
|
53
|
-
<template>
|
|
54
|
-
<Transition
|
|
55
|
-
v-bind="mergedUi.transition"
|
|
56
|
-
@enter="onEnter"
|
|
57
|
-
@after-enter="onAfterEnter"
|
|
58
|
-
@before-leave="onBeforeLeave"
|
|
59
|
-
@leave="onLeave"
|
|
60
|
-
>
|
|
61
|
-
<slot/>
|
|
62
|
-
</Transition>
|
|
63
|
-
</template>
|
|
64
|
-
|
|
65
|
-
<style scoped>
|
|
66
|
-
|
|
67
|
-
</style>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import ui from "#adata-ui/components/elements/accordion/AAccordionGroup/ui.config";
|
|
3
|
+
import { twMerge } from '#adata-ui/utils/twMerge'
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
transition?: {
|
|
7
|
+
enterActiveClass?: string
|
|
8
|
+
leaveActiveClass?: string
|
|
9
|
+
}
|
|
10
|
+
}>()
|
|
11
|
+
|
|
12
|
+
const mergedUi = computed(() => ({
|
|
13
|
+
transition: {
|
|
14
|
+
enterActiveClass: twMerge(
|
|
15
|
+
ui.transition.enterActiveClass,
|
|
16
|
+
props.transition?.enterActiveClass
|
|
17
|
+
),
|
|
18
|
+
leaveActiveClass: twMerge(
|
|
19
|
+
ui.transition.leaveActiveClass,
|
|
20
|
+
props.transition?.leaveActiveClass
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
}))
|
|
24
|
+
|
|
25
|
+
function onEnter(_el: Element, done: () => void) {
|
|
26
|
+
const el = _el as HTMLElement
|
|
27
|
+
el.style.height = '0'
|
|
28
|
+
el.offsetHeight // Trigger a reflow, flushing the CSS changes
|
|
29
|
+
el.style.height = el.scrollHeight + 'px'
|
|
30
|
+
|
|
31
|
+
el.addEventListener('transitionend', done, {once: true})
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function onBeforeLeave(_el: Element) {
|
|
35
|
+
const el = _el as HTMLElement
|
|
36
|
+
el.style.height = el.scrollHeight + 'px'
|
|
37
|
+
el.offsetHeight // Trigger a reflow, flushing the CSS changes
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function onAfterEnter(_el: Element) {
|
|
41
|
+
const el = _el as HTMLElement
|
|
42
|
+
el.style.height = 'auto'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function onLeave(_el: Element, done: () => void) {
|
|
46
|
+
const el = _el as HTMLElement
|
|
47
|
+
el.style.height = '0'
|
|
48
|
+
|
|
49
|
+
el.addEventListener('transitionend', done, {once: true})
|
|
50
|
+
}
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<template>
|
|
54
|
+
<Transition
|
|
55
|
+
v-bind="mergedUi.transition"
|
|
56
|
+
@enter="onEnter"
|
|
57
|
+
@after-enter="onAfterEnter"
|
|
58
|
+
@before-leave="onBeforeLeave"
|
|
59
|
+
@leave="onLeave"
|
|
60
|
+
>
|
|
61
|
+
<slot/>
|
|
62
|
+
</Transition>
|
|
63
|
+
</template>
|
|
64
|
+
|
|
65
|
+
<style scoped>
|
|
66
|
+
|
|
67
|
+
</style>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
export function mergeConfig<T>(defaultUi: T, config: Partial<T>): T {
|
|
2
|
-
const mergedUi = {...defaultUi};
|
|
3
|
-
|
|
4
|
-
for (const key in config) {
|
|
5
|
-
if (Object.prototype.hasOwnProperty.call(config, key)) {
|
|
6
|
-
const defaultValue = defaultUi[key];
|
|
7
|
-
const configValue = config[key];
|
|
8
|
-
if (typeof defaultValue === 'object' && typeof configValue === 'object' && defaultValue !== null && configValue !== null) {
|
|
9
|
-
mergedUi[key] = mergeConfig(defaultValue, configValue);
|
|
10
|
-
} else if (typeof configValue === 'string') {
|
|
11
|
-
mergedUi[key] = `${defaultValue} ${configValue}`;
|
|
12
|
-
} else {
|
|
13
|
-
mergedUi[key] = configValue;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return mergedUi as T;
|
|
19
|
-
}
|
|
1
|
+
export function mergeConfig<T>(defaultUi: T, config: Partial<T>): T {
|
|
2
|
+
const mergedUi = {...defaultUi};
|
|
3
|
+
|
|
4
|
+
for (const key in config) {
|
|
5
|
+
if (Object.prototype.hasOwnProperty.call(config, key)) {
|
|
6
|
+
const defaultValue = defaultUi[key];
|
|
7
|
+
const configValue = config[key];
|
|
8
|
+
if (typeof defaultValue === 'object' && typeof configValue === 'object' && defaultValue !== null && configValue !== null) {
|
|
9
|
+
mergedUi[key] = mergeConfig(defaultValue, configValue);
|
|
10
|
+
} else if (typeof configValue === 'string') {
|
|
11
|
+
mergedUi[key] = `${defaultValue} ${configValue}`;
|
|
12
|
+
} else {
|
|
13
|
+
mergedUi[key] = configValue;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return mergedUi as T;
|
|
19
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export function removeTrailingSlash(str: string): string {
|
|
2
|
-
if (str.endsWith('/')) {
|
|
3
|
-
return str.slice(0, -1)
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
return str
|
|
7
|
-
}
|
|
1
|
+
export function removeTrailingSlash(str: string): string {
|
|
2
|
+
if (str.endsWith('/')) {
|
|
3
|
+
return str.slice(0, -1)
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
return str
|
|
7
|
+
}
|
package/composables/highlight.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
export default function (text: string, search = ""): string {
|
|
2
|
-
let label: string = text || ""
|
|
3
|
-
|
|
4
|
-
const index: number = label.toLowerCase().indexOf(search?.toLowerCase())
|
|
5
|
-
const regExp = new RegExp(search, "gi")
|
|
6
|
-
|
|
7
|
-
if (index >= 0) {
|
|
8
|
-
label = label.replace(
|
|
9
|
-
regExp,
|
|
10
|
-
`<span class="bg-yellow-200 dark:text-gray-950 dark:bg-yellow-300">${label.substring(
|
|
11
|
-
index,
|
|
12
|
-
index + search.length
|
|
13
|
-
)}</span>`
|
|
14
|
-
)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
return label
|
|
18
|
-
}
|
|
1
|
+
export default function (text: string, search = ""): string {
|
|
2
|
+
let label: string = text || ""
|
|
3
|
+
|
|
4
|
+
const index: number = label.toLowerCase().indexOf(search?.toLowerCase())
|
|
5
|
+
const regExp = new RegExp(search, "gi")
|
|
6
|
+
|
|
7
|
+
if (index >= 0) {
|
|
8
|
+
label = label.replace(
|
|
9
|
+
regExp,
|
|
10
|
+
`<span class="bg-yellow-200 dark:text-gray-950 dark:bg-yellow-300">${label.substring(
|
|
11
|
+
index,
|
|
12
|
+
index + search.length
|
|
13
|
+
)}</span>`
|
|
14
|
+
)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return label
|
|
18
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export const useAuthModal = () => useState<boolean>('auth-modal', () => false)
|
|
2
|
-
export const useAnotherDeviceModal = () => useState<boolean>('another-device-modal', () => false)
|
|
3
|
-
|
|
4
|
-
export const useLimitReachedModal = () => useState<boolean>('limit-reached-modal', () => false)
|
|
5
|
-
export const usePaymentMethodModal = () => useState<boolean>('payment-method-modal', () => false)
|
|
6
|
-
export const useReplenishModal = () => useState<boolean>('replenish-modal', () => false)
|
|
7
|
-
export const useLowBalanceModal = () => useState<boolean>('low-balance-modal', () => false)
|
|
8
|
-
export const useNoAccessModal = () => useState<boolean>('no-access-modal', () => false)
|
|
1
|
+
export const useAuthModal = () => useState<boolean>('auth-modal', () => false)
|
|
2
|
+
export const useAnotherDeviceModal = () => useState<boolean>('another-device-modal', () => false)
|
|
3
|
+
|
|
4
|
+
export const useLimitReachedModal = () => useState<boolean>('limit-reached-modal', () => false)
|
|
5
|
+
export const usePaymentMethodModal = () => useState<boolean>('payment-method-modal', () => false)
|
|
6
|
+
export const useReplenishModal = () => useState<boolean>('replenish-modal', () => false)
|
|
7
|
+
export const useLowBalanceModal = () => useState<boolean>('low-balance-modal', () => false)
|
|
8
|
+
export const useNoAccessModal = () => useState<boolean>('no-access-modal', () => false)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const useCurrentModule = () => useState<string>('current-module', () => 'pk')
|
|
2
|
-
export const useContacts = () => useState<any>('contacts', () => [])
|
|
1
|
+
export const useCurrentModule = () => useState<string>('current-module', () => 'pk')
|
|
2
|
+
export const useContacts = () => useState<any>('contacts', () => [])
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useUrls } from '#adata-ui/composables/useUrls'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Единая точка записи куки accessToken (логин, 2FA, OTP, обмен по auth-сессии).
|
|
5
|
+
* Домен должен совпадать с доменом удаления в resetTokens (adata-common-auth),
|
|
6
|
+
* иначе кука не находится на следующей загрузке и логин-флоу зацикливается на reload.
|
|
7
|
+
*/
|
|
8
|
+
export async function writeAccessTokenCookie(accessToken: string, expireIn?: number): Promise<boolean> {
|
|
9
|
+
const { mode } = useUrls()
|
|
10
|
+
const sharedDomain = `${mode}.kz`
|
|
11
|
+
const onSharedDomain = location.hostname === sharedDomain || location.hostname.endsWith(`.${sharedDomain}`)
|
|
12
|
+
const maxAge = Number(expireIn) > 0 ? Number(expireIn) : undefined
|
|
13
|
+
|
|
14
|
+
useCookie('accessToken', {
|
|
15
|
+
maxAge,
|
|
16
|
+
// на localhost/превью-хостах атрибут domain невалиден — пишем host-only куку
|
|
17
|
+
domain: onSharedDomain ? `.${sharedDomain}` : undefined,
|
|
18
|
+
path: '/',
|
|
19
|
+
secure: location.protocol === 'https:',
|
|
20
|
+
}).value = accessToken
|
|
21
|
+
|
|
22
|
+
// useCookie пишет document.cookie на следующем flush, не синхронно
|
|
23
|
+
await nextTick()
|
|
24
|
+
return document.cookie.split('; ').some(part => part.startsWith('accessToken='))
|
|
25
|
+
}
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
// Active-state detection for the products mega-menu.
|
|
2
|
-
//
|
|
3
|
-
// Two levels of "active":
|
|
4
|
-
// 1. activeModule — the current host matches one of the module's hosts
|
|
5
|
-
// (host ≠ module key: e.g. the `fines` module lives on avto.*.kz,
|
|
6
|
-
// and `tenders` spans both zakupki.*.kz and tender.*.kz).
|
|
7
|
-
// 2. activeService — within the active module, the current page matches a
|
|
8
|
-
// concrete item link (`/`, `/unload`, `/foreign`, …).
|
|
9
|
-
|
|
10
|
-
const LOCALE_SEGMENTS = new Set(['kk', 'en'])
|
|
11
|
-
|
|
12
|
-
interface NavTarget { to: string }
|
|
13
|
-
interface NavModule { link: string, items: NavTarget[] }
|
|
14
|
-
interface NormalizedUrl { host: string, key: string }
|
|
15
|
-
|
|
16
|
-
function safeUrl(href: string): URL | null {
|
|
17
|
-
try {
|
|
18
|
-
return new URL(href)
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return null
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Reduce a URL to a comparable identity: host + locale-stripped path + query.
|
|
26
|
-
// The query is kept because it can be significant (fines main is `/?check_fines=true`).
|
|
27
|
-
function normalize(href: string): NormalizedUrl | null {
|
|
28
|
-
const url = safeUrl(href)
|
|
29
|
-
if (!url) return null
|
|
30
|
-
|
|
31
|
-
const segments = url.pathname
|
|
32
|
-
.split('/')
|
|
33
|
-
.filter(segment => segment && !LOCALE_SEGMENTS.has(segment))
|
|
34
|
-
|
|
35
|
-
const path = `/${segments.join('/')}`
|
|
36
|
-
return { host: url.host, key: path + url.search }
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// A "root" target has no path segments (e.g. `/` or `/?check_fines=true`).
|
|
40
|
-
// Roots must match exactly, otherwise their prefix would light up every sub-page.
|
|
41
|
-
function isRoot(key: string): boolean {
|
|
42
|
-
return key === '/' || key.startsWith('/?')
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function useActiveNavigation() {
|
|
46
|
-
const route = useRoute()
|
|
47
|
-
|
|
48
|
-
// Recompute on every SPA navigation. Host stays constant within an app, so we
|
|
49
|
-
// read it from the request URL (SSR-safe); the path/query come from the route.
|
|
50
|
-
const current = computed<NormalizedUrl | null>(() => {
|
|
51
|
-
const host = useRequestURL().host
|
|
52
|
-
return normalize(`https://${host}${route.fullPath}`)
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
function isActiveModule(module: NavModule): boolean {
|
|
56
|
-
if (!current.value) return false
|
|
57
|
-
|
|
58
|
-
const hosts = new Set<string>()
|
|
59
|
-
const link = normalize(module.link)
|
|
60
|
-
if (link) hosts.add(link.host)
|
|
61
|
-
for (const item of module.items) {
|
|
62
|
-
const item_url = normalize(item.to)
|
|
63
|
-
if (item_url) hosts.add(item_url.host)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return hosts.has(current.value.host)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
function isActiveService(itemTo: string): boolean {
|
|
70
|
-
const cur = current.value
|
|
71
|
-
const item = normalize(itemTo)
|
|
72
|
-
if (!cur || !item || cur.host !== item.host) return false
|
|
73
|
-
|
|
74
|
-
// The car-check page redirects to a `car-result` URL; keep its item lit.
|
|
75
|
-
if (item.key.includes('check-car') && cur.key.includes('car-result')) return true
|
|
76
|
-
|
|
77
|
-
if (cur.key === item.key) return true
|
|
78
|
-
if (isRoot(item.key)) return false
|
|
79
|
-
|
|
80
|
-
return cur.key.startsWith(item.key)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return { isActiveModule, isActiveService }
|
|
84
|
-
}
|
|
1
|
+
// Active-state detection for the products mega-menu.
|
|
2
|
+
//
|
|
3
|
+
// Two levels of "active":
|
|
4
|
+
// 1. activeModule — the current host matches one of the module's hosts
|
|
5
|
+
// (host ≠ module key: e.g. the `fines` module lives on avto.*.kz,
|
|
6
|
+
// and `tenders` spans both zakupki.*.kz and tender.*.kz).
|
|
7
|
+
// 2. activeService — within the active module, the current page matches a
|
|
8
|
+
// concrete item link (`/`, `/unload`, `/foreign`, …).
|
|
9
|
+
|
|
10
|
+
const LOCALE_SEGMENTS = new Set(['kk', 'en'])
|
|
11
|
+
|
|
12
|
+
interface NavTarget { to: string }
|
|
13
|
+
interface NavModule { link: string, items: NavTarget[] }
|
|
14
|
+
interface NormalizedUrl { host: string, key: string }
|
|
15
|
+
|
|
16
|
+
function safeUrl(href: string): URL | null {
|
|
17
|
+
try {
|
|
18
|
+
return new URL(href)
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Reduce a URL to a comparable identity: host + locale-stripped path + query.
|
|
26
|
+
// The query is kept because it can be significant (fines main is `/?check_fines=true`).
|
|
27
|
+
function normalize(href: string): NormalizedUrl | null {
|
|
28
|
+
const url = safeUrl(href)
|
|
29
|
+
if (!url) return null
|
|
30
|
+
|
|
31
|
+
const segments = url.pathname
|
|
32
|
+
.split('/')
|
|
33
|
+
.filter(segment => segment && !LOCALE_SEGMENTS.has(segment))
|
|
34
|
+
|
|
35
|
+
const path = `/${segments.join('/')}`
|
|
36
|
+
return { host: url.host, key: path + url.search }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// A "root" target has no path segments (e.g. `/` or `/?check_fines=true`).
|
|
40
|
+
// Roots must match exactly, otherwise their prefix would light up every sub-page.
|
|
41
|
+
function isRoot(key: string): boolean {
|
|
42
|
+
return key === '/' || key.startsWith('/?')
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function useActiveNavigation() {
|
|
46
|
+
const route = useRoute()
|
|
47
|
+
|
|
48
|
+
// Recompute on every SPA navigation. Host stays constant within an app, so we
|
|
49
|
+
// read it from the request URL (SSR-safe); the path/query come from the route.
|
|
50
|
+
const current = computed<NormalizedUrl | null>(() => {
|
|
51
|
+
const host = useRequestURL().host
|
|
52
|
+
return normalize(`https://${host}${route.fullPath}`)
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
function isActiveModule(module: NavModule): boolean {
|
|
56
|
+
if (!current.value) return false
|
|
57
|
+
|
|
58
|
+
const hosts = new Set<string>()
|
|
59
|
+
const link = normalize(module.link)
|
|
60
|
+
if (link) hosts.add(link.host)
|
|
61
|
+
for (const item of module.items) {
|
|
62
|
+
const item_url = normalize(item.to)
|
|
63
|
+
if (item_url) hosts.add(item_url.host)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return hosts.has(current.value.host)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function isActiveService(itemTo: string): boolean {
|
|
70
|
+
const cur = current.value
|
|
71
|
+
const item = normalize(itemTo)
|
|
72
|
+
if (!cur || !item || cur.host !== item.host) return false
|
|
73
|
+
|
|
74
|
+
// The car-check page redirects to a `car-result` URL; keep its item lit.
|
|
75
|
+
if (item.key.includes('check-car') && cur.key.includes('car-result')) return true
|
|
76
|
+
|
|
77
|
+
if (cur.key === item.key) return true
|
|
78
|
+
if (isRoot(item.key)) return false
|
|
79
|
+
|
|
80
|
+
return cur.key.startsWith(item.key)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return { isActiveModule, isActiveService }
|
|
84
|
+
}
|