@rt-tools/ui-kit-v2 0.5.0 → 0.7.0

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 (111) hide show
  1. package/README.md +87 -7
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +1929 -994
  3. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  4. package/package.json +1 -1
  5. package/rt-tools-ui-kit-v2-0.7.0.tgz +0 -0
  6. package/src/lib/components/aside/_rt-aside-overlay.scss +73 -71
  7. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +20 -16
  8. package/src/lib/components/aside/header/rt-aside-header.component.scss +72 -70
  9. package/src/lib/components/aside/rt-aside.component.scss +107 -105
  10. package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +33 -31
  11. package/src/lib/components/aside-section/rt-aside-section.component.scss +27 -23
  12. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +124 -118
  13. package/src/lib/components/bar-list/rt-bar-list.component.scss +85 -81
  14. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +64 -57
  15. package/src/lib/components/button/rt-button.directive.scss +319 -280
  16. package/src/lib/components/calendar/rt-calendar.component.scss +106 -102
  17. package/src/lib/components/card/rt-card.component.scss +53 -45
  18. package/src/lib/components/chat/rt-chat.component.scss +312 -306
  19. package/src/lib/components/checkbox/rt-checkbox.component.scss +61 -54
  20. package/src/lib/components/collapsible-text/rt-collapsible-text.component.scss +36 -34
  21. package/src/lib/components/confirm-popover/rt-confirm-popover.component.scss +36 -30
  22. package/src/lib/components/container/rt-container.component.scss +91 -87
  23. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  24. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  26. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  27. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  28. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  29. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  30. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  31. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  32. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  33. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  34. package/src/lib/components/field/rt-field.component.scss +63 -61
  35. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  36. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  37. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  38. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  39. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  40. package/src/lib/components/header/rt-header.component.scss +61 -55
  41. package/src/lib/components/icon/CONTEXT.md +16 -10
  42. package/src/lib/components/icon/rt-icon.component.scss +14 -12
  43. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  44. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  45. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  46. package/src/lib/components/input/CONTEXT.md +9 -7
  47. package/src/lib/components/input/rt-input.component.scss +102 -98
  48. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  49. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  50. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  51. package/src/lib/components/markdown-text/CONTEXT.md +40 -0
  52. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +130 -0
  53. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  54. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  55. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  56. package/src/lib/components/message/rt-message.component.scss +53 -49
  57. package/src/lib/components/message-composer/CONTEXT.md +1 -1
  58. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  59. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  60. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  61. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  62. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  63. package/src/lib/components/note/rt-note.component.scss +15 -11
  64. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  65. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  66. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  67. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  68. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  69. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  70. package/src/lib/components/rich-editor/CONTEXT.md +1 -1
  71. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  72. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  73. package/src/lib/components/select/rt-select.component.scss +146 -138
  74. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  75. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  76. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  77. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  78. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  79. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  80. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +39 -30
  81. package/src/lib/components/table/rt-table.component.scss +260 -252
  82. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  83. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  84. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  85. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  86. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  87. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  88. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  89. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  90. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  91. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  92. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  93. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  94. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  95. package/src/lib/components/toolbar/rt-toolbar.component.scss +63 -54
  96. package/src/lib/components/tooltip/rt-tooltip.component.scss +24 -15
  97. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  98. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  99. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  100. package/src/styles/_index.scss +11 -0
  101. package/src/styles/_layers.scss +22 -0
  102. package/src/styles/_login.scss +87 -85
  103. package/src/styles/_mixins.scss +1 -1
  104. package/src/styles/_primitives.scss +138 -66
  105. package/src/styles/_scrollbar.scss +21 -19
  106. package/src/styles/_semantic.scss +155 -62
  107. package/src/styles/_theme-dark-rules.scss +23 -0
  108. package/src/styles/_theme-dark.scss +61 -42
  109. package/styles/tokens.css +754 -418
  110. package/types/rt-tools-ui-kit-v2.d.ts +292 -103
  111. package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
@@ -1,8 +1,10 @@
1
- /* rt-file-list — ViewEncapsulation.None, плоский `.rt-file-list`.
2
- Host-класс ставится через @Component host:{class}. */
3
- .rt-file-list {
4
- display: flex;
5
- width: 100%;
6
- flex-direction: column;
7
- gap: var(--rt-space-sm);
1
+ @layer rt-kit.components {
2
+ /* rt-file-list — ViewEncapsulation.None, плоский `.rt-file-list`.
3
+ Host-класс ставится через @Component host:{class}. */
4
+ .rt-file-list {
5
+ display: flex;
6
+ width: 100%;
7
+ flex-direction: column;
8
+ gap: var(--rt-space-sm);
9
+ }
8
10
  }
@@ -1,20 +1,22 @@
1
- .rt-filter-control {
2
- display: inline-flex;
1
+ @layer rt-kit.components {
2
+ .rt-filter-control {
3
+ display: inline-flex;
3
4
 
4
- // узкий экран: контрол — компактный select с капом --rt-input-max-width
5
- // (как строка поиска). В ряду тулбара (768–1080px) ширина по контенту.
6
- @media (width <= 1080px) {
7
- display: block;
5
+ // узкий экран: контрол — компактный select с капом --rt-input-max-width
6
+ // (как строка поиска). В ряду тулбара (768–1080px) ширина по контенту.
7
+ @media (width <= 1080px) {
8
+ display: block;
8
9
 
9
- .rt-select {
10
- inline-size: 100%;
11
- max-inline-size: var(--rt-input-max-width);
10
+ .rt-select {
11
+ inline-size: 100%;
12
+ max-inline-size: var(--rt-input-max-width);
13
+ }
12
14
  }
13
- }
14
15
 
15
- // стекнутый тулбар (≤768px): host занимает всю ширину столбца, select
16
- // вытягивается ровно как строка поиска (width:100% до --rt-input-max-width).
17
- @media (width <= 768px) {
18
- inline-size: 100%;
16
+ // стекнутый тулбар (≤768px): host занимает всю ширину столбца, select
17
+ // вытягивается ровно как строка поиска (width:100% до --rt-input-max-width).
18
+ @media (width <= 768px) {
19
+ inline-size: 100%;
20
+ }
19
21
  }
20
22
  }
@@ -1,67 +1,73 @@
1
- .rt-header {
2
- display: block;
3
- height: 45px;
4
- padding: 0 var(--rt-space-5);
5
- background: var(--rt-color-bg-surface);
6
- border-bottom-left-radius: var(--rt-radius-lg);
7
- border-bottom-right-radius: var(--rt-radius-lg);
1
+ @layer rt-kit.components {
2
+ .rt-header {
3
+ --rt-header-radius: var(--rt-radius-lg);
4
+ --rt-header-shadow: var(--rt-shadow-card-soft);
5
+ --rt-header-back-transition-duration: var(--rt-duration-base);
8
6
 
9
- // Мягкая тень (тот же токен, что у карточек) отделяет хедер от контента —
10
- // в тёмной теме фон хедера и страницы почти совпадают и сливались.
11
- box-shadow: var(--rt-shadow-card-soft);
12
- color: var(--rt-color-text-primary);
7
+ display: block;
8
+ height: 45px;
9
+ padding: 0 var(--rt-space-5);
10
+ background: var(--rt-color-bg-surface);
11
+ border-bottom-left-radius: var(--rt-header-radius);
12
+ border-bottom-right-radius: var(--rt-header-radius);
13
13
 
14
- &__content {
15
- display: flex;
16
- width: 100%;
17
- max-width: var(--rt-header-content-max-width, 100%);
18
- height: 100%;
19
- align-items: center;
20
- margin: 0 auto;
21
- gap: 0;
22
- }
14
+ // Мягкая тень (тот же токен, что у карточек) отделяет хедер от контента —
15
+ // в тёмной теме фон хедера и страницы почти совпадают и сливались.
16
+ box-shadow: var(--rt-header-shadow);
17
+ color: var(--rt-color-text-primary);
18
+
19
+ &__content {
20
+ display: flex;
21
+ width: 100%;
22
+ max-width: var(--rt-header-content-max-width, 100%);
23
+ height: 100%;
24
+ align-items: center;
25
+ margin: 0 auto;
26
+ gap: 0;
27
+ }
23
28
 
24
- &__back {
25
- display: inline-flex;
26
- overflow: hidden;
29
+ &__back {
30
+ display: inline-flex;
31
+ overflow: hidden;
27
32
 
28
- /* Hidden state по умолчанию — slot полностью схлопнут (нулевая ширина),
29
- Контент скрыт через opacity + сдвиг влево; pointer-events:none снимает hit-target. */
30
- width: 0;
31
- height: 45px;
32
- align-items: center;
33
- justify-content: flex-start;
34
- opacity: 0;
35
- pointer-events: none;
36
- transform: translateX(-8px);
37
- transition:
38
- width var(--rt-duration-base) cubic-bezier(0.34, 1.56, 0.64, 1),
39
- opacity var(--rt-duration-base) ease-out,
40
- transform var(--rt-duration-base) cubic-bezier(0.34, 1.56, 0.64, 1);
33
+ /* Hidden state по умолчанию — slot полностью схлопнут (нулевая ширина),
34
+ Контент скрыт через opacity + сдвиг влево; pointer-events:none снимает hit-target. */
35
+ width: 0;
36
+ height: 45px;
37
+ align-items: center;
38
+ justify-content: flex-start;
39
+ opacity: 0;
40
+ pointer-events: none;
41
+ transform: translateX(-8px);
42
+ transition:
43
+ width var(--rt-header-back-transition-duration) cubic-bezier(0.34, 1.56, 0.64, 1),
44
+ opacity var(--rt-header-back-transition-duration) ease-out,
45
+ transform var(--rt-header-back-transition-duration) cubic-bezier(0.34, 1.56, 0.64, 1);
41
46
 
42
- &--visible {
43
- width: 35px;
44
- opacity: 1;
45
- pointer-events: auto;
46
- transform: translateX(0);
47
+ &--visible {
48
+ width: 35px;
49
+ opacity: 1;
50
+ pointer-events: auto;
51
+ transform: translateX(0);
52
+ }
47
53
  }
48
- }
49
54
 
50
- &__logo {
51
- display: flex;
52
- min-width: 0;
53
- flex: 1 0 0;
54
- align-items: center;
55
+ &__logo {
56
+ display: flex;
57
+ min-width: 0;
58
+ flex: 1 0 0;
59
+ align-items: center;
60
+ }
55
61
  }
56
- }
57
62
 
58
- /* dark override: header bg = navy, близко к --rt-blue-900 */
59
- [data-theme='dark'] .rt-header {
60
- background: var(--rt-blue-900);
61
- }
63
+ /* dark override: подложка обвязки — своё назначение, а не ступень шкалы. */
64
+ [data-theme='dark'] .rt-header {
65
+ background: var(--rt-color-bg-nav);
66
+ }
62
67
 
63
- @media (prefers-reduced-motion: reduce) {
64
- .rt-header__back {
65
- transition: none;
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .rt-header__back {
70
+ transition: none;
71
+ }
66
72
  }
67
73
  }
@@ -16,12 +16,14 @@
16
16
 
17
17
  ## Главное, что нужно знать
18
18
 
19
- **Компонент ничего не грузит.** Он рисует `<use href="#rt-icon-<name>">` — ссылку на symbol
20
- внутри спрайта, который собирает `RtIconRegistry` и вставляет в `<body>`
21
- провайдер `provideRtIcons()`. Без этого провайдера разметка верна, а на экране пусто.
19
+ **Значок едет по требованию.** Компонент рисует `<use href="#rt-icon-<name>">` — ссылку на
20
+ symbol внутри спрайта — и тем же движением просит имя у `RtIconRegistry`. Реестр ходит за файлом
21
+ один раз на страницу и дописывает символ в спрайт; страница платит ровно за те значки, которые
22
+ нарисовала, а не за весь набор.
22
23
 
23
- Приложение обязано опубликовать набор из `assets/icons` пакета по адресу, который знает реестр
24
- (по умолчанию `/icons`, иначе `provideRtIcons('/my/icons')`).
24
+ `provideRtIcons()` называет адрес набора и сам не грузит ничего. Без него реестр берёт умолчание
25
+ `/icons`; приложение обязано опубликовать туда набор из `assets/icons` пакета, иначе разметка
26
+ верна, а на экране пусто.
25
27
 
26
28
  ## Как этим пользоваться
27
29
 
@@ -34,11 +36,15 @@
34
36
 
35
37
  ## Края
36
38
 
37
- - **Имя без файла роняет весь набор.** Реестр собирает спрайт одним `forkJoin`; один отказ
38
- гасит иконки во всём приложении. Добавляя имя в `rt-icon-names.ts`, положи SVG рядом.
39
- - Реестр пропускает загрузку, если спрайт уже в DOM (`#rt-icon-sprite`) — так витрина не гоняет
40
- сотни запросов между историями.
41
- - На сервере (SSR) спрайт не грузится: относительных HTTP-запросов к статике там нет, иконки
39
+ - **Имя без файла гасит только свой значок.** Отказ остаётся внутри реестра, соседние значки
40
+ приезжают своими потоками, и на месте промаха остаётся пустое место размера значка. Второй раз
41
+ за отказавшим именем реестр не ходит. Добавляя имя в `rt-icon-names.ts`, положи SVG рядом:
42
+ иначе промах виден только глазами.
43
+ - **Значок появляется после первой отрисовки.** Место под него занято сразу — размер задан на
44
+ хосте, — поэтому приход символа соседей не двигает.
45
+ - Символ, уже лежащий в спрайте страницы, запроса не даёт: так витрина не ходит за одним и тем
46
+ же между историями, а приложение вправе положить свой спрайт до старта.
47
+ - На сервере (SSR) реестр молчит: относительных HTTP-запросов к статике там нет, значки
42
48
  дорисуются после гидрации.
43
49
 
44
50
  ## Рядом
@@ -1,15 +1,17 @@
1
- /* rt-icon — правила компонента (ViewEncapsulation.None).
2
- Селектор bare `.rt-icon` (класс на host) — им же адресуются и программные
3
- потребители sprite'а, рисующие иконку без компонента. */
4
- .rt-icon {
5
- display: inline-flex;
6
- flex-shrink: 0;
7
- line-height: 0;
1
+ @layer rt-kit.components {
2
+ /* rt-icon — правила компонента (ViewEncapsulation.None).
3
+ Селектор bare `.rt-icon` (класс на host) — им же адресуются и программные
4
+ потребители sprite'а, рисующие иконку без компонента. */
5
+ .rt-icon {
6
+ display: inline-flex;
7
+ flex-shrink: 0;
8
+ line-height: 0;
8
9
 
9
- svg {
10
- display: block;
11
- width: 100%;
12
- height: 100%;
13
- fill: currentcolor;
10
+ svg {
11
+ display: block;
12
+ width: 100%;
13
+ height: 100%;
14
+ fill: currentcolor;
15
+ }
14
16
  }
15
17
  }
@@ -30,8 +30,10 @@
30
30
  **Кнопку компонент рисует внутри себя**, host остаётся обычным элементом. Диаметр держит
31
31
  свойство `--rt-icon-button-size`, и объявляет его модификатор размера на самой кнопке —
32
32
  поэтому ни класс на host-е, ни инлайн-стиль на нём диаметра не меняют: собственное
33
- объявление элемента бьёт унаследованное. Размер вне шкалы получается не обходом, а новой
34
- ступенью здесь же: `sm` 28px, `md` 36px, `lg` 44px, `xl` 52px, `2xl` 60px.
33
+ объявление элемента бьёт унаследованное. Диаметр берётся из общей шкалы высот контролов, а не
34
+ своим рядом: иконочная кнопка стоит в строке рядом с кнопкой и полем и обязана совпадать с ними
35
+ по высоте. Ступени — `sm`, `md`, `lg`, `xl`, `2xl`; значения держит шкала, и здесь они не
36
+ повторяются.
35
37
 
36
38
  ## Как этим пользоваться
37
39
 
@@ -1,152 +1,168 @@
1
- /* rt-icon-button — иконочная кнопка в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-icon-button` висит
3
- и на `<rt-icon-button>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона. */
1
+ @layer rt-kit.components {
2
+ /* rt-icon-button — иконочная кнопка в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-icon-button` висит
4
+ и на `<rt-icon-button>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона. */
5
6
 
6
- rt-icon-button {
7
- display: inline-flex;
8
-
9
- /* Дефолт = md; перезаписывается модификаторами sm/lg ниже либо inline стилем потребителя */
10
- --rt-icon-button-size: 36px;
11
-
12
- .rt-icon-button {
13
- position: relative;
7
+ rt-icon-button {
14
8
  display: inline-flex;
15
- width: var(--rt-icon-button-size);
16
- height: var(--rt-icon-button-size);
17
- align-items: center;
18
- justify-content: center;
19
- padding: 0;
20
- border: 0;
21
- background: transparent;
22
- color: var(--rt-icon-button-color, var(--rt-color-text-primary));
23
- cursor: pointer;
24
- transition: background-color var(--rt-duration-fast) ease;
25
-
26
- &--sm {
27
- --rt-icon-button-size: 28px;
28
- }
29
-
30
- &--md {
31
- --rt-icon-button-size: 36px;
32
- }
33
9
 
34
- &--lg {
35
- --rt-icon-button-size: 44px;
36
- }
10
+ /* Дефолт = md; перезаписывается модификаторами sm/lg ниже либо inline стилем потребителя.
11
+ Ряд берётся из общей шкалы высот контролов: иконочная кнопка стоит в строке
12
+ рядом с кнопкой и полем и обязана совпадать с ними по высоте. */
13
+ --rt-icon-button-size: var(--rt-control-height-md);
14
+
15
+ /* Цвет иконки объявлен здесь, а не приходил бы запасным значением на месте
16
+ обращения: запасное переживает смену темы — переопределять нечего. Своё
17
+ свойство блока перебивает тот, кому нужен другой цвет: так делает просмотр
18
+ фотографии, где кнопка стоит на снимке. */
19
+ --rt-icon-button-color: var(--rt-color-text-primary);
20
+
21
+ .rt-icon-button {
22
+ --rt-icon-button-circle-radius: var(--rt-radius-full);
23
+ --rt-icon-button-square-radius: var(--rt-radius-md);
24
+ --rt-icon-button-indicator-radius: var(--rt-radius-full);
25
+ --rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);
26
+ --rt-icon-button-transition-duration: var(--rt-duration-fast);
27
+
28
+ position: relative;
29
+ display: inline-flex;
30
+ width: var(--rt-icon-button-size);
31
+ height: var(--rt-icon-button-size);
32
+ align-items: center;
33
+ justify-content: center;
34
+ padding: 0;
35
+ border: 0;
36
+ background: transparent;
37
+ color: var(--rt-icon-button-color);
38
+ cursor: pointer;
39
+ transition: background-color var(--rt-icon-button-transition-duration) ease;
40
+
41
+ &--sm {
42
+ --rt-icon-button-size: var(--rt-control-height-sm);
43
+ }
37
44
 
38
- &--xl {
39
- --rt-icon-button-size: 52px;
40
- }
45
+ &--md {
46
+ --rt-icon-button-size: var(--rt-control-height-md);
47
+ }
41
48
 
42
- &--2xl {
43
- --rt-icon-button-size: 60px;
44
- }
49
+ &--lg {
50
+ --rt-icon-button-size: var(--rt-control-height-lg);
51
+ }
45
52
 
46
- &--circle {
47
- border-radius: var(--rt-radius-full);
48
- }
53
+ &--xl {
54
+ --rt-icon-button-size: var(--rt-control-height-xl);
55
+ }
49
56
 
50
- &--square {
51
- border-radius: var(--rt-radius-md);
52
- }
57
+ &--2xl {
58
+ --rt-icon-button-size: var(--rt-control-height-2xl);
59
+ }
53
60
 
54
- &--ghost {
55
- &:hover:not(:disabled) {
56
- background-color: var(--rt-icon-button-color-bg-hover);
61
+ &--circle {
62
+ border-radius: var(--rt-icon-button-circle-radius);
57
63
  }
58
64
 
59
- &.rt-icon-button--active {
60
- background-color: var(--rt-icon-button-color-bg-hover);
65
+ &--square {
66
+ border-radius: var(--rt-icon-button-square-radius);
61
67
  }
62
- }
63
68
 
64
- &--primary {
65
- background-color: var(--rt-color-action-primary);
66
- color: var(--rt-color-action-on-primary);
69
+ &--ghost {
70
+ &:hover:not(:disabled) {
71
+ background-color: var(--rt-icon-button-color-bg-hover);
72
+ }
67
73
 
68
- &:hover:not(:disabled) {
69
- background-color: var(--rt-color-action-primary-hover);
74
+ &.rt-icon-button--active {
75
+ background-color: var(--rt-icon-button-color-bg-hover);
76
+ }
70
77
  }
71
- }
72
78
 
73
- &--secondary {
74
- background-color: var(--rt-color-bg-surface-subtle);
75
- color: var(--rt-color-text-primary);
79
+ &--primary {
80
+ background-color: var(--rt-color-action-primary);
81
+ color: var(--rt-color-action-on-primary);
76
82
 
77
- &:hover:not(:disabled) {
78
- background-color: var(--rt-icon-button-color-bg-hover);
83
+ &:hover:not(:disabled) {
84
+ background-color: var(--rt-color-action-primary-hover);
85
+ }
79
86
  }
80
- }
81
87
 
82
- &--danger {
83
- color: var(--rt-color-state-danger);
88
+ &--secondary {
89
+ background-color: var(--rt-color-bg-surface-subtle);
90
+ color: var(--rt-color-text-primary);
84
91
 
85
- &:hover:not(:disabled) {
86
- background-color: var(--rt-icon-button-color-bg-hover);
92
+ &:hover:not(:disabled) {
93
+ background-color: var(--rt-icon-button-color-bg-hover);
94
+ }
87
95
  }
88
96
 
89
- &.rt-icon-button--active {
90
- background-color: var(--rt-icon-button-color-bg-hover);
91
- }
92
- }
97
+ &--danger {
98
+ color: var(--rt-color-state-danger);
93
99
 
94
- &--success {
95
- color: var(--rt-color-state-success);
100
+ &:hover:not(:disabled) {
101
+ background-color: var(--rt-icon-button-color-bg-hover);
102
+ }
96
103
 
97
- &:hover:not(:disabled) {
98
- background-color: var(--rt-icon-button-color-bg-hover);
104
+ &.rt-icon-button--active {
105
+ background-color: var(--rt-icon-button-color-bg-hover);
106
+ }
99
107
  }
100
108
 
101
- &.rt-icon-button--active {
102
- background-color: var(--rt-icon-button-color-bg-hover);
103
- }
104
- }
109
+ &--success {
110
+ color: var(--rt-color-state-success);
105
111
 
106
- &--warning {
107
- color: var(--rt-color-state-warning);
112
+ &:hover:not(:disabled) {
113
+ background-color: var(--rt-icon-button-color-bg-hover);
114
+ }
108
115
 
109
- &:hover:not(:disabled) {
110
- background-color: var(--rt-icon-button-color-bg-hover);
116
+ &.rt-icon-button--active {
117
+ background-color: var(--rt-icon-button-color-bg-hover);
118
+ }
111
119
  }
112
120
 
113
- &.rt-icon-button--active {
114
- background-color: var(--rt-icon-button-color-bg-hover);
121
+ &--warning {
122
+ color: var(--rt-color-state-warning);
123
+
124
+ &:hover:not(:disabled) {
125
+ background-color: var(--rt-icon-button-color-bg-hover);
126
+ }
127
+
128
+ &.rt-icon-button--active {
129
+ background-color: var(--rt-icon-button-color-bg-hover);
130
+ }
115
131
  }
116
- }
117
132
 
118
- &:disabled {
119
- cursor: not-allowed;
120
- opacity: 0.5;
121
- }
133
+ &:disabled {
134
+ cursor: not-allowed;
135
+ opacity: 0.5;
136
+ }
122
137
 
123
- &:focus-visible {
124
- box-shadow: var(--rt-shadow-focus-ring);
125
- outline: 2px solid transparent;
126
- outline-offset: 2px;
127
- }
138
+ &:focus-visible {
139
+ box-shadow: var(--rt-icon-button-focus-shadow);
140
+ outline: 2px solid transparent;
141
+ outline-offset: 2px;
142
+ }
128
143
 
129
- &__spinner {
130
- --rt-icon-button-spin-duration: 1s;
144
+ &__spinner {
145
+ --rt-icon-button-spin-duration: 1s;
131
146
 
132
- animation: rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite;
133
- }
147
+ animation: rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite;
148
+ }
134
149
 
135
- &__indicator {
136
- position: absolute;
137
- width: 8px;
138
- height: 8px;
139
- border-radius: var(--rt-radius-full);
140
- background: var(--rt-color-state-danger);
141
- inset-block-start: -2px;
142
- inset-inline-end: -2px;
143
- pointer-events: none;
150
+ &__indicator {
151
+ position: absolute;
152
+ width: 8px;
153
+ height: 8px;
154
+ border-radius: var(--rt-icon-button-indicator-radius);
155
+ background: var(--rt-color-state-danger);
156
+ inset-block-start: -2px;
157
+ inset-inline-end: -2px;
158
+ pointer-events: none;
159
+ }
144
160
  }
145
161
  }
146
- }
147
162
 
148
- @keyframes rt-icon-button-spin {
149
- to {
150
- transform: rotate(360deg);
163
+ @keyframes rt-icon-button-spin {
164
+ to {
165
+ transform: rotate(360deg);
166
+ }
151
167
  }
152
168
  }
@@ -1,46 +1,48 @@
1
1
  @use '../../../styles/mixins' as kv;
2
2
 
3
- .rt-info-item {
4
- @include kv.surface-card;
3
+ @layer rt-kit.components {
4
+ .rt-info-item {
5
+ @include kv.surface-card;
5
6
 
6
- display: flex;
7
- min-width: 0;
8
- flex-direction: column;
9
- margin: 0;
10
- gap: var(--rt-space-0-5);
11
-
12
- &--grow {
13
- flex: 1 0 0;
14
- }
15
-
16
- &__label {
17
- margin: 0;
18
- color: var(--rt-color-text-primary);
19
- font-size: var(--rt-text-xs);
20
- font-weight: var(--rt-font-weight-regular);
21
- letter-spacing: var(--rt-letter-spacing-wide);
22
- line-height: var(--rt-leading-snug);
23
- }
24
-
25
- &__value {
26
7
  display: flex;
27
- flex-wrap: wrap;
28
- align-items: baseline;
8
+ min-width: 0;
9
+ flex-direction: column;
29
10
  margin: 0;
30
- color: var(--rt-color-text-primary);
31
- font-size: var(--rt-text-sm);
32
- font-weight: var(--rt-font-weight-bold);
33
11
  gap: var(--rt-space-0-5);
34
- letter-spacing: var(--rt-letter-spacing-wide);
35
- line-height: var(--rt-leading-snug);
36
- overflow-wrap: anywhere;
37
- }
38
12
 
39
- &__value-skeleton {
40
- display: block;
13
+ &--grow {
14
+ flex: 1 0 0;
15
+ }
16
+
17
+ &__label {
18
+ margin: 0;
19
+ color: var(--rt-color-text-primary);
20
+ font-size: var(--rt-text-xs);
21
+ font-weight: var(--rt-font-weight-regular);
22
+ letter-spacing: var(--rt-letter-spacing-wide);
23
+ line-height: var(--rt-leading-snug);
24
+ }
25
+
26
+ &__value {
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ align-items: baseline;
30
+ margin: 0;
31
+ color: var(--rt-color-text-primary);
32
+ font-size: var(--rt-text-sm);
33
+ font-weight: var(--rt-font-weight-bold);
34
+ gap: var(--rt-space-0-5);
35
+ letter-spacing: var(--rt-letter-spacing-wide);
36
+ line-height: var(--rt-leading-snug);
37
+ overflow-wrap: anywhere;
38
+ }
39
+
40
+ &__value-skeleton {
41
+ display: block;
42
+ }
41
43
  }
42
- }
43
44
 
44
- [data-theme='dark'] .rt-info-item {
45
- @include kv.surface-card-dark;
45
+ [data-theme='dark'] .rt-info-item {
46
+ @include kv.surface-card-dark;
47
+ }
46
48
  }