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.
Files changed (258) hide show
  1. package/-error.vue +2 -2
  2. package/.playground/app.vue +13 -13
  3. package/.playground/nuxt.config.ts +1 -1
  4. package/CLAUDE.md +63 -0
  5. package/assets/styles/main.css +12 -0
  6. package/assets/styles/theme.css +583 -0
  7. package/assets/styles/ui.css +247 -0
  8. package/components/elements/a-select-row/ASelectRowV2.vue +13 -17
  9. package/components/elements/a-select-row/index.vue +13 -12
  10. package/components/elements/accordion/AAccordion.vue +2 -2
  11. package/components/elements/accordion/AAccordionGroup/AAccordionGroup.vue +1 -1
  12. package/components/elements/accordion/AAccordionGroup/ui.config.ts +4 -4
  13. package/components/elements/accordion/ui.config.ts +4 -4
  14. package/components/elements/alert/AAlert.vue +5 -5
  15. package/components/elements/bg-block/ABgBlock.vue +1 -1
  16. package/components/elements/button/AButton.vue +48 -45
  17. package/components/elements/button/AButtonV2.vue +74 -30
  18. package/components/elements/button-login/index.vue +2 -1
  19. package/components/elements/carousel/config.ui.ts +2 -2
  20. package/components/elements/chip-wrapper/AChipWrapper.vue +4 -3
  21. package/components/elements/chips/AChips.vue +4 -3
  22. package/components/elements/companies/AOurClients.vue +1 -1
  23. package/components/elements/count-up/ACountUp.vue +54 -0
  24. package/components/elements/curve-block/ACurveBlock.vue +15 -48
  25. package/components/elements/curve-block-v2/ACurveBlockV2.vue +60 -25
  26. package/components/elements/digit-badge/ADigitBadge.vue +17 -16
  27. package/components/elements/empty-box/empty-box-V2.vue +92 -0
  28. package/components/elements/error-template/index.vue +99 -31
  29. package/components/elements/feature-description/AFeatureDescription.vue +8 -8
  30. package/components/elements/illustrations/noAccess.vue +1 -1
  31. package/components/elements/infinite-carousel/AInfiniteCarousel.vue +44 -16
  32. package/components/elements/leave-note/ALeaveNote.vue +2 -2
  33. package/components/elements/pagination/APagination.vue +8 -8
  34. package/components/elements/section-heading/ASectionHeading.vue +35 -0
  35. package/components/elements/segmented/ASegmentedV2.vue +24 -21
  36. package/components/elements/select/ASelect.vue +28 -27
  37. package/components/elements/select/ASelectMobile.vue +5 -5
  38. package/components/elements/select/ASelectV2.vue +20 -28
  39. package/components/elements/select/ui/select-button.vue +8 -8
  40. package/components/elements/select/ui/select-list.vue +2 -2
  41. package/components/elements/show-more/AShowMore.vue +2 -2
  42. package/components/elements/show-more/AShowMoreV2.vue +3 -3
  43. package/components/elements/skeleton/ASkeleton.vue +1 -1
  44. package/components/elements/slider/ASlider.vue +3 -2
  45. package/components/elements/slider/ASliderV2.vue +182 -0
  46. package/components/elements/star-rating/AStarRating.vue +2 -2
  47. package/components/elements/status-badge/AStatusBadge.vue +40 -36
  48. package/components/elements/step-slider/AStepSliderColCard.vue +77 -39
  49. package/components/elements/step-slider/AStepSliderColNumber.vue +74 -53
  50. package/components/elements/table/table.config.ts +8 -8
  51. package/components/elements/tree-select/components/ATreeSelectNode.vue +4 -4
  52. package/components/elements/tree-select-mobile/components/ATreeSelectNodesMobile.vue +3 -3
  53. package/components/elements/tree-select-modal/ATreeSelectModal.vue +4 -4
  54. package/components/features/color-mode/AColorMode.client.vue +2 -24
  55. package/components/features/dropdown/ADropdownV2.vue +1 -1
  56. package/components/features/lang-switcher/lang-switcher.vue +6 -6
  57. package/components/features/payment/banner/BasicPlusLimitBanner.vue +3 -23
  58. package/components/features/payment/banner/PaymentBanner.vue +3 -23
  59. package/components/features/payment/banner/UpSellBanner.vue +1 -21
  60. package/components/features/payment/process/PaymentKaspiQrSidePanel.vue +8 -7
  61. package/components/features/payment/process/PaymentKaspiRedirectSidePanel.vue +5 -5
  62. package/components/features/payment/process/PaymentMethodSidePanel.vue +12 -12
  63. package/components/features/payment/process/PaymentTopUpSidePanel.vue +6 -6
  64. package/components/features/pk-mobile-services/APkMobileServices.vue +14 -43
  65. package/components/features//321/201hange-version/AChangeVersion.vue +1 -1
  66. package/components/forms/checkbox/ACheckbox.vue +8 -8
  67. package/components/forms/checkbox/ACheckboxV2.vue +8 -8
  68. package/components/forms/feedback-form/FeedbackForm.vue +8 -8
  69. package/components/forms/feedback-form/FeedbackFormV2.vue +9 -8
  70. package/components/forms/input/AInputV2.vue +39 -25
  71. package/components/forms/input/button/AInputButton.vue +1 -1
  72. package/components/forms/input/date/AInputDate.vue +13 -9
  73. package/components/forms/input/password/AInputPassword.vue +1 -1
  74. package/components/forms/input/standard/AInputStandard.vue +23 -14
  75. package/components/forms/input/textarea/ATextarea.vue +15 -11
  76. package/components/forms/input/textarea/ATextareaV2.vue +18 -13
  77. package/components/forms/radio-button/ARadioButton.vue +4 -4
  78. package/components/forms/request-demo/ARequestDemo.vue +5 -5
  79. package/components/forms/toggle/AToggle.vue +8 -7
  80. package/components/forms/toggle/AToggleV2.vue +7 -6
  81. package/components/modals/AConfirmationEmail.vue +3 -3
  82. package/components/modals/AboutTariffModal.vue +10 -9
  83. package/components/modals/AnotherDeviceModal.vue +11 -10
  84. package/components/modals/ApplicationAcceptedModal.vue +3 -2
  85. package/components/modals/ConnectingTariffModal.vue +1 -1
  86. package/components/modals/ContactsMobileModel.vue +5 -5
  87. package/components/modals/ContentNavigationModal.vue +8 -7
  88. package/components/modals/Insufficient-funds-modal.vue +4 -4
  89. package/components/modals/LimitReachedModal.vue +18 -7
  90. package/components/modals/NoAccessModal.vue +7 -3
  91. package/components/modals/PaymentMethodModal.vue +4 -4
  92. package/components/modals/RedirectsBanksModal.vue +4 -4
  93. package/components/modals/ReplenishModal.vue +2 -2
  94. package/components/modals/ReportBugConfirmModal.vue +2 -2
  95. package/components/modals/ReportBugModal.vue +2 -2
  96. package/components/modals/Resend.vue +4 -4
  97. package/components/modals/SubmitApplicationModal.vue +1 -5
  98. package/components/modals/id/AuthModal.vue +27 -47
  99. package/components/modals/id/IdAutoLogoutModal.vue +23 -24
  100. package/components/modals/id/IdBanner.vue +4 -24
  101. package/components/modals/id/IdConfirmAccountOtpModal.vue +5 -4
  102. package/components/modals/id/IdConfirmSuccessfulModal.vue +3 -3
  103. package/components/modals/id/IdLoginModal.vue +8 -8
  104. package/components/modals/id/IdModals.vue +1 -3
  105. package/components/modals/id/IdNewPasswordModal.vue +3 -3
  106. package/components/modals/id/IdOtpInput.vue +3 -3
  107. package/components/modals/id/IdPasswordSuccessfulModal.vue +3 -3
  108. package/components/modals/id/IdRecoveryModal.vue +3 -3
  109. package/components/modals/id/IdRegistrationModal.vue +4 -4
  110. package/components/modals/id/IdResetPasswordOtpModal.vue +5 -4
  111. package/components/modals/id/IdTwoFactorModal.vue +3 -2
  112. package/components/navigation/bottom-navigation/ABottomNavigation.vue +7 -7
  113. package/components/navigation/breadcrumbs/ABreadcrumbs.vue +4 -4
  114. package/components/navigation/footer/AFooter.vue +2 -2
  115. package/components/navigation/footer/ui/a-footer-accordion.vue +1 -1
  116. package/components/navigation/header/AHeader.vue +11 -11
  117. package/components/navigation/header/AlmatyContacts.vue +7 -7
  118. package/components/navigation/header/AstanaContacts.vue +4 -4
  119. package/components/navigation/header/CardGallery.vue +8 -7
  120. package/components/navigation/header/ContactMenu.vue +1 -1
  121. package/components/navigation/header/HeaderLink.vue +5 -5
  122. package/components/navigation/header/HeaderUsage.vue +14 -14
  123. package/components/navigation/header/ListItem.vue +4 -3
  124. package/components/navigation/header/NavCard.vue +6 -5
  125. package/components/navigation/header/NavList.vue +9 -8
  126. package/components/navigation/header/NotificationsMenu.vue +10 -10
  127. package/components/navigation/header/ProductMenu.vue +10 -9
  128. package/components/navigation/header/ProfileMenu.vue +13 -12
  129. package/components/navigation/header/SystemNotification.vue +4 -4
  130. package/components/navigation/line-tabs/ALineTabs.vue +10 -9
  131. package/components/navigation/pill-tabs/APillTabs.vue +18 -16
  132. package/components/navigation/pill-tabs/APillTabsV2.vue +40 -25
  133. package/components/navigation/side-navigation/ASideNavigation.vue +3 -3
  134. package/components/overlays/drawer/ADrawerV2.vue +12 -11
  135. package/components/overlays/modal/AModal.vue +4 -4
  136. package/components/overlays/modal/AModalV2.vue +17 -13
  137. package/components/overlays/side-panel/ASidePanel.vue +7 -7
  138. package/components/overlays/sideover/ASlideover.vue +4 -4
  139. package/components/overlays/tooltip/ATooltip.vue +3 -2
  140. package/components/overlays/tooltip/ATooltipV2.vue +2 -2
  141. package/composables/highlight.ts +2 -1
  142. package/eslint.config.mjs +14 -1
  143. package/icons/arrow/arrow-left.vue +14 -0
  144. package/icons/arrow-currency-gray.vue +1 -1
  145. package/icons/arrow-currency-green.vue +1 -1
  146. package/icons/arrow-currency-red.vue +1 -1
  147. package/icons/avatar.vue +1 -1
  148. package/icons/bar-chart-3.vue +3 -0
  149. package/icons/book-open.vue +3 -0
  150. package/icons/bookmark/bookmark-filled.vue +1 -0
  151. package/icons/braces.vue +3 -0
  152. package/icons/check/check-outline.vue +3 -0
  153. package/icons/chevron/chevron-down-outline.vue +3 -0
  154. package/icons/clipboard-list.vue +3 -0
  155. package/icons/clock-outline.vue +3 -0
  156. package/icons/company-egov-small.vue +1 -1
  157. package/icons/database.vue +3 -0
  158. package/icons/download-outline.vue +3 -0
  159. package/icons/download.vue +1 -1
  160. package/icons/egov.vue +1 -1
  161. package/icons/elicense.vue +1 -1
  162. package/icons/file-json.vue +3 -0
  163. package/icons/file-search.vue +3 -0
  164. package/icons/file-text.vue +3 -0
  165. package/icons/flask-conical.vue +3 -0
  166. package/icons/folder-open.vue +3 -0
  167. package/icons/gift-outline.vue +3 -0
  168. package/icons/globe-2.vue +3 -0
  169. package/icons/graph-loading.vue +2 -2
  170. package/icons/hand/hand-thumb-up-filled.vue +1 -1
  171. package/icons/home.vue +14 -0
  172. package/icons/invoice.vue +1 -0
  173. package/icons/key-round.vue +3 -0
  174. package/icons/letter/letter-a.vue +4 -2
  175. package/icons/letter/letter-b.vue +2 -2
  176. package/icons/letter/letter-c.vue +2 -2
  177. package/icons/letter/letter-d.vue +2 -2
  178. package/icons/letter/letter-e.vue +2 -2
  179. package/icons/logo.vue +1 -1
  180. package/icons/main-filter.vue +1 -1
  181. package/icons/menu.vue +4 -4
  182. package/icons/message/message.vue +1 -1
  183. package/icons/messages-square.vue +3 -0
  184. package/icons/more.vue +1 -1
  185. package/icons/payment/payment-card.vue +2 -2
  186. package/icons/radio/radio-check.vue +1 -1
  187. package/icons/robot-outline.vue +3 -0
  188. package/icons/scales/scale-outline.vue +3 -0
  189. package/icons/search-outline.vue +3 -0
  190. package/icons/send.vue +3 -0
  191. package/icons/star/star-filled.vue +1 -0
  192. package/icons/star/star-half-filled.vue +1 -0
  193. package/icons/sun.vue +1 -0
  194. package/icons/terminal.vue +3 -0
  195. package/icons/toasts/warning-triangle-toast.vue +1 -0
  196. package/icons/triangle-alert.vue +3 -0
  197. package/icons/users-outline.vue +3 -0
  198. package/icons/webhook.vue +3 -0
  199. package/icons/x-outline.vue +3 -0
  200. package/icons/yandex.vue +2 -1
  201. package/illustrations/address-location.vue +2 -2
  202. package/illustrations/award-badge.vue +105 -0
  203. package/illustrations/ball-with-chain.vue +7 -7
  204. package/illustrations/bill.vue +5 -5
  205. package/illustrations/buildings.vue +4 -4
  206. package/illustrations/calendar.vue +11 -11
  207. package/illustrations/chains.vue +12 -12
  208. package/illustrations/coin-percent.vue +3 -3
  209. package/illustrations/coins-stack.vue +4 -4
  210. package/illustrations/delete-dark.vue +1 -0
  211. package/illustrations/delete.vue +1 -0
  212. package/illustrations/doc-with-stamp.vue +5 -5
  213. package/illustrations/document.vue +3 -3
  214. package/illustrations/door.vue +79 -68
  215. package/illustrations/empty-badge-check.vue +20 -0
  216. package/illustrations/empty-ban.vue +18 -0
  217. package/illustrations/empty-box.vue +5 -5
  218. package/illustrations/empty-filter.vue +20 -0
  219. package/illustrations/empty-inbox.vue +19 -0
  220. package/illustrations/empty-scale.vue +22 -0
  221. package/illustrations/empty-search-x.vue +21 -0
  222. package/illustrations/empty-shopping-cart.vue +21 -0
  223. package/illustrations/empty-users-round.vue +20 -0
  224. package/illustrations/empty-wallet.vue +121 -155
  225. package/illustrations/graph-in-coin.vue +2 -2
  226. package/illustrations/hammer.vue +5 -5
  227. package/illustrations/hand-cash.vue +1 -1
  228. package/illustrations/info.vue +49 -36
  229. package/illustrations/mail-active.vue +86 -0
  230. package/illustrations/mail.vue +4 -4
  231. package/illustrations/no-access.vue +92 -0
  232. package/illustrations/ok.vue +86 -58
  233. package/illustrations/people-group.vue +1 -1
  234. package/illustrations/person-with-phone.vue +5 -5
  235. package/illustrations/person.vue +3 -3
  236. package/illustrations/phone-check.vue +104 -84
  237. package/illustrations/phone-payment-method.vue +1 -1
  238. package/illustrations/shield-user.vue +94 -0
  239. package/illustrations/stop-hand.vue +78 -71
  240. package/illustrations/stop-sign.vue +1 -1
  241. package/illustrations/suit.vue +93 -107
  242. package/illustrations/suitcase.vue +6 -6
  243. package/illustrations/terminal.vue +94 -228
  244. package/illustrations/trash-can.vue +60 -102
  245. package/illustrations/turn-on-tariff.vue +2 -2
  246. package/illustrations/two-persons.vue +2 -2
  247. package/lang/en.ts +25 -29
  248. package/lang/kk.ts +24 -28
  249. package/lang/ru.ts +24 -29
  250. package/nuxt.config.ts +11 -4
  251. package/package.json +7 -12
  252. package/assets/styles/index.scss +0 -166
  253. package/assets/styles/modules/_base.scss +0 -5
  254. package/assets/styles/modules/_typography.scss +0 -152
  255. package/components/elements/error-template/types.ts +0 -23
  256. package/illustrations/terminal-dark.vue +0 -48
  257. package/tailwind.config.ts +0 -194
  258. package/tests/AButton.test.ts +0 -81
@@ -46,17 +46,17 @@ const range = defineModel<{
46
46
  const uiConfig = {
47
47
  wrapper: 'transition duration-500 w-full',
48
48
  "input-wrapper": {
49
- base: 'relative inline-block w-full text-sm sm:min-w-full'
49
+ base: 'relative inline-block w-full text-body-md sm:min-w-full'
50
50
  },
51
- base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 hover:outline hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
51
+ base: 'w-full border-0 rounded-sm text-primary mt-0 hover:outline-1 hover:outline-(--border-color-focus) focus:outline-1 focus:outline-(--border-color-focus)',
52
52
  size: {
53
53
  sm: 'h-8 px-4 py-1.5 sm',
54
54
  md: 'h-10 px-4 pb-1.5 pt-[18px] md'
55
55
  },
56
- color: 'bg-deepblue-900 bg-opacity-5 dark:bg-gray-200 dark:bg-opacity-5',
57
- error: 'outline outline-1 outline-red-500 focus:outline-0 focus:border-red-500 hover:border-red-500',
56
+ color: 'bg-muted',
57
+ error: 'outline outline-1 outline-(--border-color-danger) focus:outline-0 focus:border-danger hover:border-danger',
58
58
  label: {
59
- base: 'absolute left-4 top-[50%] d-flex text-gray-500 pointer-events-none transition-all ease duration-300 transform translate-y-[-50%] whitespace-nowrap',
59
+ base: 'absolute left-4 top-[50%] text-secondary pointer-events-none transition-all ease duration-300 whitespace-nowrap',
60
60
  'move-label': '!left-10'
61
61
  },
62
62
  default: {
@@ -139,23 +139,23 @@ const labelClass = computed(() => twMerge(twJoin(
139
139
  <span class="text">{{ label }}</span>
140
140
  <span
141
141
  v-if="required"
142
- class="text-red-600"
142
+ class="text-danger"
143
143
  > *</span>
144
144
  </label>
145
145
 
146
146
  <button
147
147
  v-if="isClearable"
148
- class="absolute top-1/2 right-12 pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 bg-deepblue-900 bg-opacity-10 dark:bg-gray-200 dark:bg-opacity-10 rounded-full p-1"
148
+ class="pointer-events-click absolute right-12 top-1/2 translate-y-[-50%] transform rounded-full bg-badge p-1 text-2xl hover:opacity-80"
149
149
  type="button"
150
150
  @click="date = new Date()"
151
151
  >
152
152
  <a-icon-x-mark
153
153
  filled
154
- class="!mb-0 fill-gray-600 dark:fill-gray-300"
154
+ class="!mb-0 fill-icon-default"
155
155
  />
156
156
  </button>
157
157
  <button
158
- class="absolute top-1/2 right-4 text-gray-500 fill-gray-500 pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 disabled:pointer-events-none"
158
+ class="absolute top-1/2 right-4 text-secondary fill-icon-secondary pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 disabled:pointer-events-none"
159
159
  type="button"
160
160
  @click="() => togglePopover()"
161
161
  >
@@ -171,6 +171,10 @@ const labelClass = computed(() => twMerge(twJoin(
171
171
  </template>
172
172
 
173
173
  <style scoped>
174
+ .label {
175
+ transform: translateY(-50%);
176
+ }
177
+
174
178
  .input {
175
179
  &:focus ~ .label,
176
180
  &:not(:focus):valid ~ .label,
@@ -34,7 +34,7 @@ const inputProps = computed(() => {
34
34
  >
35
35
  <template #endButton>
36
36
  <button
37
- class="absolute top-1/2 right-4 text-gray-500 fill-gray-500 pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 disabled:pointer-events-none"
37
+ class="absolute top-1/2 right-4 text-secondary fill-icon-secondary pointer-events-click text-2xl transform translate-y-[-50%] hover:opacity-80 disabled:pointer-events-none"
38
38
  :disabled="disabled"
39
39
  type="button"
40
40
  :data-test-id="iconEyeTestId"
@@ -48,19 +48,19 @@ const uiConfig = {
48
48
  readonly: 'pointer-events-none user-select-none',
49
49
  disabled: 'pointer-events-none user-select-none opacity-40'
50
50
  },
51
- base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 hover:outline outline-offset-[-1px] hover:outline-1 hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500 mt-0',
51
+ base: 'w-full border-0 rounded-sm text-primary mt-0 outline-offset-[-1px] hover:outline-1 hover:outline-(--border-color-focus) focus:outline-1 focus:outline-(--border-color-focus)',
52
52
  size: {
53
53
  sm: 'h-8 px-4 py-1.5 sm',
54
54
  md: 'h-10 px-4 pb-1.5 pt-[18px] md',
55
55
  smEx: 'h-8 pl-4 pr-10 py-1.5 sm',
56
56
  mdEx: 'h-10 pl-4 pr-10 pb-1.5 pt-[18px] md'
57
57
  },
58
- color: 'bg-deepblue-50 dark:bg-gray-200 dark:bg-opacity-5',
58
+ color: 'bg-muted',
59
59
  error:
60
- 'outline outline-1 outline-red-500 focus:outline-0 focus:border-red-500 hover:border-red-500',
61
- readonly: 'bg-white opacity-30',
60
+ 'outline outline-1 outline-(--border-color-danger) focus:outline-0 focus:border-danger hover:border-danger',
61
+ readonly: 'bg-main opacity-30',
62
62
  label: {
63
- base: 'absolute left-4 top-[50%] d-flex text-gray-500 pointer-events-none transition-all ease duration-300 transform translate-y-[-50%] whitespace-nowrap text-ellipsis md:max-w-[90%] overflow-hidden',
63
+ base: 'absolute left-4 top-[50%] text-secondary pointer-events-none transition-all ease duration-300 whitespace-nowrap text-ellipsis md:max-w-[90%] overflow-hidden',
64
64
  'move-label': '!left-10 md:max-w-[calc(90%-40px)]'
65
65
  },
66
66
  default: {
@@ -249,7 +249,7 @@ defineExpose({
249
249
  <div
250
250
  v-if="autocompleteList.length && isFocused"
251
251
  :class="[
252
- 'absolute z-[31] w-full flex flex-col gap-4 rounded bg-gray-200 p-2 dark:bg-gray-800',
252
+ 'absolute z-[31] w-full flex flex-col gap-4 rounded bg-badge p-2',
253
253
  isDropdownUp ? 'bottom-[44px]' : 'top-[44px]'
254
254
  ]"
255
255
  >
@@ -260,8 +260,8 @@ defineExpose({
260
260
  <li
261
261
  v-for="(item, idx) in autocompleteList"
262
262
  :key="idx"
263
- class="cursor-pointer rounded px-4 py-[10px] transition-colors hover:bg-gray-50 hover:dark:bg-gray-900"
264
- :class="{ 'bg-gray-100 dark:bg-gray-700': currentItemIndex === idx }"
263
+ class="cursor-pointer rounded px-4 py-[10px] transition-colors hover:bg-action-secondary-hover"
264
+ :class="{ 'bg-brand-subtle': currentItemIndex === idx }"
265
265
  @mousedown="onSelectOption(item)"
266
266
  @touchend="onSelectOptionMobile(item)"
267
267
  @touchmove="mobileAutocomMoved = true"
@@ -295,37 +295,37 @@ defineExpose({
295
295
  >
296
296
  <label
297
297
  :for="label"
298
- :class="[{ '!translate-y-[-17px] !text-[10px]': modelValue }, labelClass]"
298
+ :class="[{ 'label--floated': modelValue }, labelClass]"
299
299
  class="label"
300
300
  >
301
301
  <span class="text">{{ label }}</span>
302
302
  <span
303
303
  v-if="required"
304
- class="text-red-600"
304
+ class="text-danger"
305
305
  > *</span>
306
306
  </label>
307
307
 
308
308
  <component
309
309
  :is="startIcon"
310
310
  v-if="startIcon"
311
- class="pointer-events-none absolute left-4 top-1/2 translate-y-[-50%] transform fill-gray-500 text-base text-gray-500"
311
+ class="pointer-events-none absolute left-4 top-1/2 translate-y-[-50%] transform fill-icon-secondary text-base text-secondary"
312
312
  filled
313
313
  />
314
314
  <component
315
315
  :is="endIcon"
316
316
  v-if="endIcon"
317
- class="pointer-events-none absolute right-4 top-1/2 translate-y-[-50%] transform fill-gray-500 text-base text-gray-500"
317
+ class="pointer-events-none absolute right-4 top-1/2 translate-y-[-50%] transform fill-icon-secondary text-base text-secondary"
318
318
  filled
319
319
  />
320
320
  <button
321
321
  v-if="isClearable"
322
- class="pointer-events-click absolute right-4 top-1/2 translate-y-[-50%] transform rounded-full bg-deepblue-900 bg-opacity-10 p-1 text-2xl hover:opacity-80 dark:bg-gray-200 dark:bg-opacity-10"
322
+ class="pointer-events-click absolute right-4 top-1/2 translate-y-[-50%] transform rounded-full bg-badge p-1 text-2xl hover:opacity-80"
323
323
  type="button"
324
324
  @click="onClear"
325
325
  >
326
326
  <a-icon-x-mark
327
327
  filled
328
- class="!mb-0 fill-gray-600 dark:fill-gray-300"
328
+ class="!mb-0 fill-icon-default"
329
329
  />
330
330
  </button>
331
331
  <slot name="endButton" />
@@ -354,6 +354,15 @@ defineExpose({
354
354
  </div>
355
355
  </template>
356
356
  <style scoped>
357
+ .label {
358
+ transform: translateY(-50%);
359
+ }
360
+
361
+ .label--floated {
362
+ font-size: 10px;
363
+ transform: translateY(-17px);
364
+ }
365
+
357
366
  .input {
358
367
  &:focus ~ .label,
359
368
  &:not(:focus):valid ~ .label,
@@ -33,22 +33,22 @@ const props = withDefaults(defineProps<Props>(), {
33
33
  const uiConfig = {
34
34
  wrapper: 'transition duration-500 w-full',
35
35
  'input-wrapper': {
36
- base: 'relative inline-block h-full w-full text-sm sm:min-w-full pt-5 hover:outline hover:outline-1 outline-offset-[-1px] hover:outline-blue-700 hover:dark:outline-blue-500 focus:outline focus:outline-blue-700 focus:dark:outline-blue-500',
36
+ base: 'relative inline-block h-full w-full text-body-md sm:min-w-full pt-5 outline-offset-[-1px] hover:outline-1 hover:outline-(--border-color-focus) focus-within:outline-1 focus-within:outline-(--border-color-focus)',
37
37
  readonly: 'pointer-events-none user-select-none',
38
38
  disabled: 'pointer-events-none user-select-none opacity-40',
39
- color: 'bg-deepblue-900/5 dark:bg-gray-200/5'
39
+ color: 'bg-muted'
40
40
  },
41
- base: 'w-full border-0 rounded-sm text-deepblue-900 dark:text-gray-200 outline-none mt-0',
41
+ base: 'w-full border-0 rounded-sm text-primary outline-hidden mt-0',
42
42
  size: {
43
43
  sm: 'h-8 px-4 py-1.5 sm',
44
44
  md: 'h-10 px-4 pb-1.5 pt-[8px] md'
45
45
  },
46
- color: 'bg-deepblue-900/0 dark:bg-gray-200/0',
46
+ color: 'bg-transparent',
47
47
  error:
48
- 'outline outline-1 outline-red-500 focus:outline-0 focus:border-red-500 hover:border-red-500',
49
- readonly: 'bg-white opacity-30',
48
+ 'outline outline-1 outline-(--border-color-danger) focus:outline-0 focus:border-danger hover:border-danger',
49
+ readonly: 'bg-main opacity-30',
50
50
  label: {
51
- base: 'absolute left-4 top-5 d-flex text-gray-500 pointer-events-none transition-all ease duration-300 transform translate-y-[-50%] whitespace-nowrap',
51
+ base: 'absolute left-4 top-5 text-secondary pointer-events-none transition-all ease duration-300 whitespace-nowrap',
52
52
  'move-label': '!left-10'
53
53
  },
54
54
  default: {
@@ -127,22 +127,22 @@ const labelClass = computed(() =>
127
127
  />
128
128
  <label :class="labelClass" :for="label" class="label cursor-pointer">
129
129
  <span class="text">{{ label }}</span>
130
- <span v-if="required" class="text-red-600"> *</span>
130
+ <span v-if="required" class="text-danger"> *</span>
131
131
  </label>
132
132
 
133
133
  <component
134
134
  :is="startIcon"
135
135
  v-if="startIcon"
136
- class="pointer-events-none absolute left-4 top-5 translate-y-[-50%] transform fill-gray-500 text-base text-gray-500"
136
+ class="pointer-events-none absolute left-4 top-5 translate-y-[-50%] transform fill-icon-secondary text-base text-secondary"
137
137
  filled
138
138
  />
139
139
  <button
140
140
  v-if="isClearable"
141
- class="pointer-events-click absolute right-4 top-5 translate-y-[-50%] transform rounded-full bg-deepblue-900 bg-opacity-10 p-1 text-2xl hover:opacity-80 dark:bg-gray-200 dark:bg-opacity-10"
141
+ class="pointer-events-click absolute right-4 top-5 translate-y-[-50%] transform rounded-full bg-badge p-1 text-2xl hover:opacity-80"
142
142
  type="button"
143
143
  @click="modelValue = ''"
144
144
  >
145
- <a-icon-x-mark class="!mb-0 fill-gray-600 dark:fill-gray-300" filled />
145
+ <a-icon-x-mark class="!mb-0 fill-icon-default" filled />
146
146
  </button>
147
147
  <slot name="endButton" />
148
148
  </div>
@@ -161,6 +161,10 @@ const labelClass = computed(() =>
161
161
  </template>
162
162
 
163
163
  <style scoped>
164
+ .label {
165
+ transform: translateY(-50%);
166
+ }
167
+
164
168
  .input {
165
169
  &::-webkit-scrollbar {
166
170
  display: none;
@@ -30,7 +30,7 @@ interface Props {
30
30
  readonly?: boolean
31
31
  error?: string | string[]
32
32
  size?: 'sm' | 'md'
33
- variant?: 'default' | 'gray' | 'blue'
33
+ variant?: 'default' | 'gray' | 'blue' | 'canvas'
34
34
  rows?: number
35
35
  resize?: 'none' | 'vertical' | 'both'
36
36
  maxlength?: number
@@ -57,15 +57,20 @@ const errorMessages = computed(() => {
57
57
 
58
58
  const fieldClass = computed(() => {
59
59
  if (props.disabled) {
60
- return 'border-gray-200 bg-gray-100/70 dark:border-gray-700 dark:bg-white/[0.03]'
60
+ return 'border-default bg-badge/70'
61
61
  }
62
62
  if (props.variant === 'gray') {
63
- return 'border-transparent bg-gray-50 dark:border-transparent dark:bg-white/[0.04]'
63
+ /* по макету ДС-2026 у залитого поля бордер видимый, а не прозрачный */
64
+ return 'border-default bg-muted'
64
65
  }
65
66
  if (props.variant === 'blue') {
66
- return 'border-blue-200 bg-blue-50 dark:border-blue-900/50 dark:bg-blue-900/20'
67
+ return 'border-brand-200 bg-brand-subtle'
67
68
  }
68
- return 'border-gray-200 bg-white dark:border-gray-700 dark:bg-gray-900'
69
+ if (props.variant === 'canvas') {
70
+ /* «утопленная» зона ДС: bg-canvas глубже bg-muted в дарке (парно с AInputV2) */
71
+ return 'border-default bg-canvas'
72
+ }
73
+ return 'border-default bg-main'
69
74
  })
70
75
 
71
76
  const resizeClass = computed(() => {
@@ -122,19 +127,19 @@ defineExpose({ focus, blur, textareaRef })
122
127
  </script>
123
128
 
124
129
  <template>
125
- <div class="textarea-v2 relative w-full text-sm" v-bind="wrapperAttrs">
130
+ <div class="textarea-v2 relative w-full text-body-md" v-bind="wrapperAttrs">
126
131
  <div
127
- class="textarea-v2__field relative rounded-[10px] border border-solid transition-colors duration-200 focus-within:border-blue-600 focus-within:ring-2 focus-within:ring-blue-600/20 hover:border-blue-500 dark:focus-within:border-blue-400 dark:focus-within:ring-blue-400/20 dark:hover:border-blue-400"
132
+ class="textarea-v2__field relative rounded-10 border border-solid transition-colors duration-200 focus-within:border-focus focus-within:ring-2 focus-within:ring-brand-500/20 hover:border-brand"
128
133
  :class="[fieldClass, { 'textarea-v2__field--error': hasError, 'textarea-v2__field--disabled': disabled }]"
129
134
  >
130
135
  <label
131
136
  v-if="label"
132
137
  :for="inputId"
133
138
  :data-size="size"
134
- class="textarea-v2__label pointer-events-none absolute left-4 max-w-[calc(100%-2rem)] truncate text-gray-500 dark:text-gray-400"
139
+ class="textarea-v2__label pointer-events-none absolute left-4 max-w-[calc(100%-2rem)] truncate text-secondary"
135
140
  :class="{ 'textarea-v2__label--floated': isLabelFloated }"
136
141
  >
137
- {{ label }}<span v-if="required" class="text-red-500 dark:text-red-400">&nbsp;*</span>
142
+ {{ label }}<span v-if="required" class="text-danger">&nbsp;*</span>
138
143
  </label>
139
144
 
140
145
  <textarea
@@ -147,7 +152,7 @@ defineExpose({ focus, blur, textareaRef })
147
152
  :disabled="disabled"
148
153
  :readonly="readonly"
149
154
  :tabindex="disabled ? -1 : 0"
150
- class="textarea-v2__input text-deepblue-900 block w-full bg-transparent leading-snug outline-none placeholder:text-gray-500 disabled:cursor-not-allowed dark:text-gray-200 dark:placeholder:text-gray-400"
155
+ class="textarea-v2__input block w-full bg-transparent leading-snug text-primary outline-hidden placeholder:text-secondary disabled:cursor-not-allowed"
151
156
  :class="[resizeClass, paddingClass]"
152
157
  v-bind="inputAttrs"
153
158
  @focus="onFocus"
@@ -156,7 +161,7 @@ defineExpose({ focus, blur, textareaRef })
156
161
 
157
162
  <span
158
163
  v-if="maxlength"
159
- class="textarea-v2__counter pointer-events-none absolute bottom-1.5 right-3 text-[10px] text-gray-400 dark:text-gray-500"
164
+ class="textarea-v2__counter pointer-events-none absolute right-3 bottom-1.5 text-body-sm text-icon-disabled"
160
165
  >
161
166
  {{ modelValue?.length ?? 0 }}/{{ maxlength }}
162
167
  </span>
@@ -170,7 +175,7 @@ defineExpose({ focus, blur, textareaRef })
170
175
  leave-from-class="textarea-v2__error-leave-from"
171
176
  leave-to-class="textarea-v2__error-leave-to"
172
177
  >
173
- <p v-if="hasError" class="mt-1 flex flex-col text-xs text-red-500 dark:text-red-400">
178
+ <p v-if="hasError" class="mt-1 flex flex-col text-body-sm text-danger">
174
179
  <span v-for="(err, idx) in errorMessages" :key="idx">{{ err }}</span>
175
180
  </p>
176
181
  </transition>
@@ -179,7 +184,7 @@ defineExpose({ focus, blur, textareaRef })
179
184
 
180
185
  <style scoped>
181
186
  .textarea-v2__field--error {
182
- border-color: theme('colors.red.500');
187
+ border-color: var(--border-color-danger);
183
188
  }
184
189
 
185
190
  .textarea-v2__field--disabled {
@@ -14,11 +14,11 @@
14
14
  >
15
15
  <label
16
16
  :for="name"
17
- class="flex items-center text-deepblue-900 dark:text-gray-200 cursor-pointer w-full whitespace-nowrap"
17
+ class="flex items-center text-primary cursor-pointer w-full whitespace-nowrap"
18
18
  :class="[textSizeOptions[size]]"
19
19
  >
20
20
  <span v-if="side==='left'" class="select-none w-full"><slot/></span>
21
- <component :is="currentComponent" class="text-deepblue-900 dark:text-gray-200 w-full"
21
+ <component :is="currentComponent" class="text-primary w-full"
22
22
  :class="[sizeOptions[size]]"
23
23
  />
24
24
  <span v-if="side==='right'" class="select-none w-full"><slot/></span>
@@ -76,8 +76,8 @@ const sizeOptions = {
76
76
  sm: 'min-w-4 min-h-4 max-w-4 max-h-4'
77
77
  }
78
78
  const textSizeOptions = {
79
- lg: 'text-sm gap-2',
80
- sm: 'text-xs gap-2'
79
+ lg: 'text-body-md gap-2',
80
+ sm: 'text-body-sm gap-2'
81
81
  }
82
82
 
83
83
  watch(model, async (e) => {
@@ -51,21 +51,21 @@ onMounted(() => {
51
51
  </script>
52
52
 
53
53
  <template>
54
- <div class="rounded-[20px] bg-blue-700 dark:bg-[#1B98E2] p-4 dark:bg-blue-500 lg:p-8">
54
+ <div class="rounded-[20px] bg-brand p-4 lg:p-8">
55
55
  <div class="flex w-full flex-col gap-4 lg:flex-row lg:justify-between">
56
- <div class="flex flex-col gap-4 text-white dark:text-gray-900 lg:max-w-[50%] lg:gap-6">
56
+ <div class="flex flex-col gap-4 text-white lg:max-w-[50%] lg:gap-6">
57
57
  <slot name="title">
58
- <p class="md:text-[32px] text-[24px] font-bold">
58
+ <p class="text-h2 md:text-display-sm">
59
59
  {{ title || t('forms.request_demo.title') }}
60
60
  </p>
61
61
  </slot>
62
62
  <slot name="description">
63
- <p class="text-base whitespace-pre-line">
63
+ <p class="text-body-lg whitespace-pre-line">
64
64
  {{ description || t('forms.request_demo.info') }}
65
65
  </p>
66
66
  </slot>
67
67
  </div>
68
- <div class="rounded-[20px] bg-white p-6 dark:bg-gray-900 lg:w-[456px]">
68
+ <div class="rounded-[20px] bg-main p-6 lg:w-[456px]">
69
69
  <div class="flex flex-col gap-4">
70
70
  <slot name="inputs">
71
71
  <div class="flex flex-col gap-4">
@@ -55,14 +55,14 @@ const offIconClassFormatted = computed(() => {
55
55
 
56
56
 
57
57
  const ui = {
58
- "base": "relative inline-flex flex-shrink-0 border-2 border-transparent disabled:cursor-not-allowed disabled:opacity-50 focus:outline-none transition ease-in-out",
58
+ "base": "relative inline-flex shrink-0 border-2 border-transparent disabled:cursor-not-allowed disabled:opacity-50 focus:outline-hidden transition ease-in-out",
59
59
  "rounded": "rounded-full",
60
- "ring": "focus-visible:ring-2 focus-visible:ring-blue-500 dark:focus-visible:ring-blue-400 focus-visible:ring-offset-2 focus-visible:ring-offset-white dark:focus-visible:ring-offset-gray-900",
60
+ "ring": "focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 focus-visible:ring-offset-(--background-color-main)",
61
61
  "active": {
62
- "blue": "bg-blue-700 dark:bg-blue-500",
63
- "green": "bg-green"
62
+ "blue": "bg-action-primary",
63
+ "green": "bg-success"
64
64
  },
65
- "inactive": "bg-gray-200 dark:bg-gray-200/20",
65
+ "inactive": "bg-badge",
66
66
  "size": {
67
67
  "2xs": "h-3 w-5",
68
68
  "xs": "h-3.5 w-6",
@@ -73,7 +73,8 @@ const ui = {
73
73
  "2xl": "h-8 w-[3.75rem]"
74
74
  },
75
75
  "container": {
76
- "base": "pointer-events-none relative inline-block rounded-full bg-white dark:bg-gray-900 shadow transform ring-0 transition ease-in-out duration-200",
76
+ /* осознанно константный белый бегунок на цветном треке: bg-white не флипается в тёмной теме */
77
+ "base": "pointer-events-none relative inline-block rounded-full bg-white shadow-sm transform ring-0 transition ease-in-out duration-200",
77
78
  "active": {
78
79
  "2xs": "translate-x-2 rtl:-translate-x-2",
79
80
  "xs": "translate-x-2.5 rtl:-translate-x-2.5",
@@ -108,7 +109,7 @@ const ui = {
108
109
  "2xl": "h-6 w-6"
109
110
  },
110
111
  // "on": "text-{color}-500 dark:text-{color}-400",
111
- // "off": "text-gray-400 dark:text-gray-500"
112
+ // "off": "text-icon-disabled"
112
113
  },
113
114
  }
114
115
 
@@ -33,28 +33,29 @@ function toggle() {
33
33
  :aria-checked="model"
34
34
  :aria-disabled="disabled || undefined"
35
35
  :disabled="disabled"
36
- class="toggle-v2 group inline-flex select-none items-center gap-2 rounded-full focus:outline-none disabled:cursor-not-allowed disabled:opacity-50"
36
+ class="toggle-v2 group inline-flex select-none items-center gap-2 rounded-full focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50"
37
37
  :class="labelSide === 'right' ? 'flex-row-reverse' : ''"
38
38
  @click="toggle"
39
39
  >
40
40
  <span
41
41
  v-if="label"
42
- class="text-gray-600 transition-colors group-hover:text-gray-800 dark:text-gray-300 dark:group-hover:text-gray-100"
42
+ class="text-quaternary transition-colors group-hover:text-primary"
43
43
  :class="s.text"
44
44
  >
45
45
  {{ label }}
46
46
  </span>
47
47
  <span
48
- class="relative inline-flex shrink-0 items-center rounded-full ring-1 ring-inset transition-colors duration-200 group-focus-visible:ring-2 group-focus-visible:ring-blue-500/50"
48
+ class="relative inline-flex shrink-0 items-center rounded-full ring-1 ring-inset transition-colors duration-200 group-focus-visible:ring-2 group-focus-visible:ring-brand-500/50"
49
49
  :class="[
50
50
  s.track,
51
51
  model
52
- ? 'bg-blue-600 ring-blue-600/30 dark:bg-blue-500 dark:ring-blue-400/30'
53
- : 'bg-gray-200 ring-gray-300/60 dark:bg-gray-700 dark:ring-gray-600/60',
52
+ ? 'bg-brand ring-brand-500/30'
53
+ : 'bg-badge ring-(--border-color-strong)/60',
54
54
  ]"
55
55
  >
56
+ <!-- осознанно константный: белый бегунок на цветном треке, bg-white не флипается в тёмной теме -->
56
57
  <span
57
- class="toggle-v2__knob inline-block rounded-full bg-white shadow-sm transition-transform duration-200 will-change-transform dark:bg-gray-100"
58
+ class="toggle-v2__knob inline-block rounded-full bg-white shadow-xs transition-transform duration-200 will-change-transform"
58
59
  :class="[s.knob, model ? s.on : s.off]"
59
60
  />
60
61
  </span>
@@ -7,14 +7,14 @@ const emit = defineEmits<{
7
7
 
8
8
  <template>
9
9
  <div class="flex flex-col justify-center items-center gap-5">
10
- <p class="heading-02">
10
+ <p class="text-h2">
11
11
  {{ $t('login.modal.title') }}
12
12
  </p>
13
13
  <a-ill-mail />
14
- <p class="body-400 text-center">
14
+ <p class="text-body-md text-center">
15
15
  {{ $t('login.modal.subtitle1') }}
16
16
  </p>
17
- <p class="body-400 text-center">
17
+ <p class="text-body-md text-center">
18
18
  {{ $t('login.modal.confirmationEmail') }}
19
19
  </p>
20
20
  <div class="flex flex-col gap-2 w-full">
@@ -34,12 +34,12 @@ const { t, rt, tm } = useI18n()
34
34
  @close="isOpen = false"
35
35
  >
36
36
  <div class="flex flex-col gap-5 lg:w-[458px]">
37
- <h3 class="heading-02 text-center lg:text-left">
37
+ <h3 class="text-h2 text-center lg:text-left">
38
38
  {{ t('tariffs.aboutTariff') }}
39
39
  </h3>
40
40
  <div class="flex flex-col gap-2 lg:pb-0">
41
41
  <div
42
- class="body-400 relative grid w-full grid-cols-1 grid-rows-2 gap-[43px] px-4 py-8 lg:max-w-[458px] lg:px-[70px] lg:py-[27px]"
42
+ class="text-body-md relative grid w-full grid-cols-1 grid-rows-2 gap-[43px] px-4 py-8 lg:max-w-[458px] lg:px-[70px] lg:py-[27px]"
43
43
  >
44
44
  <img
45
45
  class="absolute size-full"
@@ -51,7 +51,7 @@ const { t, rt, tm } = useI18n()
51
51
  <div>
52
52
  {{ t('reuse.subscribe') }}
53
53
  </div>
54
- <h4 class="md:heading-02 heading-03">
54
+ <h4 class="md:text-h2 text-h3">
55
55
  {{ t(`tariffs.modals.${id}.name`) }}
56
56
  </h4>
57
57
  </div>
@@ -59,9 +59,9 @@ const { t, rt, tm } = useI18n()
59
59
  <div>
60
60
  {{ t('reuse.startingFrom') }}
61
61
  </div>
62
- <div class="md:heading-02 heading-03">
62
+ <div class="md:text-h2 text-h3">
63
63
  {{ t(`tariffs.modals.${id}.price`) }} <span
64
- class="body-400"
64
+ class="text-body-md"
65
65
  >{{ t(`tariffs.modals.${id}.period`) }}</span>
66
66
  </div>
67
67
  </div>
@@ -71,9 +71,10 @@ const { t, rt, tm } = useI18n()
71
71
  </p>
72
72
  </div>
73
73
  <div class="flex flex-wrap gap-1 sm:gap-2">
74
+ <!-- осознанно константный text-white: белый текст на цветной brand-пилюле -->
74
75
  <div
75
76
  v-for="(item, index) in tm(`tariffs.modals.${id}.professions`)"
76
- class=" h-7 rounded-full bg-blue-700 px-[10px] py-[5px] text-xs leading-[16px] text-white dark:bg-blue-500 dark:text-gray-900 "
77
+ class="h-7 rounded-full bg-brand px-[10px] py-[5px] text-body-sm text-white"
77
78
  >
78
79
  {{ rt(item) }}
79
80
  </div>
@@ -83,8 +84,8 @@ const { t, rt, tm } = useI18n()
83
84
  v-for="(item, index) in tm(`tariffs.modals.${id}.functions`)"
84
85
  class="flex items-center gap-[1.5px]"
85
86
  >
86
- <checkmark-circle class="shrink-0 text-green-500 dark:text-green-400" />
87
- <p class="text-xs">
87
+ <checkmark-circle class="shrink-0 text-success" />
88
+ <p class="text-body-sm">
88
89
  {{ rt(item) }}
89
90
  </p>
90
91
  </div>
@@ -92,7 +93,7 @@ const { t, rt, tm } = useI18n()
92
93
  </div>
93
94
  <div
94
95
  class="flex gap-4"
95
- :class="device.isMobile ? 'bg-white dark:bg-gray-900 m-0 p-4 sticky bottom-0 left-0 w-full' : ''"
96
+ :class="device.isMobile ? 'bg-main m-0 p-4 sticky bottom-0 left-0 w-full' : ''"
96
97
  >
97
98
  <a-button
98
99
  view="outline"
@@ -22,23 +22,24 @@ function onToMain() {
22
22
  <a-modal-v2
23
23
  v-model="isOpen"
24
24
  width="424px"
25
+ hide-header-border
25
26
  @close="onClose"
26
27
  >
27
28
  <div class="flex flex-col items-center justify-center gap-4 px-6 pb-4">
28
29
  <a-ill-phone-check />
29
- <p class="body-400 text-center">
30
+ <p class="text-h4 whitespace-pre-wrap text-center">
31
+ {{ t('modals.another_device_modal.title') }}
32
+ </p>
33
+ <p class="text-body-md whitespace-pre-wrap text-center text-quaternary">
30
34
  {{ t('modals.another_device_modal.info') }}
31
35
  </p>
32
- <div
33
- class="body-400 flex gap-2 rounded-md border border-red-500 bg-[#FDECEB] p-3 text-red-500 dark:border-red-400 dark:bg-red-400/10 dark:text-red-400"
36
+ <a-alert
37
+ color="red"
38
+ icon-type="triangle"
39
+ size="xs"
34
40
  >
35
- <a-icon-warning-triangle
36
- class="size-4 shrink-0"
37
- />
38
- <span class="text-xs">
39
- {{ t('modals.another_device_modal.alert') }}
40
- </span>
41
- </div>
41
+ {{ t('modals.another_device_modal.alert') }}
42
+ </a-alert>
42
43
  </div>
43
44
  <template #footer>
44
45
  <div class="flex w-full gap-2">
@@ -19,10 +19,11 @@ const modalText = {
19
19
  v-model="isOpen"
20
20
  width="424px"
21
21
  :persistent="true"
22
+ hide-header-border
22
23
  >
23
- <div class="flex flex-col items-center justify-center gap-4 px-6 py-4">
24
+ <div class="flex flex-col items-center justify-center gap-4 px-6 pb-4">
24
25
  <a-ill-ok />
25
- <p class="body-400 text-center">
26
+ <p class="text-body-md text-center text-quaternary">
26
27
  {{ modalText.info }}
27
28
  </p>
28
29
  </div>
@@ -32,7 +32,7 @@ function cancel() {
32
32
  >
33
33
  <div class="flex flex-col items-center justify-center gap-4 px-6 py-4">
34
34
  <a-ill-turn-on-tariff />
35
- <p class="body-400 whitespace-pre-wrap text-center">
35
+ <p class="text-body-md whitespace-pre-wrap text-center">
36
36
  {{ t('modals.connecting.questions') }}
37
37
  </p>
38
38
  </div>