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
package/-error.vue CHANGED
@@ -137,11 +137,11 @@ function handleError() {
137
137
  :key="item.id"
138
138
  class="flex items-center gap-1 text-sm font-medium"
139
139
  >
140
- <a-icon-check class="stroke-blue-600" />
140
+ <a-icon-check class="stroke-icon-brand" />
141
141
  {{ item.label }}
142
142
  <span
143
143
  v-if="item.link"
144
- class="text-blue-700"
144
+ class="text-brand-600"
145
145
  >info@adata.kz</span>
146
146
  </div>
147
147
  </div>
@@ -4,10 +4,10 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
4
4
  </script>
5
5
 
6
6
  <template>
7
- <div class="min-h-screen bg-gray-50 p-10 dark:bg-gray-950">
7
+ <div class="min-h-screen bg-main p-10">
8
8
  <div class="mx-auto flex max-w-3xl flex-col gap-10">
9
9
  <div class="flex items-center justify-between">
10
- <h1 class="text-xl font-bold text-deepblue-900 dark:text-gray-100">
10
+ <h1 class="text-xl font-bold text-primary">
11
11
  ATooltipV2
12
12
  </h1>
13
13
  <a-color-mode />
@@ -22,11 +22,11 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
22
22
  arrow
23
23
  :open-delay="80"
24
24
  >
25
- <button class="rounded-lg bg-blue-700 px-3 py-2 text-sm text-white dark:bg-blue-500 dark:text-gray-900">
25
+ <button class="rounded-lg bg-action-primary px-3 py-2 text-sm text-action-primary-fg">
26
26
  {{ p }}
27
27
  </button>
28
28
  <template #content>
29
- <div class="text-[11px] text-deepblue-900 dark:text-gray-100">
29
+ <div class="text-[11px] text-primary">
30
30
  Placement <b>{{ p }}</b>
31
31
  </div>
32
32
  </template>
@@ -41,14 +41,14 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
41
41
  arrow
42
42
  content-class="w-56"
43
43
  >
44
- <button class="rounded-lg px-3 py-2 text-sm text-deepblue-900 ring-1 ring-gray-200 dark:text-gray-100 dark:ring-gray-700">
44
+ <button class="rounded-lg px-3 py-2 text-sm text-primary ring-1 ring-(--border-color-default)">
45
45
  Click me
46
46
  </button>
47
47
  <template #content="{ close }">
48
- <div class="flex flex-col gap-2 text-[11px] text-deepblue-900 dark:text-gray-100">
48
+ <div class="flex flex-col gap-2 text-[11px] text-primary">
49
49
  <p>Interactive — outside-click &amp; Esc close.</p>
50
50
  <button
51
- class="self-start text-blue-700 dark:text-blue-400"
51
+ class="self-start text-brand"
52
52
  @click="close"
53
53
  >
54
54
  Close
@@ -61,7 +61,7 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
61
61
  <!-- Manual via v-model:open -->
62
62
  <section class="flex items-center gap-4">
63
63
  <button
64
- class="rounded-lg bg-deepblue-900 px-3 py-2 text-sm text-white dark:bg-gray-100 dark:text-gray-900"
64
+ class="rounded-lg bg-secondary-500 px-3 py-2 text-sm text-white"
65
65
  @click="manualOpen = !manualOpen"
66
66
  >
67
67
  Toggle manual ({{ manualOpen }})
@@ -72,9 +72,9 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
72
72
  placement="right"
73
73
  arrow
74
74
  >
75
- <span class="text-sm text-gray-500 dark:text-gray-400">anchor</span>
75
+ <span class="text-sm text-secondary">anchor</span>
76
76
  <template #content>
77
- <div class="text-[11px] text-deepblue-900 dark:text-gray-100">
77
+ <div class="text-[11px] text-primary">
78
78
  Manually controlled
79
79
  </div>
80
80
  </template>
@@ -82,16 +82,16 @@ const placements = ['top', 'top-start', 'bottom', 'bottom-end', 'left', 'right']
82
82
  </section>
83
83
 
84
84
  <!-- Teleport out of an overflow-hidden container -->
85
- <section class="h-24 overflow-hidden rounded-lg p-3 ring-1 ring-gray-200 dark:ring-gray-700">
85
+ <section class="h-24 overflow-hidden rounded-lg p-3 ring-1 ring-(--border-color-default)">
86
86
  <a-tooltip-v2
87
87
  placement="top"
88
88
  arrow
89
89
  >
90
- <button class="rounded-lg bg-green-500 px-3 py-2 text-sm text-white dark:text-gray-900">
90
+ <button class="rounded-lg bg-success px-3 py-2 text-sm text-white">
91
91
  Inside overflow-hidden (teleported)
92
92
  </button>
93
93
  <template #content>
94
- <div class="text-[11px] text-deepblue-900 dark:text-gray-100">
94
+ <div class="text-[11px] text-primary">
95
95
  Not clipped
96
96
  </div>
97
97
  </template>
@@ -1,4 +1,4 @@
1
1
  export default defineNuxtConfig({
2
2
  extends: ['..'],
3
3
  compatibilityDate: '2025-03-20',
4
- })
4
+ })
package/CLAUDE.md ADDED
@@ -0,0 +1,63 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Что это
6
+
7
+ adata-ui — UI-кит проектов adata.kz, оформленный как **Nuxt 3 layer** (`main` = `nuxt.config.ts`, публикуется npm-пакетом `adata-ui`). Консьюмеры (pk-frontend) подключают его через `extends` и автоматически получают компоненты, Tailwind и стили. Разработка и просмотр компонентов — в `.playground` (extends `'..'`).
8
+
9
+ Ветка `tailwind-v4` (2026-07) — миграция на Tailwind v4 + новая палитра + тёмная тема на семантических токенах; `predesign` ещё на v3. pk-frontend мигрирован на v4/семантику (ветка ADTC-8931, extends `'../adata-ui'`); `deepblue` удалён из theme.css после его миграции (2026-07-28). Каталог `docs/` удалён из дерева; реестр миграции — в git-истории: `git show 69039ec:docs/color-migration.md`.
10
+
11
+ ## Команды
12
+
13
+ - `pnpm dev` — dev-сервер playground; `pnpm build` — сборка playground.
14
+ - Тесты: сейчас тестовых файлов в репо нет (vitest-инфраструктура осталась). Если появятся: `npx vitest run --coverage.enabled=false`. НЕ `pnpm test` (открывает UI). Флаг обязателен: coverage сломан (в devDeps `@vitest/coverage-v8` 1.6.x при vitest 3.x). Один файл: `npx vitest run <путь-к-файлу> --coverage.enabled=false`.
15
+ - `pnpm lint` / `pnpm type-check` — в репо большой предсуществующий долг (тысячи style-ошибок, десятки type-ошибок в нетронутых файлах). Проверяй точечно только изменённые файлы: `npx eslint <files>`.
16
+ - Скомпилированный Tailwind после `pnpm build` искать в `.playground/.output/server/chunks/build/entry-styles.*.mjs` — Nuxt инлайнит глобальный CSS в SSR-бандл; клиентский `entry.css` содержит только библиотечные стили (это норма, не баг).
17
+
18
+ ## Архитектура слоя
19
+
20
+ - Компоненты авто-регистрируются с префиксами: `components/` → `<a-*>`, `icons/` → `<a-icon-*>`, `illustrations/` → `<a-ill-*>` (имя из имени файла, `pathPrefix: false`; в шаблонах только kebab-case — eslint-правило).
21
+ - Алиас `#adata-ui` → корень репо.
22
+ - Tailwind v4 подключён на уровне слоя: vite-плагин в `vite.plugins` конфига слоя, CSS-вход `assets/styles/main.css` через `css:` слоя. Консьюмерам и playground настраивать нечего. **Никогда не добавляй второй `@import "tailwindcss"`** — второй tailwind-корень = дубли утилит.
23
+ - `utils/twMerge.ts` — расширенный tailwind-merge (знает кастомный `rounded-10` и `text-*`-токены ДС) — использовать его, а не голый `twMerge` из пакета.
24
+
25
+ ## Дизайн-система (Tailwind v4, CSS-first)
26
+
27
+ Вся конфигурация — в `assets/styles/theme.css` (`tailwind.config` не существует). Реестр миграции, маппингов и осознанных исключений — в git-истории (docs/ удалён): `git show 69039ec:docs/color-migration.md`.
28
+
29
+ ### Палитра
30
+
31
+ - Стоковая палитра Tailwind v4 + фирменные: `brand` (500 = #068DFF), `secondary` (500 = #2C3E50), `chart-{amber,blue,green,red}`, `surface-dark`/`surface-dark-2`, `base-bg-light`/`base-bg-dark`. Deprecated-группы (`ink-*`, `deepblue-*`) удалены — использовать семантику.
32
+ - Сырые hex запрещены: классы палитры/семантики в разметке, `var(--…-*)` в `<style>`. Никаких `style="color: #…"`. Исключения (логотипы `icons/company/`, `.bg-gradient-blue`, тени `#1B64B3`, error-тултип ATooltip) перечислены в реестре: `git show 69039ec:docs/color-migration.md`.
33
+
34
+ ### Тёмная тема — семантические токены
35
+
36
+ - **Примитивные шкалы (`gray-*`, `red-*`, `brand-*`, `secondary-*`, `white`/`black`) константны в обеих темах.** Под `.dark` переключаются только семантические токены (блоки `@generated-semantic-colors[-dark]` в theme.css, источник — Figma-артефакт «Семантические цвета»).
37
+ - В новом коде цвета задавать семантикой: `text-primary/secondary/quaternary/disabled/brand/link/success/warning/danger`, `bg-main/subtle/muted/overlay/badge/brand[-subtle]/{success,warning,danger,red…rose}[-subtle]`, `border-default/strong/focus/brand/…`, `bg-action-{primary,secondary,danger}[-hover|-active]` + `text-action-*-fg`, `text/fill/stroke-icon-*`, `fill-main`/`stroke-main` (флип белых заливок иллюстраций). Реестр и маппинг — `git show 69039ec:docs/color-migration.md`.
38
+ - **Роли поверхностей (по Figma-макетам ДС)**: страница — `bg-main`; карточки/секции — `bg-subtle` + `border-default` (subtle полупрозрачен и без бордера не читается); утилитарный непрозрачный серый (thead, скелетоны, зебра, треки, плашки) — `bg-muted`; hover поверхностей — `bg-action-secondary-hover` (не `bg-subtle` — в дарке невидим); «утопленная» зона (инпуты, плитки, «экраны» иллюстраций) — `bg-canvas` (dark #0F0F10 — глубже `bg-main`; прежний сине-серый #1E2939 заменён аудитом семантических цветов 2026-08).
39
+ - **Пара иконка+плитка**: цвет `text-icon-{цвет}` всегда идёт с плиткой `bg-{цвет}-subtle` того же оттенка — колор-кодирование блоков (лендинги, карточки модулей) строится только так.
40
+ - Примитив в разметке легален, когда цвет должен быть одинаков в темах: инвертированные поверхности (`bg-secondary-500` футера/тултипов), белый декор на цветном (`bg-white` точки/бегунки), `chart-*`, `surface-dark*`. Цветовые `dark:`-классы разрешены для краевых случаев без токена (`dark:bg-white/5`-тинты и т.п.).
41
+ - Для ring/outline border-токены доступны var-синтаксисом: `ring-(--border-color-default)`, `outline-(--border-color-danger)/60`.
42
+ - В `<style>`-блоках: `var(--text-color-*)`, `var(--background-color-*)`, `var(--border-color-*)`, `var(--color-action-*|icon-*)`; полупрозрачность — `color-mix(in srgb, var(--…) N%, transparent)`. `theme('colors…')` в v4 не работает. **Не вешать `/N` на полупрозрачные токены** (`bg-subtle`, `bg-overlay`, dark `brand-subtle`/`danger-subtle`) — альфа перемножается.
43
+ - Цветные тени: форма и цвет раздельно — `shadow-[0_-2px_8px_0] shadow-gray-400/25`; разная плотность по темам — `shadow-surface-dark/10 dark:shadow-surface-dark/30`.
44
+
45
+ ### Типографика и радиусы
46
+
47
+ - Токены `text-h1…text-h5`, `text-display-{hero,lg,sm}`, `text-body-{lg,md,sm}[-medium|-strong]`, `text-overline[-medium]` — размер + межстрочный + вес одним классом.
48
+ - Легаси-классы `.heading-*`, `.body-400`, `.link-*` и пр. живут в theme.css `@layer components` — для старого дизайна; в новом коде использовать `text-*`-токены.
49
+ - Шкала скруглений кастомная (не v4-дефолт): `rounded` = 4px, xs = 4, sm = 6, md = 8, `rounded-10` = 10px, lg = 12, xl = 16, 2xl = 20.
50
+
51
+ ### Динамические классы
52
+
53
+ Сканер не видит собранные в рантайме классы (`bg-${color}-…`) — такие семьи/оттенки/утилиты должны быть в safelist `@source inline(…)` в theme.css. Расширяй его при добавлении новой динамики.
54
+
55
+ ### Изменение палитры из Figma
56
+
57
+ Светлый блок примитивов между маркерами `@generated-colors:*` сгенерирован из Figma-экспортов (DTCG). Генератор и токен-JSONы удалены из дерева — восстановить: `git show 8862721:scripts/generate-theme-colors.mjs` (там же `scripts/design-tokens/*.tokens.json`); исходники продублированы в `git show 69039ec:docs/update-plan.md` (docs/ удалён из дерева). Семантические блоки `@generated-semantic-colors[-dark]:*` этим генератором НЕ покрываются — их источник — Figma-артефакт «Семантические цвета»; актуальные значения живут в самих блоках theme.css, регенерация = дамп таблицы артефакта между маркерами.
58
+
59
+ ## Грабли окружения
60
+
61
+ - `rg` на машине разработчика — shell-функция: в скриптах/подпроцессах использовать `grep`.
62
+ - В репо есть путь с кириллической буквой (`components/features/сhange-version/`) — `git ls-files` только с `-z`.
63
+ - Каталог `docs/` удалён из дерева (доступен через git show, см. выше), поэтому строки `@source not "../../docs";` в main.css больше нет. Если docs/ с именами старых классов вернётся — вернуть и исключение, иначе сканер Tailwind сгенерирует по ним мёртвый CSS.
@@ -0,0 +1,12 @@
1
+ /* CSS-вход adata-ui. Подключать его обязан КОНСЬЮМЕР (css: в своём nuxt.config),
2
+ а не слой: у слоя из node_modules Nuxt дописывает авто-импорты в сам CSS и
3
+ ломает dev-SSR. Свой @import "tailwindcss" в приложении не заводить —
4
+ будет второй tailwind-корень и дубли утилит. */
5
+ @import "tailwindcss";
6
+ @import "./theme.css";
7
+ @import "./ui.css";
8
+
9
+ /* Слой всегда в скане: сам он лежит в node_modules консьюмера и дефолтной
10
+ базой (корень приложения) не покрывается. Путь от этого файла. */
11
+ @source "../..";
12
+