adata-ui 2.1.40 → 2.1.41-beta.1
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 +2 -2
- package/.playground/app.vue +13 -13
- package/.playground/nuxt.config.ts +1 -1
- package/CLAUDE.md +63 -0
- package/assets/styles/main.css +12 -0
- package/assets/styles/theme.css +583 -0
- package/assets/styles/ui.css +247 -0
- package/components/elements/a-select-row/ASelectRowV2.vue +13 -17
- package/components/elements/a-select-row/index.vue +13 -12
- package/components/elements/accordion/AAccordion.vue +2 -2
- package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +1 -1
- package/components/elements/accordion/AAccordionGroup/ui.config.ts +4 -4
- package/components/elements/accordion/ui.config.ts +4 -4
- package/components/elements/alert/AAlert.vue +5 -5
- package/components/elements/bg-block/ABgBlock.vue +1 -1
- package/components/elements/button/AButton.vue +48 -45
- package/components/elements/button/AButtonV2.vue +74 -30
- package/components/elements/button-login/index.vue +2 -1
- package/components/elements/carousel/config.ui.ts +2 -2
- package/components/elements/chip-wrapper/AChipWrapper.vue +4 -3
- package/components/elements/chips/AChips.vue +4 -3
- package/components/elements/companies/AOurClients.vue +1 -1
- package/components/elements/count-up/ACountUp.vue +54 -0
- package/components/elements/curve-block/ACurveBlock.vue +15 -48
- package/components/elements/curve-block-v2/ACurveBlockV2.vue +60 -25
- package/components/elements/digit-badge/ADigitBadge.vue +17 -16
- package/components/elements/empty-box/empty-box-V2.vue +92 -0
- package/components/elements/error-template/index.vue +99 -31
- package/components/elements/feature-description/AFeatureDescription.vue +8 -8
- package/components/elements/illustrations/noAccess.vue +1 -1
- package/components/elements/infinite-carousel/AInfiniteCarousel.vue +44 -16
- package/components/elements/leave-note/ALeaveNote.vue +2 -2
- package/components/elements/pagination/APagination.vue +8 -8
- package/components/elements/section-heading/ASectionHeading.vue +35 -0
- package/components/elements/segmented/ASegmentedV2.vue +24 -21
- package/components/elements/select/ASelect.vue +28 -27
- package/components/elements/select/ASelectMobile.vue +5 -5
- package/components/elements/select/ASelectV2.vue +20 -28
- package/components/elements/select/ui/select-button.vue +8 -8
- package/components/elements/select/ui/select-list.vue +2 -2
- package/components/elements/show-more/AShowMore.vue +2 -2
- package/components/elements/show-more/AShowMoreV2.vue +3 -3
- package/components/elements/skeleton/ASkeleton.vue +1 -1
- package/components/elements/slider/ASlider.vue +3 -2
- package/components/elements/slider/ASliderV2.vue +182 -0
- package/components/elements/star-rating/AStarRating.vue +2 -2
- package/components/elements/status-badge/AStatusBadge.vue +40 -36
- package/components/elements/step-slider/AStepSliderColCard.vue +77 -39
- package/components/elements/step-slider/AStepSliderColNumber.vue +74 -53
- package/components/elements/table/table.config.ts +8 -8
- package/components/elements/tree-select/components/ATreeSelectNode.vue +4 -4
- package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +3 -3
- package/components/elements/tree-select-modal/ATreeSelectModal.vue +4 -4
- package/components/features/color-mode/AColorMode.client.vue +2 -24
- package/components/features/dropdown/ADropdownV2.vue +1 -1
- package/components/features/lang-switcher/lang-switcher.vue +6 -6
- package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -23
- package/components/features/payment/banner/PaymentBanner.vue +3 -23
- package/components/features/payment/banner/UpSellBanner.vue +1 -21
- package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +8 -7
- package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +5 -5
- package/components/features/payment/process/PaymentMethodSidePanel.vue +12 -12
- package/components/features/payment/process/PaymentTopUpSidePanel.vue +6 -6
- package/components/features/pk-mobile-services/APkMobileServices.vue +14 -43
- package/components/features//321/201hange-version/AChangeVersion.vue +1 -1
- package/components/forms/checkbox/ACheckbox.vue +8 -8
- package/components/forms/checkbox/ACheckboxV2.vue +8 -8
- package/components/forms/feedback-form/FeedbackForm.vue +8 -8
- package/components/forms/feedback-form/FeedbackFormV2.vue +9 -8
- package/components/forms/input/AInputV2.vue +39 -25
- package/components/forms/input/button/AInputButton.vue +1 -1
- package/components/forms/input/date/AInputDate.vue +13 -9
- package/components/forms/input/password/AInputPassword.vue +1 -1
- package/components/forms/input/standard/AInputStandard.vue +23 -14
- package/components/forms/input/textarea/ATextarea.vue +15 -11
- package/components/forms/input/textarea/ATextareaV2.vue +18 -13
- package/components/forms/radio-button/ARadioButton.vue +4 -4
- package/components/forms/request-demo/ARequestDemo.vue +5 -5
- package/components/forms/toggle/AToggle.vue +8 -7
- package/components/forms/toggle/AToggleV2.vue +7 -6
- package/components/modals/AConfirmationEmail.vue +3 -3
- package/components/modals/AboutTariffModal.vue +10 -9
- package/components/modals/AnotherDeviceModal.vue +11 -10
- package/components/modals/ApplicationAcceptedModal.vue +3 -2
- package/components/modals/ConnectingTariffModal.vue +1 -1
- package/components/modals/ContactsMobileModel.vue +5 -5
- package/components/modals/ContentNavigationModal.vue +8 -7
- package/components/modals/Insufficient-funds-modal.vue +4 -4
- package/components/modals/LimitReachedModal.vue +18 -7
- package/components/modals/NoAccessModal.vue +7 -3
- package/components/modals/PaymentMethodModal.vue +4 -4
- package/components/modals/RedirectsBanksModal.vue +4 -4
- package/components/modals/ReplenishModal.vue +2 -2
- package/components/modals/ReportBugConfirmModal.vue +2 -2
- package/components/modals/ReportBugModal.vue +2 -2
- package/components/modals/Resend.vue +4 -4
- package/components/modals/SubmitApplicationModal.vue +1 -5
- package/components/modals/id/AuthModal.vue +27 -47
- package/components/modals/id/IdAutoLogoutModal.vue +23 -24
- package/components/modals/id/IdBanner.vue +4 -24
- package/components/modals/id/IdConfirmAccountOtpModal.vue +5 -4
- package/components/modals/id/IdConfirmSuccessfulModal.vue +3 -3
- package/components/modals/id/IdLoginModal.vue +8 -8
- package/components/modals/id/IdModals.vue +1 -3
- package/components/modals/id/IdNewPasswordModal.vue +3 -3
- package/components/modals/id/IdOtpInput.vue +3 -3
- package/components/modals/id/IdPasswordSuccessfulModal.vue +3 -3
- package/components/modals/id/IdRecoveryModal.vue +3 -3
- package/components/modals/id/IdRegistrationModal.vue +4 -4
- package/components/modals/id/IdResetPasswordOtpModal.vue +5 -4
- package/components/modals/id/IdTwoFactorModal.vue +3 -2
- package/components/navigation/bottom-navigation/ABottomNavigation.vue +7 -7
- package/components/navigation/breadcrumbs/ABreadcrumbs.vue +4 -4
- package/components/navigation/footer/AFooter.vue +2 -2
- package/components/navigation/footer/ui/a-footer-accordion.vue +1 -1
- package/components/navigation/header/AHeader.vue +11 -11
- package/components/navigation/header/AlmatyContacts.vue +7 -7
- package/components/navigation/header/AstanaContacts.vue +4 -4
- package/components/navigation/header/CardGallery.vue +8 -7
- package/components/navigation/header/ContactMenu.vue +1 -1
- package/components/navigation/header/HeaderLink.vue +5 -5
- package/components/navigation/header/HeaderUsage.vue +14 -14
- package/components/navigation/header/ListItem.vue +4 -3
- package/components/navigation/header/NavCard.vue +6 -5
- package/components/navigation/header/NavList.vue +9 -8
- package/components/navigation/header/NotificationsMenu.vue +10 -10
- package/components/navigation/header/ProductMenu.vue +10 -9
- package/components/navigation/header/ProfileMenu.vue +13 -12
- package/components/navigation/header/SystemNotification.vue +4 -4
- package/components/navigation/line-tabs/ALineTabs.vue +10 -9
- package/components/navigation/pill-tabs/APillTabs.vue +18 -16
- package/components/navigation/pill-tabs/APillTabsV2.vue +40 -25
- package/components/navigation/side-navigation/ASideNavigation.vue +3 -3
- package/components/overlays/drawer/ADrawerV2.vue +12 -11
- package/components/overlays/modal/AModal.vue +4 -4
- package/components/overlays/modal/AModalV2.vue +17 -13
- package/components/overlays/side-panel/ASidePanel.vue +7 -7
- package/components/overlays/sideover/ASlideover.vue +4 -4
- package/components/overlays/tooltip/ATooltip.vue +3 -2
- package/components/overlays/tooltip/ATooltipV2.vue +2 -2
- package/composables/highlight.ts +2 -1
- package/eslint.config.mjs +14 -1
- package/icons/arrow/arrow-left.vue +14 -0
- package/icons/arrow-currency-gray.vue +1 -1
- package/icons/arrow-currency-green.vue +1 -1
- package/icons/arrow-currency-red.vue +1 -1
- package/icons/avatar.vue +1 -1
- package/icons/bar-chart-3.vue +3 -0
- package/icons/book-open.vue +3 -0
- package/icons/bookmark/bookmark-filled.vue +1 -0
- package/icons/braces.vue +3 -0
- package/icons/check/check-outline.vue +3 -0
- package/icons/chevron/chevron-down-outline.vue +3 -0
- package/icons/clipboard-list.vue +3 -0
- package/icons/clock-outline.vue +3 -0
- package/icons/company-egov-small.vue +1 -1
- package/icons/database.vue +3 -0
- package/icons/download-outline.vue +3 -0
- package/icons/download.vue +1 -1
- package/icons/egov.vue +1 -1
- package/icons/elicense.vue +1 -1
- package/icons/file-json.vue +3 -0
- package/icons/file-search.vue +3 -0
- package/icons/file-text.vue +3 -0
- package/icons/flask-conical.vue +3 -0
- package/icons/folder-open.vue +3 -0
- package/icons/gift-outline.vue +3 -0
- package/icons/globe-2.vue +3 -0
- package/icons/graph-loading.vue +2 -2
- package/icons/hand/hand-thumb-up-filled.vue +1 -1
- package/icons/home.vue +14 -0
- package/icons/invoice.vue +1 -0
- package/icons/key-round.vue +3 -0
- package/icons/letter/letter-a.vue +4 -2
- package/icons/letter/letter-b.vue +2 -2
- package/icons/letter/letter-c.vue +2 -2
- package/icons/letter/letter-d.vue +2 -2
- package/icons/letter/letter-e.vue +2 -2
- package/icons/logo.vue +1 -1
- package/icons/main-filter.vue +1 -1
- package/icons/menu.vue +4 -4
- package/icons/message/message.vue +1 -1
- package/icons/messages-square.vue +3 -0
- package/icons/more.vue +1 -1
- package/icons/payment/payment-card.vue +2 -2
- package/icons/radio/radio-check.vue +1 -1
- package/icons/robot-outline.vue +3 -0
- package/icons/scales/scale-outline.vue +3 -0
- package/icons/search-outline.vue +3 -0
- package/icons/send.vue +3 -0
- package/icons/star/star-filled.vue +1 -0
- package/icons/star/star-half-filled.vue +1 -0
- package/icons/sun.vue +1 -0
- package/icons/terminal.vue +3 -0
- package/icons/toasts/warning-triangle-toast.vue +1 -0
- package/icons/triangle-alert.vue +3 -0
- package/icons/users-outline.vue +3 -0
- package/icons/webhook.vue +3 -0
- package/icons/x-outline.vue +3 -0
- package/icons/yandex.vue +2 -1
- package/illustrations/address-location.vue +2 -2
- package/illustrations/award-badge.vue +105 -0
- package/illustrations/ball-with-chain.vue +7 -7
- package/illustrations/bill.vue +5 -5
- package/illustrations/buildings.vue +4 -4
- package/illustrations/calendar.vue +11 -11
- package/illustrations/chains.vue +12 -12
- package/illustrations/coin-percent.vue +3 -3
- package/illustrations/coins-stack.vue +4 -4
- package/illustrations/delete-dark.vue +1 -0
- package/illustrations/delete.vue +1 -0
- package/illustrations/doc-with-stamp.vue +5 -5
- package/illustrations/document.vue +3 -3
- package/illustrations/door.vue +79 -68
- package/illustrations/empty-badge-check.vue +20 -0
- package/illustrations/empty-ban.vue +18 -0
- package/illustrations/empty-box.vue +5 -5
- package/illustrations/empty-filter.vue +20 -0
- package/illustrations/empty-inbox.vue +19 -0
- package/illustrations/empty-scale.vue +22 -0
- package/illustrations/empty-search-x.vue +21 -0
- package/illustrations/empty-shopping-cart.vue +21 -0
- package/illustrations/empty-users-round.vue +20 -0
- package/illustrations/empty-wallet.vue +121 -155
- package/illustrations/graph-in-coin.vue +2 -2
- package/illustrations/hammer.vue +5 -5
- package/illustrations/hand-cash.vue +1 -1
- package/illustrations/info.vue +49 -36
- package/illustrations/mail-active.vue +86 -0
- package/illustrations/mail.vue +4 -4
- package/illustrations/no-access.vue +92 -0
- package/illustrations/ok.vue +86 -58
- package/illustrations/people-group.vue +1 -1
- package/illustrations/person-with-phone.vue +5 -5
- package/illustrations/person.vue +3 -3
- package/illustrations/phone-check.vue +104 -84
- package/illustrations/phone-payment-method.vue +1 -1
- package/illustrations/shield-user.vue +94 -0
- package/illustrations/stop-hand.vue +78 -71
- package/illustrations/stop-sign.vue +1 -1
- package/illustrations/suit.vue +93 -107
- package/illustrations/suitcase.vue +6 -6
- package/illustrations/terminal.vue +94 -228
- package/illustrations/trash-can.vue +60 -102
- package/illustrations/turn-on-tariff.vue +2 -2
- package/illustrations/two-persons.vue +2 -2
- package/lang/en.ts +25 -29
- package/lang/kk.ts +24 -28
- package/lang/ru.ts +24 -29
- package/nuxt.config.ts +11 -4
- package/package.json +7 -12
- package/assets/styles/index.scss +0 -166
- package/assets/styles/modules/_base.scss +0 -5
- package/assets/styles/modules/_typography.scss +0 -152
- package/components/elements/error-template/types.ts +0 -23
- package/illustrations/terminal-dark.vue +0 -48
- package/tailwind.config.ts +0 -194
- package/tests/AButton.test.ts +0 -81
|
@@ -99,80 +99,101 @@ watch(() => [props.interval, props.autoplay, props.steps.length], () => {
|
|
|
99
99
|
|
|
100
100
|
<template>
|
|
101
101
|
<div
|
|
102
|
-
class="grid grid-cols-1 items-
|
|
102
|
+
class="grid grid-cols-1 items-start gap-[34px] lg:gap-13"
|
|
103
103
|
:class="colsClass"
|
|
104
104
|
>
|
|
105
|
-
<
|
|
106
|
-
<
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
@click="goTo(i)"
|
|
111
|
-
>
|
|
105
|
+
<div class="flex flex-col">
|
|
106
|
+
<ol class="relative flex flex-col gap-1.5">
|
|
107
|
+
<!-- Одна непрерывная линия с прогрессивной заливкой (как в макете),
|
|
108
|
+
а не дискретные сегменты между шагами. Линия проходит ЗА кружками,
|
|
109
|
+
поэтому их фон обязан быть непрозрачным (см. ниже). -->
|
|
112
110
|
<span
|
|
113
|
-
v-if="
|
|
114
|
-
class="
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
111
|
+
v-if="steps.length > 1"
|
|
112
|
+
class="absolute inset-y-9 left-[31px] z-0 w-0.5 overflow-hidden rounded bg-badge"
|
|
113
|
+
aria-hidden="true"
|
|
114
|
+
>
|
|
115
|
+
<span
|
|
116
|
+
class="ss-line-fill absolute inset-x-0 top-0 rounded bg-brand"
|
|
117
|
+
:style="{ height: `${(active / (steps.length - 1)) * 100}%` }"
|
|
118
|
+
/>
|
|
119
|
+
</span>
|
|
120
|
+
|
|
121
|
+
<li
|
|
122
|
+
v-for="(step, i) in steps"
|
|
123
|
+
:key="i"
|
|
124
|
+
class="ss-step relative z-10 flex cursor-pointer gap-[15px] rounded-14 px-4 py-3.5"
|
|
125
|
+
:class="i === active ? 'ss-step-on bg-main' : ''"
|
|
126
|
+
@click="goTo(i)"
|
|
127
|
+
>
|
|
128
|
+
<!-- Фон кружка только НЕПРОЗРАЧНЫМИ токенами: bg-brand-subtle в тёмной
|
|
129
|
+
теме = #068DFF1A (10% альфы), и линия прогресса просвечивала
|
|
130
|
+
сквозь пройденный шаг. Для дарка берём непрозрачный brand-900. -->
|
|
122
131
|
<span
|
|
123
|
-
class="
|
|
132
|
+
class="relative z-10 flex size-[34px] shrink-0 items-center justify-center rounded-full text-body-md font-bold transition-all duration-300"
|
|
124
133
|
:class="i === active
|
|
125
|
-
? 'ss-num-glow
|
|
134
|
+
? 'ss-num-glow scale-[1.08] bg-brand text-inverted'
|
|
126
135
|
: i < active
|
|
127
|
-
? '
|
|
128
|
-
: '
|
|
136
|
+
? 'bg-brand-100 text-brand dark:bg-brand-900 dark:text-brand-300'
|
|
137
|
+
: 'bg-canvas text-secondary'"
|
|
129
138
|
>
|
|
130
139
|
{{ i + 1 }}
|
|
131
140
|
</span>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
</li>
|
|
149
|
-
</ol>
|
|
141
|
+
<div>
|
|
142
|
+
<p
|
|
143
|
+
class="text-body-md-strong transition-colors"
|
|
144
|
+
:class="i === active ? 'text-primary' : 'text-secondary'"
|
|
145
|
+
>
|
|
146
|
+
{{ step.title }}
|
|
147
|
+
</p>
|
|
148
|
+
<p class="mt-[3px] text-body-sm leading-normal text-secondary">
|
|
149
|
+
{{ step.description }}
|
|
150
|
+
</p>
|
|
151
|
+
</div>
|
|
152
|
+
</li>
|
|
153
|
+
</ol>
|
|
154
|
+
|
|
155
|
+
<slot name="steps-footer" />
|
|
156
|
+
</div>
|
|
150
157
|
|
|
151
158
|
<div
|
|
152
159
|
@mouseenter="onMouseEnter"
|
|
153
160
|
@mouseleave="onMouseLeave"
|
|
154
161
|
>
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
/>
|
|
165
|
-
</div>
|
|
162
|
+
<slot
|
|
163
|
+
name="panel"
|
|
164
|
+
:active="active"
|
|
165
|
+
:step="steps[active]"
|
|
166
|
+
:progress="progress"
|
|
167
|
+
:count="steps.length"
|
|
168
|
+
:fill-width="fillWidth"
|
|
169
|
+
:go-to="goTo"
|
|
170
|
+
/>
|
|
166
171
|
</div>
|
|
167
172
|
</div>
|
|
168
173
|
</template>
|
|
169
174
|
|
|
170
175
|
<style scoped>
|
|
176
|
+
.ss-line-fill {
|
|
177
|
+
transition: height .6s cubic-bezier(.4, 0, .2, 1);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.ss-step {
|
|
181
|
+
background: transparent;
|
|
182
|
+
transition: background .4s, box-shadow .4s;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.ss-step-on {
|
|
186
|
+
box-shadow: 0 14px 34px -18px color-mix(in srgb, var(--color-brand-500) 30%, transparent);
|
|
187
|
+
}
|
|
188
|
+
|
|
171
189
|
.ss-num-glow {
|
|
172
|
-
box-shadow: 0 4px
|
|
190
|
+
box-shadow: 0 6px 16px -4px color-mix(in srgb, var(--color-brand-500) 55%, transparent);
|
|
173
191
|
}
|
|
174
192
|
|
|
175
|
-
|
|
176
|
-
|
|
193
|
+
@media (prefers-reduced-motion: reduce) {
|
|
194
|
+
.ss-line-fill,
|
|
195
|
+
.ss-step {
|
|
196
|
+
transition: none;
|
|
197
|
+
}
|
|
177
198
|
}
|
|
178
199
|
</style>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
export const ui = {
|
|
2
|
-
wrapper: 'relative overflow-x-auto rounded bg-
|
|
2
|
+
wrapper: 'relative overflow-x-auto rounded bg-main',
|
|
3
3
|
base: 'min-w-full table-fixed ',
|
|
4
4
|
divide: '',
|
|
5
|
-
thead: 'relative bg-
|
|
5
|
+
thead: 'relative bg-badge',
|
|
6
6
|
tbody: '',
|
|
7
7
|
tr: {
|
|
8
|
-
base: 'even:bg-
|
|
9
|
-
selected: 'bg-
|
|
10
|
-
active: 'hover:bg-
|
|
8
|
+
base: 'even:bg-muted',
|
|
9
|
+
selected: 'bg-muted',
|
|
10
|
+
active: 'hover:bg-action-secondary-hover cursor-pointer',
|
|
11
11
|
},
|
|
12
12
|
th: {
|
|
13
13
|
base: 'text-left rtl:text-right',
|
|
14
14
|
padding: 'px-4 py-3.5',
|
|
15
|
-
color: 'text-
|
|
15
|
+
color: 'text-primary',
|
|
16
16
|
font: 'font-semibold',
|
|
17
17
|
size: 'text-body-sm',
|
|
18
18
|
},
|
|
@@ -22,11 +22,11 @@ export const ui = {
|
|
|
22
22
|
sm: 'px-3 py-2',
|
|
23
23
|
md: 'px-4 py-4'
|
|
24
24
|
},
|
|
25
|
-
color: 'text-
|
|
25
|
+
color: 'text-primary',
|
|
26
26
|
font: '',
|
|
27
27
|
size: 'text-body-md',
|
|
28
28
|
},
|
|
29
29
|
progress: {
|
|
30
|
-
wrapper: 'absolute h-[2px]
|
|
30
|
+
wrapper: 'absolute inset-x-0 h-[2px] animate-pulse bg-action-primary',
|
|
31
31
|
},
|
|
32
32
|
}
|
|
@@ -25,17 +25,17 @@ function onSelectToggle() {
|
|
|
25
25
|
<template>
|
|
26
26
|
<li
|
|
27
27
|
:style="{ paddingLeft: `${node.level * 20}px` }"
|
|
28
|
-
:class="[{ 'bg-
|
|
28
|
+
:class="[{ 'bg-muted': node.state === 'checked' && type === 'select' }]"
|
|
29
29
|
>
|
|
30
30
|
<div
|
|
31
31
|
v-if="!node.hidden"
|
|
32
32
|
class="flex items-center gap-1 p-2"
|
|
33
|
-
:class="{ 'bg-
|
|
33
|
+
:class="{ 'bg-action-disabled': isDisabled }"
|
|
34
34
|
>
|
|
35
35
|
<div class="flex min-w-4 items-center">
|
|
36
36
|
<a-icon-loader-circle
|
|
37
37
|
v-if="node.loading"
|
|
38
|
-
class="size-4 animate-spin text-
|
|
38
|
+
class="size-4 animate-spin text-icon-disabled"
|
|
39
39
|
/>
|
|
40
40
|
<a-icon-chevron-down
|
|
41
41
|
v-else-if="node.expandable"
|
|
@@ -78,7 +78,7 @@ function onSelectToggle() {
|
|
|
78
78
|
</slot>
|
|
79
79
|
<a-icon-check
|
|
80
80
|
v-if="node.state === 'checked'"
|
|
81
|
-
class="min-w-4 text-
|
|
81
|
+
class="min-w-4 text-brand"
|
|
82
82
|
/>
|
|
83
83
|
</div>
|
|
84
84
|
</div>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
:key="node.id"
|
|
4
4
|
>
|
|
5
5
|
<li
|
|
6
|
-
:class="[
|
|
6
|
+
:class="['flex gap-2 items-center px-4 py-3', { 'bg-muted': isChecked }]"
|
|
7
7
|
:style="{ 'padding-left': `${getIndent(deep)}px` }"
|
|
8
8
|
>
|
|
9
9
|
<div class="min-w-4 cursor-pointer">
|
|
@@ -27,12 +27,12 @@
|
|
|
27
27
|
type="checkbox"
|
|
28
28
|
@change="handelChange"
|
|
29
29
|
>
|
|
30
|
-
<p class="text-
|
|
30
|
+
<p class="text-primary text-h3 w-full ">
|
|
31
31
|
{{ node.name }}
|
|
32
32
|
</p>
|
|
33
33
|
<a-icon-check
|
|
34
34
|
v-if="isChecked"
|
|
35
|
-
class="text-
|
|
35
|
+
class="text-brand min-w-4"
|
|
36
36
|
/>
|
|
37
37
|
</label>
|
|
38
38
|
</li>
|
|
@@ -133,14 +133,14 @@ defineExpose({ open: openModal, close: () => (isOpen.value = false) })
|
|
|
133
133
|
>
|
|
134
134
|
<template #header>
|
|
135
135
|
<slot name="header" :title="title">
|
|
136
|
-
<h2 class="text-h5 text-
|
|
136
|
+
<h2 class="text-h5 text-primary">
|
|
137
137
|
{{ title }}
|
|
138
138
|
</h2>
|
|
139
139
|
</slot>
|
|
140
140
|
</template>
|
|
141
141
|
|
|
142
142
|
<div class="flex flex-col">
|
|
143
|
-
<div class="sticky top-0 z-[1] flex flex-col gap-4 bg-
|
|
143
|
+
<div class="sticky top-0 z-[1] flex flex-col gap-4 bg-main px-5 pb-4 pt-4">
|
|
144
144
|
<a-input-v2
|
|
145
145
|
v-model="search"
|
|
146
146
|
type="search"
|
|
@@ -149,7 +149,7 @@ defineExpose({ open: openModal, close: () => (isOpen.value = false) })
|
|
|
149
149
|
clearable
|
|
150
150
|
/>
|
|
151
151
|
|
|
152
|
-
<p v-if="filteringLabel" class="text-body-sm text-
|
|
152
|
+
<p v-if="filteringLabel" class="text-body-sm text-secondary">
|
|
153
153
|
{{ filteringLabel }}
|
|
154
154
|
</p>
|
|
155
155
|
</div>
|
|
@@ -182,7 +182,7 @@ defineExpose({ open: openModal, close: () => (isOpen.value = false) })
|
|
|
182
182
|
</template>
|
|
183
183
|
</a-tree-select>
|
|
184
184
|
|
|
185
|
-
<div v-else class="flex items-center justify-center py-10 text-
|
|
185
|
+
<div v-else class="flex items-center justify-center py-10 text-icon-disabled">
|
|
186
186
|
<a-icon-loader-circle class="size-6 animate-spin" />
|
|
187
187
|
</div>
|
|
188
188
|
</div>
|
|
@@ -1,43 +1,21 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
import Moon from '#adata-ui/icons/moon.vue'
|
|
3
3
|
import Sun from '#adata-ui/icons/sun.vue'
|
|
4
|
-
import { useEventListener } from '@vueuse/core'
|
|
5
4
|
|
|
6
5
|
const colorMode = useColorMode()
|
|
7
|
-
const setColorMode = useCookie('colorMode')
|
|
8
|
-
|
|
9
|
-
if (setColorMode.value) {
|
|
10
|
-
colorMode.preference = setColorMode.value
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const ONE_YEAR_SECONDS = 60 * 60 * 24 * 365
|
|
14
|
-
|
|
15
|
-
function cookieDomainAttr(): string {
|
|
16
|
-
const parts = location.hostname.split('.').reverse()
|
|
17
|
-
if (parts.length < 2) return ''
|
|
18
|
-
return `; domain=.${parts[1]}.${parts[0]}`
|
|
19
|
-
}
|
|
20
6
|
|
|
21
7
|
const isDark = computed(() => colorMode.value === 'dark')
|
|
22
8
|
|
|
23
9
|
function toggle() {
|
|
24
|
-
|
|
25
|
-
colorMode.preference = value
|
|
26
|
-
document.cookie = `colorMode=${value}; max-age=${ONE_YEAR_SECONDS}${cookieDomainAttr()}; path=/`
|
|
10
|
+
colorMode.preference = isDark.value ? 'light' : 'dark'
|
|
27
11
|
}
|
|
28
|
-
|
|
29
|
-
useEventListener(window, 'storage', (event: StorageEvent) => {
|
|
30
|
-
if (event.key === 'nuxt-color-mode' && event.newValue) {
|
|
31
|
-
colorMode.preference = event.newValue
|
|
32
|
-
}
|
|
33
|
-
})
|
|
34
12
|
</script>
|
|
35
13
|
|
|
36
14
|
<template>
|
|
37
15
|
<client-only>
|
|
38
16
|
<button
|
|
39
17
|
type="button"
|
|
40
|
-
class="relative inline-flex size-8 items-center justify-center overflow-hidden rounded-lg text-
|
|
18
|
+
class="relative inline-flex size-8 items-center justify-center overflow-hidden rounded-lg text-primary/80 transition-colors duration-150 hover:bg-action-secondary-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-brand-500/50 focus-visible:ring-offset-1"
|
|
41
19
|
:aria-label="isDark ? 'Switch to light mode' : 'Switch to dark mode'"
|
|
42
20
|
data-test-id="header-switch-theme-toggle"
|
|
43
21
|
@click="toggle"
|
|
@@ -84,7 +84,7 @@ onKeyStroke('Escape', () => {
|
|
|
84
84
|
<div
|
|
85
85
|
v-if="isOpen"
|
|
86
86
|
ref="floating"
|
|
87
|
-
class="z-[60] overflow-hidden rounded-lg shadow-lg shadow-
|
|
87
|
+
class="z-[60] overflow-hidden rounded-lg shadow-lg shadow-surface-dark/10 dark:shadow-surface-dark/30"
|
|
88
88
|
:style="{
|
|
89
89
|
position: strategy,
|
|
90
90
|
left: x != null ? `${x}px` : '',
|
|
@@ -66,10 +66,10 @@ function onSelect(loc: LocaleItem) {
|
|
|
66
66
|
<button
|
|
67
67
|
ref="reference"
|
|
68
68
|
type="button"
|
|
69
|
-
class="inline-flex size-8 items-center justify-center rounded-lg text-body-sm font-semibold text-
|
|
69
|
+
class="inline-flex size-8 items-center justify-center rounded-lg text-body-sm font-semibold text-primary transition-colors duration-150 hover:bg-action-secondary-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-brand-500/50 focus-visible:ring-offset-1"
|
|
70
70
|
:class="[
|
|
71
71
|
isOpen
|
|
72
|
-
? 'bg-
|
|
72
|
+
? 'bg-brand-subtle text-brand ring-2 ring-brand-500/20'
|
|
73
73
|
: '',
|
|
74
74
|
]"
|
|
75
75
|
:data-test-id="`header-switch-language-button${testIdSuffix}`"
|
|
@@ -91,7 +91,7 @@ function onSelect(loc: LocaleItem) {
|
|
|
91
91
|
<div
|
|
92
92
|
v-if="isOpen"
|
|
93
93
|
ref="floating"
|
|
94
|
-
class="z-[10000] w-fit rounded-lg border border-
|
|
94
|
+
class="z-[10000] w-fit rounded-lg border border-default bg-main shadow-lg shadow-surface-dark/10 dark:shadow-surface-dark/30"
|
|
95
95
|
:style="{
|
|
96
96
|
position: strategy,
|
|
97
97
|
left: x != null ? `${x}px` : '',
|
|
@@ -111,15 +111,15 @@ function onSelect(loc: LocaleItem) {
|
|
|
111
111
|
class="flex w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-body-md transition-colors duration-100"
|
|
112
112
|
:class="[
|
|
113
113
|
localeCode(loc) === locale
|
|
114
|
-
? 'bg-
|
|
115
|
-
: 'text-
|
|
114
|
+
? 'bg-brand-subtle font-medium text-brand'
|
|
115
|
+
: 'text-quaternary hover:bg-action-secondary-hover',
|
|
116
116
|
]"
|
|
117
117
|
@click.prevent="onSelect(loc)"
|
|
118
118
|
>
|
|
119
119
|
<span>{{ t(`lang.${localeCode(loc)}.long`) }}</span>
|
|
120
120
|
<check
|
|
121
121
|
v-if="localeCode(loc) === locale"
|
|
122
|
-
class="size-4 shrink-0 text-
|
|
122
|
+
class="size-4 shrink-0 text-brand"
|
|
123
123
|
/>
|
|
124
124
|
</nuxt-link>
|
|
125
125
|
</li>
|
|
@@ -51,7 +51,7 @@ function onUpdate() {
|
|
|
51
51
|
</script>
|
|
52
52
|
|
|
53
53
|
<template>
|
|
54
|
-
<div class="gradient flex justify-between rounded-md p-4 ring-1 ring-inset ring-
|
|
54
|
+
<div class="bg-gradient-banner flex justify-between rounded-md p-4 ring-1 ring-inset ring-(--border-color-brand)/80">
|
|
55
55
|
<div>
|
|
56
56
|
<p class="mb-2 text-h5">
|
|
57
57
|
{{ t('modals.id.banners.basicPlusLimit.title') }}
|
|
@@ -59,11 +59,11 @@ function onUpdate() {
|
|
|
59
59
|
<i18n-t
|
|
60
60
|
keypath="modals.id.banners.basicPlusLimit.subtitle"
|
|
61
61
|
tag="p"
|
|
62
|
-
class="text-body-md text-
|
|
62
|
+
class="text-body-md text-quaternary"
|
|
63
63
|
>
|
|
64
64
|
<template #topUp>
|
|
65
65
|
<button
|
|
66
|
-
class="font-semibold text-
|
|
66
|
+
class="font-semibold text-brand"
|
|
67
67
|
@click="topUpSidePanel = true"
|
|
68
68
|
>
|
|
69
69
|
{{ t('modals.id.banners.basicPlusLimit.topUp') }}
|
|
@@ -82,23 +82,3 @@ function onUpdate() {
|
|
|
82
82
|
</a-button>
|
|
83
83
|
</div>
|
|
84
84
|
</template>
|
|
85
|
-
|
|
86
|
-
<style scoped>
|
|
87
|
-
.gradient {
|
|
88
|
-
background: linear-gradient(
|
|
89
|
-
239.71deg,
|
|
90
|
-
#B3D5F9 -7.48%,
|
|
91
|
-
#E6F1FD 39.62%,
|
|
92
|
-
#CCE2FB 85.82%
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
.dark .gradient {
|
|
97
|
-
background: linear-gradient(
|
|
98
|
-
239.71deg,
|
|
99
|
-
#17303F -7.48%,
|
|
100
|
-
#161617 39.62%,
|
|
101
|
-
#17303F 85.82%
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
</style>
|
|
@@ -56,7 +56,7 @@ function onBuy() {
|
|
|
56
56
|
</script>
|
|
57
57
|
|
|
58
58
|
<template>
|
|
59
|
-
<div class="gradient flex justify-between rounded-md p-4 ring-1 ring-inset ring-
|
|
59
|
+
<div class="bg-gradient-banner flex justify-between rounded-md p-4 ring-1 ring-inset ring-(--border-color-brand)/80">
|
|
60
60
|
<div>
|
|
61
61
|
<p class="mb-2 text-h5">
|
|
62
62
|
{{ t('payment.banner.title') }}
|
|
@@ -64,11 +64,11 @@ function onBuy() {
|
|
|
64
64
|
<i18n-t
|
|
65
65
|
keypath="payment.banner.subtitle"
|
|
66
66
|
tag="p"
|
|
67
|
-
class="text-body-md text-
|
|
67
|
+
class="text-body-md text-quaternary"
|
|
68
68
|
>
|
|
69
69
|
<template #tariffs>
|
|
70
70
|
<nuxt-link
|
|
71
|
-
class="font-semibold text-
|
|
71
|
+
class="font-semibold text-brand"
|
|
72
72
|
:to="buildLocalizedUrl(locale, landing, '/tariffs')"
|
|
73
73
|
>
|
|
74
74
|
{{ t('payment.banner.tariffs') }}
|
|
@@ -86,23 +86,3 @@ function onBuy() {
|
|
|
86
86
|
</a-button>
|
|
87
87
|
</div>
|
|
88
88
|
</template>
|
|
89
|
-
|
|
90
|
-
<style scoped>
|
|
91
|
-
.gradient {
|
|
92
|
-
background: linear-gradient(
|
|
93
|
-
239.71deg,
|
|
94
|
-
#B3D5F9 -7.48%,
|
|
95
|
-
#E6F1FD 39.62%,
|
|
96
|
-
#CCE2FB 85.82%
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.dark .gradient {
|
|
101
|
-
background: linear-gradient(
|
|
102
|
-
239.71deg,
|
|
103
|
-
#17303F -7.48%,
|
|
104
|
-
#161617 39.62%,
|
|
105
|
-
#17303F 85.82%
|
|
106
|
-
);
|
|
107
|
-
}
|
|
108
|
-
</style>
|
|
@@ -72,7 +72,7 @@ function onBuy() {
|
|
|
72
72
|
</script>
|
|
73
73
|
|
|
74
74
|
<template>
|
|
75
|
-
<div class="relative gradient flex justify-between rounded-md p-4 ring-1 ring-inset ring-
|
|
75
|
+
<div class="relative bg-gradient-banner flex justify-between rounded-md p-4 ring-1 ring-inset ring-(--border-color-brand)/80">
|
|
76
76
|
<div class="flex flex-col gap-3">
|
|
77
77
|
<p class="text-h5">
|
|
78
78
|
{{ t(`payment.upsell.${code}.title`) }}
|
|
@@ -103,23 +103,3 @@ function onBuy() {
|
|
|
103
103
|
</a-button>
|
|
104
104
|
</div>
|
|
105
105
|
</template>
|
|
106
|
-
|
|
107
|
-
<style scoped>
|
|
108
|
-
.gradient {
|
|
109
|
-
background: linear-gradient(
|
|
110
|
-
239.71deg,
|
|
111
|
-
#B3D5F9 -7.48%,
|
|
112
|
-
#E6F1FD 39.62%,
|
|
113
|
-
#CCE2FB 85.82%
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.dark .gradient {
|
|
118
|
-
background: linear-gradient(
|
|
119
|
-
239.71deg,
|
|
120
|
-
#17303F -7.48%,
|
|
121
|
-
#161617 39.62%,
|
|
122
|
-
#17303F 85.82%
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
</style>
|
|
@@ -72,6 +72,7 @@ watch(isOpen, async (value) => {
|
|
|
72
72
|
errorCorrectionLevel: 'H',
|
|
73
73
|
width: 300,
|
|
74
74
|
margin: 0,
|
|
75
|
+
/* Canvas API: CSS-переменные недоступны — hex обязателен */
|
|
75
76
|
color: {
|
|
76
77
|
dark: colorMode.value === 'dark' ? '#FFFFFF' : '#000000', // квадраты
|
|
77
78
|
light: colorMode.value === 'dark' ? '#000000' : '#FFFFFF', // фон
|
|
@@ -121,32 +122,32 @@ watch(isOpen, async (value) => {
|
|
|
121
122
|
<div class="flex items-center gap-2">
|
|
122
123
|
<button
|
|
123
124
|
type="button"
|
|
124
|
-
class="rounded-md p-1 transition-colors hover:bg-
|
|
125
|
+
class="rounded-md p-1 transition-colors hover:bg-badge"
|
|
125
126
|
data-test-id="kaspi-qr-back-button"
|
|
126
127
|
@click="onBack"
|
|
127
128
|
>
|
|
128
129
|
<a-icon-chevron-left class="size-6" />
|
|
129
130
|
</button>
|
|
130
|
-
<p class="text-
|
|
131
|
+
<p class="text-h3 text-primary" data-test-id="kaspi-qr-title">
|
|
131
132
|
{{ t('payment.kaspi.title') }}
|
|
132
133
|
</p>
|
|
133
134
|
</div>
|
|
134
135
|
</template>
|
|
135
136
|
|
|
136
137
|
<div class="flex flex-col gap-6">
|
|
137
|
-
<p class="text-center text-
|
|
138
|
+
<p class="text-center text-body-md-medium text-quaternary">
|
|
138
139
|
{{ t('payment.kaspi.description') }}
|
|
139
140
|
</p>
|
|
140
141
|
|
|
141
|
-
<div class="flex flex-col items-center gap-5 rounded-xl border border-
|
|
142
|
+
<div class="flex flex-col items-center gap-5 rounded-xl border border-default bg-main p-6" data-test-id="kaspi-qr-payment-block">
|
|
142
143
|
<div class="flex items-center gap-3">
|
|
143
144
|
<a-icon-kaspi-qr class="size-14" />
|
|
144
|
-
<span class="text-[40px] font-bold leading-none text-
|
|
145
|
+
<span class="text-[40px] font-bold leading-none text-primary">
|
|
145
146
|
{{ t('payment.kaspi.qr') }}
|
|
146
147
|
</span>
|
|
147
148
|
</div>
|
|
148
149
|
|
|
149
|
-
<p class="text-center text-
|
|
150
|
+
<p class="text-center text-h3 font-bold text-primary">
|
|
150
151
|
{{ t('payment.kaspi.scan') }}
|
|
151
152
|
</p>
|
|
152
153
|
|
|
@@ -155,7 +156,7 @@ watch(isOpen, async (value) => {
|
|
|
155
156
|
class="rounded-md"
|
|
156
157
|
/>
|
|
157
158
|
|
|
158
|
-
<p class="text-center text-
|
|
159
|
+
<p class="text-center text-body-lg text-quaternary">
|
|
159
160
|
{{ t('payment.kaspi.adata') }}
|
|
160
161
|
</p>
|
|
161
162
|
</div>
|
|
@@ -79,20 +79,20 @@ watch(isOpen, async (value) => {
|
|
|
79
79
|
width="484px"
|
|
80
80
|
>
|
|
81
81
|
<div class="flex flex-col gap-6">
|
|
82
|
-
<p class="whitespace-pre-wrap text-center text-
|
|
82
|
+
<p class="whitespace-pre-wrap text-center text-h3 font-bold text-primary">
|
|
83
83
|
{{ t('payment.redirect.title') }}
|
|
84
84
|
</p>
|
|
85
85
|
|
|
86
|
-
<div class="flex flex-col items-center gap-1 rounded-xl bg-
|
|
87
|
-
<span class="text-
|
|
86
|
+
<div class="flex flex-col items-center gap-1 rounded-xl bg-muted p-5 text-center">
|
|
87
|
+
<span class="text-body-sm text-secondary">
|
|
88
88
|
{{ t('payment.redirect.paymentId') }}
|
|
89
89
|
</span>
|
|
90
|
-
<span class="text-
|
|
90
|
+
<span class="text-h2 text-primary">
|
|
91
91
|
{{ requestId }}
|
|
92
92
|
</span>
|
|
93
93
|
</div>
|
|
94
94
|
|
|
95
|
-
<p class="text-center text-
|
|
95
|
+
<p class="text-center text-body-md text-quaternary">
|
|
96
96
|
{{ t('payment.redirect.description') }}
|
|
97
97
|
</p>
|
|
98
98
|
</div>
|