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
@@ -39,22 +39,22 @@ const usageLevel = computed<'normal' | 'warning' | 'critical'>(() => {
39
39
  const barColorClass = computed(() => {
40
40
  switch (usageLevel.value) {
41
41
  case 'critical':
42
- return 'bg-red-500 dark:bg-red-400'
42
+ return 'bg-danger'
43
43
  case 'warning':
44
- return 'bg-yellow-500 dark:bg-yellow-400'
44
+ return 'bg-warning'
45
45
  default:
46
- return 'bg-blue-600 dark:bg-blue-500'
46
+ return 'bg-brand'
47
47
  }
48
48
  })
49
49
 
50
50
  const valueColorClass = computed(() => {
51
51
  switch (usageLevel.value) {
52
52
  case 'critical':
53
- return 'text-red-600 dark:text-red-400'
53
+ return 'text-icon-danger'
54
54
  case 'warning':
55
- return 'text-yellow-600 dark:text-yellow-400'
55
+ return 'text-warning'
56
56
  default:
57
- return 'text-gray-900 dark:text-gray-100'
57
+ return 'text-primary'
58
58
  }
59
59
  })
60
60
  </script>
@@ -72,9 +72,9 @@ const valueColorClass = computed(() => {
72
72
  :z-index="10001"
73
73
  content-class="py-0.5"
74
74
  >
75
- <gauge class="size-4 shrink-0 text-gray-600 dark:text-gray-300" />
75
+ <gauge class="size-4 shrink-0 text-quaternary" />
76
76
 
77
- <div class="h-1.5 w-20 rounded-full bg-deepblue-900/30 dark:bg-white/30">
77
+ <div class="h-1.5 w-20 rounded-full bg-badge">
78
78
  <div
79
79
  class="usage-bar h-full rounded-full"
80
80
  :class="barColorClass"
@@ -89,17 +89,17 @@ const valueColorClass = computed(() => {
89
89
  <span
90
90
  class="font-bold transition-colors duration-300"
91
91
  :class="valueColorClass"
92
- >{{ limitRemaining }}</span><span class="font-medium text-gray-600 dark:text-gray-300">/{{ maxLimit }}</span>
92
+ >{{ limitRemaining }}</span><span class="font-medium text-quaternary">/{{ maxLimit }}</span>
93
93
  </span>
94
94
 
95
95
  <template #content>
96
- <span class="whitespace-nowrap text-body-sm leading-none text-deepblue-900 dark:text-gray-100">
96
+ <span class="whitespace-nowrap text-body-sm leading-none text-primary">
97
97
  Лимит запросов: {{ limitRemaining }}
98
98
  </span>
99
99
  </template>
100
100
  </a-tooltip-v2>
101
101
 
102
- <span class="h-4 w-px shrink-0 bg-deepblue-900/15 dark:bg-white/15" />
102
+ <span class="h-4 w-px shrink-0 bg-(--border-color-default)" />
103
103
 
104
104
  <a-tooltip-v2
105
105
  class="shrink-0"
@@ -112,12 +112,12 @@ const valueColorClass = computed(() => {
112
112
  class="flex shrink-0 items-center gap-1.5"
113
113
  data-test-id="header-usage-days"
114
114
  >
115
- <calendar class="size-4 shrink-0 text-gray-600 dark:text-gray-300" />
116
- <span class="text-body-md font-bold tabular-nums text-gray-900 dark:text-gray-100">{{ daysRemaining }}</span>
115
+ <calendar class="size-4 shrink-0 text-quaternary" />
116
+ <span class="text-body-md font-bold tabular-nums text-primary">{{ daysRemaining }}</span>
117
117
  </div>
118
118
 
119
119
  <template #content>
120
- <span class="whitespace-nowrap text-body-sm leading-none text-deepblue-900 dark:text-gray-100">
120
+ <span class="whitespace-nowrap text-body-sm leading-none text-primary">
121
121
  Остаток дней: {{ daysRemaining }}
122
122
  </span>
123
123
  </template>
@@ -4,15 +4,16 @@
4
4
  @mouseenter="hover = true"
5
5
  @mouseleave="hover = false"
6
6
  :class="{'opacity-30' : !hover && someHovered}"
7
- class="flex items-center gap-4 px-2.5 py-2 hover:bg-gray-50 rounded-md dark:hover:bg-gray-800 normal-case transition-all "
7
+ class="flex items-center gap-4 px-2.5 py-2 hover:bg-action-secondary-hover rounded-md normal-case transition-all "
8
8
  >
9
- <div class="min-w-8 h-8 rounded-md flex items-center justify-center dark:text-gray-900 text-white bg-gradient-blue">
9
+ <!-- осознанно константный: белая иконка на брендовом градиенте bg-gradient-blue -->
10
+ <div class="min-w-8 h-8 rounded-md flex items-center justify-center text-white bg-gradient-blue">
10
11
  <component
11
12
  :is="item.icon"
12
13
  class="h-5 w-5"
13
14
  />
14
15
  </div>
15
- <span class="text-sm text-deepblue-900 dark:text-[#E3E5E8]">{{ item.title }}</span>
16
+ <span class="text-body-md text-primary">{{ item.title }}</span>
16
17
  </nuxt-link-locale>
17
18
  </template>
18
19
 
@@ -12,24 +12,25 @@ const hover = ref(false)
12
12
  <template>
13
13
  <nuxt-link-locale
14
14
  :to="item.to"
15
- class="flex h-full justify-between xl:gap-4 rounded-[0.5rem] bg-gray-50 p-4 dark:bg-gray-800 transition-all dark:hover:bg-gray-800"
15
+ class="flex h-full justify-between xl:gap-4 rounded-[0.5rem] bg-muted p-4 transition-all"
16
16
  :class="{'opacity-30': !hover && someHovered}"
17
17
  @mouseenter="hover = true"
18
18
  @mouseleave="hover = false"
19
19
  >
20
20
  <div class="normal-case">
21
21
  <h4
22
- class="mb-2 font-semibold text-deepblue-900 dark:text-[#E3E5E8]"
23
- :class="{'heading-04' : size==='lg', 'heading-05' : size === 'sm'}"
22
+ class="mb-2 text-primary"
23
+ :class="{'text-h5' : size==='lg', 'text-body-md-strong' : size === 'sm'}"
24
24
  >
25
25
  {{ item.title }}
26
26
  </h4>
27
- <p class="text-gray-600 dark:text-gray-300 body-400">
27
+ <p class="text-quaternary text-body-md">
28
28
  {{ item.subtitle ? item.subtitle : '' }}
29
29
  </p>
30
30
  </div>
31
+ <!-- осознанно константный: белая иконка на брендовом градиенте bg-gradient-blue -->
31
32
  <div
32
- class="flex items-center justify-center self-end rounded-md bg-gradient-blue dark:text-gray-900 text-white"
33
+ class="flex items-center justify-center self-end rounded-md bg-gradient-blue text-white"
33
34
  :class="{'h-8 min-w-8' : size==='sm', 'h-16 min-w-16' : size==='lg'}"
34
35
  >
35
36
  <component
@@ -31,10 +31,11 @@ function isActive(itemPath: string) {
31
31
  <div class="mb-3 flex items-start justify-between gap-2">
32
32
  <nuxt-link-locale
33
33
  :to="link"
34
- class="group/title flex min-w-0 items-center gap-2 text-base font-semibold text-deepblue-900 transition-colors hover:text-blue-700 dark:text-gray-100 dark:hover:text-blue-500"
34
+ class="group/title flex min-w-0 items-center gap-2 text-body-lg-strong text-primary transition-colors hover:text-link-hover"
35
35
  >
36
+ <!-- осознанно константный: белая иконка на брендовом ховер-фоне -->
36
37
  <span
37
- class="flex size-8 shrink-0 items-center justify-center rounded-md bg-blue-50 text-blue-500 transition-colors group-hover/title:bg-blue-700 group-hover/title:text-white dark:bg-blue-500/10 dark:text-blue-500 dark:group-hover/title:bg-blue-500">
38
+ class="flex size-8 shrink-0 items-center justify-center rounded-md bg-brand-subtle text-brand transition-colors group-hover/title:bg-action-primary-hover group-hover/title:text-white">
38
39
  <component
39
40
  :is="icon"
40
41
  class="size-4"
@@ -53,15 +54,15 @@ function isActive(itemPath: string) {
53
54
  v-if="item.to"
54
55
  :to="item.to"
55
56
  itemprop="name"
56
- class="group/item flex items-center gap-2 rounded-md px-2 py-1.5 transition-colors hover:bg-gray-50 dark:hover:bg-gray-200/10"
57
- :class="{ 'bg-blue-100 dark:bg-gray-200/10': isActive(item.to) }"
57
+ class="group/item flex items-center gap-2 rounded-md px-2 py-1.5 transition-colors hover:bg-action-secondary-hover"
58
+ :class="{ 'bg-blue-subtle': isActive(item.to) }"
58
59
  >
59
- <a-icon-chevron-right class="size-[14px] shrink-0 text-gray-300 group-hover/item:text-blue-500 dark:group-hover/item:text-blue-700" />
60
+ <a-icon-chevron-right class="size-[14px] shrink-0 text-icon-disabled group-hover/item:text-brand" />
60
61
  <span
61
- class="min-w-0 text-sm normal-case transition-colors group-hover/item:text-deepblue-900 group-hover/item:font-semibold dark:group-hover/item:text-gray-100"
62
+ class="min-w-0 text-body-md normal-case transition-colors group-hover/item:text-primary group-hover/item:font-semibold"
62
63
  :class="isActive(item.to)
63
- ? 'text-blue-700 dark:text-blue-500'
64
- : 'text-gray-600 dark:text-gray-300'"
64
+ ? 'text-brand'
65
+ : 'text-quaternary'"
65
66
  >{{ item.title }}</span>
66
67
  </nuxt-link-locale>
67
68
  </li>
@@ -14,37 +14,37 @@ defineProps<{
14
14
  }>()
15
15
  </script>
16
16
  <template>
17
- <div class="flex w-[423px] flex-col gap-4 rounded-md bg-white p-4 dark:bg-gray-900">
17
+ <div class="flex w-[423px] flex-col gap-4 rounded-md bg-main p-4">
18
18
  <div class="flex items-center justify-between">
19
- <h4 class="heading-04">Уведомления</h4>
19
+ <h4 class="text-h5">Уведомления</h4>
20
20
  <ADigitBadge :value="`${notifications?.length} новых`" size="lg" />
21
21
  </div>
22
- <hr class="border-deepblue-900/5 dark:border-gray-200/5" />
22
+ <hr class="border-default" />
23
23
 
24
24
  <ul v-if="notifications?.length" class="flex flex-col gap-2">
25
25
  <li
26
26
  v-for="(notification, idx) in notifications"
27
27
  :key="idx"
28
- class="flex items-center justify-between gap-2.5 rounded-sm bg-gray-50 px-4 py-2 dark:bg-gray-950"
28
+ class="flex items-center justify-between gap-2.5 rounded-sm bg-muted px-4 py-2"
29
29
  >
30
- <div class="rounded-full bg-blue-500 p-2">
30
+ <div class="rounded-full bg-brand p-2">
31
31
  <icon-user />
32
32
  </div>
33
33
  <div class="flex flex-col items-start gap-1 break-all">
34
- <p class="body-s-400">
34
+ <p class="text-body-md">
35
35
  {{ notification.message + ' ' }}
36
- <a class="link-s-400" href="#">{{ notification.email }}</a>
36
+ <a class="text-body-md text-link" href="#">{{ notification.email }}</a>
37
37
  </p>
38
- <p class="text-[12px] leading-4 dark:text-gray-300">{{ notification.date }}</p>
38
+ <p class="text-body-sm">{{ notification.date }}</p>
39
39
  </div>
40
40
  </li>
41
41
  </ul>
42
42
 
43
43
  <div v-else class="flex flex-col items-center gap-4 py-8">
44
- <p class="body-400">Новых уведомлений нет</p>
44
+ <p class="text-body-md">Новых уведомлений нет</p>
45
45
  </div>
46
46
 
47
- <hr class="border-deepblue-900/5 dark:border-gray-200/5" />
47
+ <hr class="border-default" />
48
48
  <AButton block>Посмотреть все уведомления</AButton>
49
49
  </div>
50
50
  </template>
@@ -35,7 +35,7 @@ function handleExportClick() {
35
35
 
36
36
  <template>
37
37
  <div class="capitalize">
38
- <div class="relative bg-white dark:bg-gray-950">
38
+ <div class="relative bg-main">
39
39
  <div class="a-container max-h-[calc(100dvh-4rem)] overflow-y-auto overscroll-contain py-8">
40
40
  <div class="flex justify-between gap-5">
41
41
  <div class="grid min-w-0 flex-1 grid-cols-5 gap-3">
@@ -43,7 +43,7 @@ function handleExportClick() {
43
43
  v-for="(column, index) in catalogColumns"
44
44
  :key="index"
45
45
  class="flex flex-col gap-[22px]"
46
- :class="index > 0 ? 'border-l border-gray-100 pl-3 dark:border-gray-800' : ''"
46
+ :class="index > 0 ? 'border-l border-default pl-3' : ''"
47
47
  >
48
48
  <nav-list
49
49
  v-for="module in column"
@@ -62,29 +62,30 @@ function handleExportClick() {
62
62
  v-if="module.key === 'edo'"
63
63
  #bottom
64
64
  >
65
- <div class="mt-4 flex flex-col gap-4 rounded-lg bg-blue-700 p-4 normal-case text-white dark:bg-blue-500">
65
+ <!-- осознанно константный: белый текст на брендовой solid-карточке bg-brand -->
66
+ <div class="mt-4 flex flex-col gap-4 rounded-lg bg-brand p-4 normal-case text-white">
66
67
  <div class="flex items-center gap-3">
67
- <span class="rounded-[10px] bg-white p-[10px] dark:bg-gray-950">
68
- <a-icon-download-rounded class="size-5 text-blue-700 dark:text-blue-500" />
68
+ <span class="rounded-[10px] bg-main p-[10px]">
69
+ <a-icon-download-rounded class="size-5 text-brand" />
69
70
  </span>
70
- <span class="font-semibold text-white dark:text-gray-950">
71
+ <span class="font-semibold text-white">
71
72
  {{ t('header.products.exportCard.title') }}
72
73
  </span>
73
74
  </div>
74
75
 
75
- <div class="text-xs text-white dark:text-gray-950">
76
+ <div class="text-body-sm text-white">
76
77
  {{ t('header.products.exportCard.subTitle') }}
77
78
  </div>
78
79
 
79
80
  <a-button-v2
80
81
  view="soft"
81
- class="!h-9 w-fit !bg-white text-blue-700 dark:!bg-gray-950 dark:text-blue-500"
82
+ class="!h-9 w-fit !bg-main text-brand"
82
83
  size="sm"
83
84
  :icon="AIconArrowRight"
84
85
  icon-right
85
86
  @click="handleExportClick"
86
87
  >
87
- <span class="text-sm">
88
+ <span class="text-body-md-strong">
88
89
  {{ t('header.products.exportCard.receive') }}
89
90
  </span>
90
91
  </a-button-v2>
@@ -39,9 +39,10 @@ function onReplenish() {
39
39
  </script>
40
40
 
41
41
  <template>
42
- <div class="w-full overflow-hidden bg-white text-deepblue-900 dark:bg-gray-900 dark:text-gray-200 lg:w-[320px] lg:rounded-lg lg:border lg:border-gray-200 lg:dark:border-gray-800">
42
+ <div class="w-full overflow-hidden bg-main text-primary lg:w-[320px] lg:rounded-lg lg:border lg:border-default">
43
43
  <div class="p-2">
44
- <div class="relative overflow-hidden rounded-lg bg-gradient-to-br from-blue-700/95 to-blue-500/85 p-3 text-white">
44
+ <!-- осознанно константный брендовый баннер: белое/тинты на цветном градиенте -->
45
+ <div class="relative overflow-hidden rounded-lg bg-linear-to-br from-brand-600/95 to-brand-500/85 p-3 text-white">
45
46
  <div class="pointer-events-none absolute -right-8 -top-10 size-28 rounded-full bg-white/20 blur-2xl" aria-hidden="true" />
46
47
 
47
48
  <div class="relative">
@@ -54,8 +55,8 @@ function onReplenish() {
54
55
  </p>
55
56
  <span class="inline-flex shrink-0 items-center gap-1.5 rounded-full px-2 py-0.5 text-body-sm-medium text-white ring-1 ring-inset ring-white/20">
56
57
  <span class="relative flex size-1.5 items-center justify-center">
57
- <span class="absolute inline-flex size-full animate-ping rounded-full bg-green-400/80" />
58
- <span class="relative inline-flex size-1.5 rounded-full bg-green-400" />
58
+ <span class="absolute inline-flex size-full animate-ping rounded-full bg-icon-success/80" />
59
+ <span class="relative inline-flex size-1.5 rounded-full bg-icon-success" />
59
60
  </span>
60
61
  {{ t('header.profile.connected') }}
61
62
  </span>
@@ -103,11 +104,11 @@ function onReplenish() {
103
104
 
104
105
  <button
105
106
  type="button"
106
- class="mt-2.5 inline-flex h-8 w-full cursor-pointer items-center justify-center gap-1.5 rounded-full bg-white px-3 text-body-md-strong text-blue-700 shadow-sm transition-all duration-150 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-blue-600 active:scale-[0.98]"
107
+ class="mt-2.5 inline-flex h-8 w-full cursor-pointer items-center justify-center gap-1.5 rounded-full bg-white px-3 text-body-md-strong text-brand shadow-xs transition-all duration-150 hover:shadow-md focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-white/70 focus-visible:ring-offset-2 focus-visible:ring-offset-brand-500 active:scale-[0.98]"
107
108
  @click="onReplenish"
108
109
  >
109
110
  <a-icon-plus-circle class="size-4" />
110
- <span class="bg-gradient-to-r from-blue-700 to-blue-500 bg-clip-text text-transparent">
111
+ <span class="bg-linear-to-r from-brand-600 to-brand-500 bg-clip-text text-transparent">
111
112
  {{ t('header.profile.addBalance') }}
112
113
  </span>
113
114
  </button>
@@ -119,26 +120,26 @@ function onReplenish() {
119
120
  <nuxt-link-locale
120
121
  v-for="item in items"
121
122
  :key="item.title"
122
- class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/60"
123
+ class="group flex items-center gap-3 rounded-md px-2.5 py-2 text-body-md transition-colors hover:bg-action-secondary-hover"
123
124
  :to="item.to"
124
125
  :data-test-id="item?.dataTestId"
125
126
  target="_blank"
126
127
  >
127
128
  <!-- <span -->
128
- <!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-blue-100 bg-blue-50 text-blue-700 dark:border-blue-900/40 dark:bg-blue-900/30 dark:text-blue-400" -->
129
+ <!-- class="flex size-8 shrink-0 items-center justify-center rounded-md border border-brand-100 bg-brand-subtle text-brand" -->
129
130
  <!-- > -->
130
131
  <!-- <component -->
131
132
  <!-- :is="item.icon" -->
132
133
  <!-- class="size-4" -->
133
134
  <!-- /> -->
134
135
  <!-- </span> -->
135
- <span class="truncate text-deepblue-900 group-hover:text-blue-700 dark:text-gray-200 dark:group-hover:text-blue-400">
136
+ <span class="truncate text-primary group-hover:text-link-hover">
136
137
  {{ item.title }}
137
138
  </span>
138
139
  </nuxt-link-locale>
139
140
  </nav>
140
141
 
141
- <div class="border-t border-gray-100 p-2 dark:border-gray-800">
142
+ <div class="border-t border-default p-2">
142
143
  <a-change-version
143
144
  v-if="oldVersion"
144
145
  :url="oldVersion"
@@ -147,7 +148,7 @@ function onReplenish() {
147
148
 
148
149
  <div
149
150
  v-if="!isLargeScreen"
150
- class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-deepblue-900 dark:text-gray-200"
151
+ class="flex items-center justify-between rounded-md px-2.5 py-2 text-body-md text-primary"
151
152
  >
152
153
  <span>{{ t('header.profile.colorScheme') }}</span>
153
154
  <a-color-mode />
@@ -155,7 +156,7 @@ function onReplenish() {
155
156
 
156
157
  <button
157
158
  type="button"
158
- class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-red-600 transition-colors hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"
159
+ class="flex w-full cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-body-md-medium text-action-danger transition-colors hover:bg-danger-subtle"
159
160
  data-test-id="logout-button"
160
161
  @click="$emit('logout')"
161
162
  >
@@ -65,17 +65,17 @@ onMounted(fetchNotification)
65
65
  <transition name="system-notification">
66
66
  <div
67
67
  v-if="isOpen && systemMessage"
68
- class="bg-[#FFF5E6] px-2 py-3 dark:bg-[#161617] md:px-0"
68
+ class="bg-warning-subtle px-2 py-3 md:px-0"
69
69
  >
70
70
  <div class="a-container flex items-center justify-between gap-4">
71
71
  <div class="flex items-center gap-2">
72
72
  <a-icon-info-circle
73
- class="max-h-[16px] w-full max-w-[16px] shrink-0 stroke-orange-500"
73
+ class="max-h-[16px] w-full max-w-[16px] shrink-0 stroke-icon-amber"
74
74
  />
75
- <span class="text-body-md-strong text-orange-500">{{ systemMessage }}</span>
75
+ <span class="text-body-md-strong text-warning">{{ systemMessage }}</span>
76
76
  </div>
77
77
  <a-icon-x-mark
78
- class="max-h-[16px] w-full max-w-[16px] shrink-0 cursor-pointer stroke-orange-500"
78
+ class="max-h-[16px] w-full max-w-[16px] shrink-0 cursor-pointer stroke-icon-amber"
79
79
  @click="close"
80
80
  />
81
81
  </div>
@@ -30,7 +30,7 @@
30
30
  </a-digit-badge>
31
31
  <a-icon-warning-circle
32
32
  v-if="option.warning"
33
- class="text-black justify-self-end"
33
+ class="justify-self-end text-primary"
34
34
  />
35
35
  </span>
36
36
  </slot>
@@ -67,25 +67,26 @@ const activeTab = defineModel<any>({
67
67
 
68
68
  const viewTypeValues: ViewType = {
69
69
  bottom: {
70
- default: 'border-b-2 border-white dark:border-gray-900 pt-[3px] ',
71
- selected: 'border-b-2 border-blue-700 dark:border-blue-500 pt-[3px]'
70
+ default: 'border-b-2 border-transparent pt-[3px]',
71
+ selected: 'border-b-2 border-brand pt-[3px]'
72
72
  },
73
73
  right: {
74
- default: 'text-deepblue-900 bg-transparent',
75
- selected: 'border-r-2 border-deepblue-900'
74
+ default: 'text-primary bg-transparent',
75
+ selected: 'border-r-2 border-brand'
76
76
  },
77
77
  left: {
78
- default: 'text-deepblue-900 bg-transparent',
79
- selected: 'border-l-2 border-deepblue-900'
78
+ default: 'text-primary bg-transparent',
79
+ selected: 'border-l-2 border-brand'
80
80
  },
81
81
  };
82
82
 
83
83
 
84
84
 
85
85
 
86
+ /* осознанно константный focus-shadow #1B64B3: документированное исключение */
86
87
  const defaultClasses = () =>
87
88
  [
88
- 'disabled:cursor-not-allowed disabled:text-gray-500 hover:bg-deepblue-900 disabled:dark:text-gray-300 body-s-400 cursor-pointer text-deepblue-900 dark:text-gray-200 bg-transparent select-none hover:bg-opacity-5 hover:disabled:bg-transparent focus-visible:shadow-[0_0_0_4px#1B64B3]',
89
+ 'cursor-pointer select-none bg-transparent text-primary hover:bg-action-secondary-hover hover:disabled:bg-transparent disabled:cursor-not-allowed disabled:text-disabled focus-visible:shadow-[0_0_0_4px#1B64B3]',
89
90
  viewTypeValues[props.view]['default'],
90
91
  props.size == 'sm'? 'px-4 py-[7.5px]' : 'px-4 py-[11.5px]',
91
92
  props.block ? 'w-full' : '',
@@ -93,7 +94,7 @@ const defaultClasses = () =>
93
94
 
94
95
  const selectedClasses = () =>
95
96
  [
96
- 'body-s-400 cursor-pointer transition duration-200 select-none font-semibold focus-visible:shadow-[0_0_0_4px#1B64B3]',
97
+ 'text-body-md-strong cursor-pointer transition duration-200 select-none focus-visible:shadow-[0_0_0_4px#1B64B3]',
97
98
  viewTypeValues[props.view]['selected'],
98
99
  props.size == 'sm'? 'px-4 py-[7.5px]' : 'px-4 py-[11.5px]',
99
100
  props.block ? 'w-full' : '',
@@ -4,7 +4,7 @@
4
4
  class="scroll-container overflow-auto whitespace-nowrap"
5
5
  :class="[
6
6
  props.wrapper === 'row' ? 'flex gap-1' : 'flex flex-col gap-1',
7
- isSegmented ? 'rounded-[12px] bg-gray-50 p-1 shadow-[inset_2px_2px_4px_0_#00000014] dark:bg-gray-800' : ''
7
+ isSegmented ? 'rounded-[12px] bg-muted p-1 shadow-[inset_2px_2px_4px_0] shadow-surface-dark/8' : ''
8
8
  ]"
9
9
  >
10
10
 
@@ -86,43 +86,45 @@ const isSegmented = computed(() => props.view === 'segmented')
86
86
  const viewTypeValues: ViewType = {
87
87
  main: {
88
88
  default:
89
- 'text-deepblue-900 bg-deepblue-900/5 hover:bg-deepblue-900/10 dark:bg-gray-200/5 dark:text-gray-200 dark:hover:bg-gray-800 ',
90
- selected: 'bg-blue-700 font-semibold text-white dark:text-gray-900 dark:bg-blue-500'
89
+ 'text-body-md bg-muted text-primary hover:bg-action-secondary-hover',
90
+ selected: 'text-body-md-strong bg-action-primary text-action-primary-fg'
91
91
  },
92
92
  transparent: {
93
- default: 'text-deepblue-900 bg-transparent hover:bg-deepblue-100',
94
- selected: 'font-semibold bg-white text-deepblue-900 '
93
+ default: 'text-body-md bg-transparent text-primary hover:bg-action-secondary-hover',
94
+ selected: 'text-body-md-strong bg-main text-primary '
95
95
  },
96
+ /* осознанно константный selected-инверт (gray/mobile): белый текст на bg-secondary-500 */
96
97
  gray: {
97
98
  default:
98
- 'bg-deepblue-900/5 hover:bg-deepblue-900/20 dark:bg-gray-50/10 dark:hover:bg-gray-50/20 dark:text-gray-50',
99
- selected: 'text-white bg-deepblue-900 dark:bg-gray-50 dark:text-gray-900'
99
+ 'text-body-md bg-muted hover:bg-action-secondary-hover',
100
+ selected: 'text-body-md text-white bg-secondary-500'
100
101
  },
101
102
  blue: {
102
103
  default:
103
- 'text-deepblue-900 bg-white font-semibold leading-5 dark:bg-gray-900 dark:text-gray-200 dark:hover:bg-gray-800 hover:bg-deepblue-100 ',
104
- selected: 'bg-blue-700 font-semibold leading-5 text-white dark:text-gray-900 dark:bg-blue-500'
104
+ 'text-body-md-strong bg-main text-primary hover:bg-action-secondary-hover',
105
+ selected: 'text-body-md-strong bg-action-primary text-action-primary-fg'
105
106
  },
106
107
  mobile: {
107
108
  default:
108
- 'bg-white dark:text-gray-200 font-semibold dark:bg-gray-900 dark:hover:bg-gray-500 hover:bg-deepblue-100 ',
109
- selected: 'text-white dark:text-gray-900 font-semibold dark:bg-white bg-deepblue-900'
109
+ 'text-body-md-strong bg-main hover:bg-action-secondary-hover',
110
+ selected: 'text-body-md-strong text-white bg-secondary-500'
110
111
  },
111
112
  segmented: {
112
- default: 'text-deepblue-900 bg-transparent hover:bg-black/5 dark:hover:bg-white/10 dark:text-gray-200',
113
- selected: 'bg-white text-deepblue-900 font-semibold shadow dark:bg-gray-900 dark:text-gray-200 shadow-[2px_2px_4px_0_#00000014]'
113
+ default: 'text-body-md bg-transparent text-primary hover:bg-action-secondary-hover',
114
+ selected: 'text-body-md-strong bg-main text-primary shadow-[2px_2px_4px_0] shadow-surface-dark/8'
114
115
  }
115
116
  }
116
117
 
118
+ /* осознанно константный focus-shadow #1B64B3: документированное исключение */
117
119
  const defaultClasses = (isDisabled: boolean) => [
118
- 'text-sm rounded-sm outline-none select-none focus-visible:shadow-[0_0_0_4px#1B64B3]',
119
- isDisabled ? 'bg-deepblue-900/5 dark:bg-gray-200/5 text-gray-500 dark:text-gray-500' : '',
120
+ 'rounded-sm outline-hidden select-none focus-visible:shadow-[0_0_0_4px#1B64B3]',
121
+ isDisabled ? 'bg-action-disabled text-action-disabled-fg' : '',
120
122
  props.view === 'transparent' && isDisabled ? 'bg-transparent' : '',
121
123
  viewTypeValues[props.view]['default'],
122
124
  props.block ? 'w-full' : ''
123
125
  ]
124
126
  const selectedClasses = () => [
125
- 'text-sm rounded-sm select-none focus-visible:shadow-[0_0_0_4px#1B64B3]',
127
+ 'rounded-sm select-none focus-visible:shadow-[0_0_0_4px#1B64B3]',
126
128
  viewTypeValues[props.view]['selected'],
127
129
  props.block ? 'w-full' : ''
128
130
  ]
@@ -1,6 +1,9 @@
1
1
  <script lang="ts" setup>
2
2
  type CountColor = 'gray' | 'blue' | 'yellow' | 'red' | 'green' | 'neutral'
3
- type PillTabsType = 'pill' | 'underline'
3
+ /* pill-round — полностью округлый переключатель-«тумблер» (ДС-2026, тарифы):
4
+ меняется не только радиус, но и поверхность трека, плотность и цвет активного
5
+ таба, поэтому это отдельная шкура, а не проп радиуса. */
6
+ type PillTabsType = 'pill' | 'pill-round' | 'underline'
4
7
 
5
8
  export interface PillTab {
6
9
  key: string
@@ -44,17 +47,18 @@ const SIZE_CLASS: Record<'sm' | 'md', string> = {
44
47
  }
45
48
 
46
49
  const COUNT_COLOR_CLASS: Record<CountColor, string> = {
47
- gray: 'bg-gray-200/70 text-gray-600 dark:bg-white/[0.08] dark:text-gray-300',
48
- blue: 'bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300',
49
- yellow: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/40 dark:text-yellow-300',
50
- red: 'bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300',
51
- green: 'bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300',
52
- neutral: 'bg-gray-100 text-gray-500 dark:bg-white/[0.06] dark:text-gray-400',
50
+ gray: 'bg-badge/70 text-quaternary',
51
+ blue: 'bg-blue-subtle text-brand',
52
+ yellow: 'bg-yellow-subtle text-warning',
53
+ red: 'bg-danger-subtle text-danger',
54
+ green: 'bg-success-subtle text-success',
55
+ neutral: 'bg-badge text-secondary',
53
56
  }
54
57
 
55
58
  const { t, te } = useI18n()
56
59
 
57
60
  const isUnderline = computed(() => props.type === 'underline')
61
+ const isPillRound = computed(() => props.type === 'pill-round')
58
62
 
59
63
  function hasCount(option: PillTab) {
60
64
  if (typeof option.count === 'string') {
@@ -142,11 +146,13 @@ onBeforeUnmount(() => {
142
146
 
143
147
  <template>
144
148
  <div
145
- class="pill-tabs-v2 min-w-0 max-w-full"
149
+ class="pill-tabs-v2 max-w-full min-w-0"
146
150
  :class="[
147
151
  isUnderline
148
- ? 'border-b border-gray-200 dark:border-white/10'
149
- : 'rounded-lg border border-gray-200 bg-gray-50 p-1 dark:border-white/10 dark:bg-white/[0.03]',
152
+ ? 'border-b border-default'
153
+ : isPillRound
154
+ ? 'rounded-full border border-default bg-canvas p-0.5'
155
+ : 'rounded-lg border border-default bg-muted p-1',
150
156
  block ? 'w-full' : 'w-fit',
151
157
  disabled ? 'pill-tabs-v2--disabled opacity-60' : '',
152
158
  ]"
@@ -168,26 +174,35 @@ onBeforeUnmount(() => {
168
174
  :aria-disabled="isDisabled(option) || undefined"
169
175
  :disabled="isDisabled(option)"
170
176
  :tabindex="modelValue === option.key ? 0 : -1"
171
- class="inline-flex items-center gap-1.5 whitespace-nowrap font-medium transition-colors duration-150"
177
+ class="inline-flex items-center gap-1.5 whitespace-nowrap transition-colors duration-150"
172
178
  :class="[
173
179
  SIZE_CLASS[size],
174
180
  isUnderline
175
181
  ? [
176
- 'px-4 py-2',
182
+ 'px-4 py-2 font-medium',
177
183
  isDisabled(option)
178
- ? 'cursor-not-allowed text-gray-300 dark:text-gray-600'
184
+ ? 'cursor-not-allowed text-icon-disabled'
179
185
  : modelValue === option.key
180
- ? 'text-blue-600 dark:text-blue-400'
181
- : 'text-gray-500 hover:text-gray-800 dark:text-gray-400 dark:hover:text-gray-200',
186
+ ? 'text-brand'
187
+ : 'text-quaternary hover:text-primary',
182
188
  ]
183
- : [
184
- 'rounded-md px-3 py-1.5',
185
- isDisabled(option)
186
- ? 'cursor-not-allowed text-gray-300 dark:text-gray-600'
187
- : modelValue === option.key
188
- ? 'bg-white text-deepblue-900 shadow-sm dark:bg-gray-700 dark:text-gray-100 dark:shadow-none dark:ring-1 dark:ring-inset dark:ring-white/10'
189
- : 'text-gray-700 hover:bg-white/70 hover:text-gray-900 dark:text-gray-200 dark:hover:bg-white/[0.06] dark:hover:text-gray-100',
190
- ],
189
+ : isPillRound
190
+ ? [
191
+ 'rounded-full px-3.5 py-1 font-semibold',
192
+ isDisabled(option)
193
+ ? 'cursor-not-allowed text-icon-disabled'
194
+ : modelValue === option.key
195
+ ? 'bg-main text-brand shadow-xs dark:shadow-none dark:ring-1 dark:ring-white/10 dark:ring-inset'
196
+ : 'text-secondary hover:text-primary',
197
+ ]
198
+ : [
199
+ 'rounded-md px-3 py-1.5 font-medium',
200
+ isDisabled(option)
201
+ ? 'cursor-not-allowed text-icon-disabled'
202
+ : modelValue === option.key
203
+ ? 'bg-main text-primary shadow-xs dark:shadow-none dark:ring-1 dark:ring-white/10 dark:ring-inset'
204
+ : 'text-quaternary hover:bg-action-secondary-hover hover:text-primary',
205
+ ],
191
206
  block ? 'flex-1 basis-0 justify-center' : 'shrink-0',
192
207
  ]"
193
208
  @click="select(option)"
@@ -197,7 +212,7 @@ onBeforeUnmount(() => {
197
212
 
198
213
  <span
199
214
  v-if="showCount && !option.hideCount"
200
- class="inline-flex min-w-5 shrink-0 items-center justify-center rounded-full px-1.5 text-body-sm font-semibold leading-5"
215
+ class="inline-flex min-w-5 shrink-0 items-center justify-center rounded-full px-1.5 text-body-sm leading-5 font-semibold"
201
216
  :class="COUNT_COLOR_CLASS[resolveCountColor(option)]"
202
217
  >
203
218
  {{ formatCount(option) }}
@@ -208,7 +223,7 @@ onBeforeUnmount(() => {
208
223
  <span
209
224
  v-if="isUnderline"
210
225
  aria-hidden="true"
211
- class="pill-tabs-v2__indicator pointer-events-none absolute -bottom-px left-0 h-0.5 rounded-full bg-blue-600 dark:bg-blue-400"
226
+ class="pill-tabs-v2__indicator pointer-events-none absolute -bottom-px left-0 h-0.5 rounded-full bg-brand"
212
227
  :class="indicatorAnimate ? 'transition-[transform,width,opacity] duration-300 ease-out' : ''"
213
228
  :style="indicatorStyle"
214
229
  />