@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,288 +1,327 @@
1
- /* rt-* color namespace bridge — мост на семантические --rt-* токены.
2
- Живёт здесь, потому что единственный потребитель — `.rt-button` ниже. */
3
- :root {
4
- --rt-color-primary: var(--rt-color-action-primary);
5
- --rt-color-primary-hover: var(--rt-color-action-primary-hover);
6
- --rt-color-primary-active: var(--rt-color-action-primary-hover);
7
- --rt-color-on-primary: var(--rt-color-action-on-primary);
8
- }
9
-
10
- .rt-button {
11
- --rt-btn-height: 40px;
12
- --rt-btn-padding: 0 1.25rem;
13
- --rt-btn-gap: 0.5rem;
14
- --rt-btn-radius: 10px;
15
- --rt-btn-font-size: 0.95rem;
16
- --rt-btn-icon-size: 1rem;
17
- --rt-btn-spinner-size: 1rem;
18
- --rt-btn-spinner-border-width: 2px;
19
- --rt-btn-bg: var(--rt-color-primary, #10b981);
20
- --rt-btn-bg-hover: var(--rt-color-primary-hover, #059669);
21
- --rt-btn-bg-active: var(--rt-color-primary-active, #047857);
22
- --rt-btn-color: var(--rt-color-on-primary, #fff);
23
- --rt-btn-border-color: var(--rt-btn-bg);
24
- --rt-btn-border-color-hover: var(--rt-btn-bg-hover);
25
- --rt-btn-shadow: none;
26
-
27
- display: inline-flex;
28
- height: var(--rt-btn-height);
29
- min-height: var(--rt-btn-height);
30
- box-sizing: border-box;
31
- align-items: center;
32
- justify-content: center;
33
- padding: var(--rt-btn-padding);
34
- border: var(--rt-border-width-thin) solid var(--rt-btn-border-color);
35
- border-radius: var(--rt-btn-radius);
36
- margin: 0;
37
- background: var(--rt-btn-bg);
38
- box-shadow: var(--rt-btn-shadow);
39
- color: var(--rt-btn-color);
40
- cursor: pointer;
41
- font-family: inherit;
42
- font-size: var(--rt-btn-font-size);
43
- font-weight: var(--rt-font-weight-medium);
44
- gap: var(--rt-btn-gap);
45
- line-height: var(--rt-leading-none);
46
- outline: none;
47
- -webkit-tap-highlight-color: transparent;
48
- text-decoration: none;
49
- transition:
50
- background-color var(--rt-duration-fast),
51
- color var(--rt-duration-fast),
52
- border-color var(--rt-duration-fast),
53
- box-shadow var(--rt-duration-fast);
54
- user-select: none;
55
- white-space: nowrap;
56
-
57
- &:hover:not(:disabled) {
58
- border-color: var(--rt-btn-border-color-hover);
59
- background: var(--rt-btn-bg-hover);
60
- }
61
-
62
- &:active:not(:disabled) {
63
- background: var(--rt-btn-bg-active);
64
- }
65
-
66
- &:focus-visible {
67
- box-shadow: var(--rt-shadow-focus-ring);
68
- outline: 2px solid transparent;
69
- outline-offset: 2px;
70
- }
71
-
72
- &:disabled {
73
- --rt-btn-bg: var(--rt-color-disabled, #d1d5db);
74
- --rt-btn-bg-hover: var(--rt-color-disabled, #d1d5db);
75
- --rt-btn-border-color: var(--rt-color-disabled, #d1d5db);
76
- --rt-btn-border-color-hover: var(--rt-color-disabled, #d1d5db);
77
- --rt-btn-color: var(--rt-color-on-disabled, #6b7280);
78
-
79
- cursor: not-allowed;
80
- }
1
+ @layer rt-kit.components {
2
+ .rt-button {
3
+ /* Высота приходит общей шкалой контролов, а не своим числом: кнопка, поле и
4
+ иконочная кнопка одного размера стоят в одной строке и обязаны совпадать. */
5
+ --rt-btn-height: var(--rt-control-height-md);
6
+ --rt-btn-padding: 0 1.25rem;
7
+ --rt-btn-gap: 0.5rem;
8
+ --rt-btn-radius: var(--rt-radius-lg);
9
+ --rt-btn-border-width: var(--rt-border-width-thin);
10
+ --rt-btn-transition-duration: var(--rt-duration-fast);
11
+ --rt-btn-focus-shadow: var(--rt-shadow-focus-ring);
12
+ --rt-btn-font-size: 0.95rem;
13
+ --rt-btn-icon-size: 1rem;
14
+ --rt-btn-spinner-size: 1rem;
15
+ --rt-btn-spinner-border-width: var(--rt-border-width-medium);
16
+ --rt-btn-spinner-radius: var(--rt-radius-full);
17
+ --rt-btn-bg: var(--rt-color-action-primary);
18
+ --rt-btn-bg-hover: var(--rt-color-action-primary-hover);
19
+ --rt-btn-bg-active: var(--rt-color-action-primary-active);
20
+ --rt-btn-color: var(--rt-color-action-on-primary);
21
+ --rt-btn-border-color: var(--rt-btn-bg);
22
+ --rt-btn-border-color-hover: var(--rt-btn-bg-hover);
23
+ --rt-btn-shadow: none;
81
24
 
82
- /* `flex-shrink: 0` — иконке заданного размера. Без него в кнопке, которой ширину
83
- навязали снаружи (пункт меню `rt-split-button` берёт её от панели), лейбл давит
84
- на иконку, и та сжимается до нуля: место занято, а иконки не видно. */
85
- &__icon {
86
25
  display: inline-flex;
87
- width: var(--rt-btn-icon-size);
88
- height: var(--rt-btn-icon-size);
89
- flex-shrink: 0;
26
+ height: var(--rt-btn-height);
27
+ min-height: var(--rt-btn-height);
28
+ box-sizing: border-box;
90
29
  align-items: center;
91
30
  justify-content: center;
92
- font-size: var(--rt-btn-icon-size);
93
- }
94
-
95
- &__label {
96
- display: inline-flex;
97
- align-items: center;
31
+ padding: var(--rt-btn-padding);
32
+ border: var(--rt-btn-border-width) solid var(--rt-btn-border-color);
33
+ border-radius: var(--rt-btn-radius);
34
+ margin: 0;
35
+ background: var(--rt-btn-bg);
36
+ box-shadow: var(--rt-btn-shadow);
37
+ color: var(--rt-btn-color);
38
+ cursor: pointer;
39
+ font-family: inherit;
40
+ font-size: var(--rt-btn-font-size);
41
+ font-weight: var(--rt-font-weight-medium);
42
+ gap: var(--rt-btn-gap);
43
+ line-height: var(--rt-leading-none);
44
+ outline: none;
45
+ -webkit-tap-highlight-color: transparent;
46
+ text-decoration: none;
47
+ transition:
48
+ background-color var(--rt-btn-transition-duration),
49
+ color var(--rt-btn-transition-duration),
50
+ border-color var(--rt-btn-transition-duration),
51
+ box-shadow var(--rt-btn-transition-duration);
52
+ user-select: none;
98
53
  white-space: nowrap;
99
- }
100
-
101
- &__spinner {
102
- --rt-btn-spinner-fade-duration: 0.3s;
103
- --rt-btn-spinner-rotation-duration: 0.7s;
104
-
105
- display: inline-flex;
106
- align-items: center;
107
- justify-content: center;
108
- animation: rt-button-fade-in var(--rt-btn-spinner-fade-duration) both;
109
- }
110
-
111
- &__spinner-circle {
112
- display: inline-block;
113
- width: var(--rt-btn-spinner-size);
114
- height: var(--rt-btn-spinner-size);
115
- border: var(--rt-btn-spinner-border-width) solid currentcolor;
116
- border-radius: var(--rt-radius-full);
117
- border-bottom-color: transparent;
118
- animation: rt-button-spin var(--rt-btn-spinner-rotation-duration) linear infinite;
119
- opacity: 0.85;
120
- }
121
-
122
- &--secondary {
123
- --rt-btn-bg: var(--rt-color-secondary, #6b7280);
124
- --rt-btn-bg-hover: var(--rt-color-secondary-hover, #4b5563);
125
- --rt-btn-bg-active: var(--rt-color-secondary-active, #374151);
126
- }
127
-
128
- &--success {
129
- --rt-btn-bg: var(--rt-color-success, #16a34a);
130
- --rt-btn-bg-hover: var(--rt-color-success-hover, #15803d);
131
- --rt-btn-bg-active: var(--rt-color-success-active, #166534);
132
- }
133
-
134
- &--warning {
135
- --rt-btn-bg: var(--rt-color-warning, #f59e0b);
136
- --rt-btn-bg-hover: var(--rt-color-warning-hover, #d97706);
137
- --rt-btn-bg-active: var(--rt-color-warning-active, #b45309);
138
- }
139
-
140
- &--danger {
141
- --rt-btn-bg: var(--rt-color-danger, #ef4444);
142
- --rt-btn-bg-hover: var(--rt-color-danger-hover, #dc2626);
143
- --rt-btn-bg-active: var(--rt-color-danger-active, #b91c1c);
144
- }
145
-
146
- &--info {
147
- --rt-btn-bg: var(--rt-color-info, #0ea5e9);
148
- --rt-btn-bg-hover: var(--rt-color-info-hover, #0284c7);
149
- --rt-btn-bg-active: var(--rt-color-info-active, #0369a1);
150
- }
151
-
152
- &--outlined {
153
- --rt-btn-bg: transparent;
154
- --rt-btn-bg-hover: rgb(16 185 129 / 8%);
155
- --rt-btn-bg-active: rgb(16 185 129 / 16%);
156
- --rt-btn-color: var(--rt-color-primary, #10b981);
157
- --rt-btn-border-color: currentcolor;
158
- --rt-btn-border-color-hover: currentcolor;
159
- --rt-btn-shadow: none;
160
- }
161
-
162
- &--outlined#{&}--secondary {
163
- --rt-btn-color: var(--rt-color-secondary, #6b7280);
164
- }
165
-
166
- &--outlined#{&}--success {
167
- --rt-btn-color: var(--rt-color-success, #16a34a);
168
- }
169
-
170
- &--outlined#{&}--warning {
171
- --rt-btn-color: var(--rt-color-warning, #f59e0b);
172
- }
173
-
174
- &--outlined#{&}--danger {
175
- --rt-btn-color: var(--rt-color-danger, #ef4444);
176
- }
177
-
178
- &--outlined#{&}--info {
179
- --rt-btn-color: var(--rt-color-info, #0ea5e9);
180
- }
181
-
182
- &--text {
183
- --rt-btn-bg: transparent;
184
- --rt-btn-bg-hover: rgb(16 185 129 / 8%);
185
- --rt-btn-bg-active: rgb(16 185 129 / 16%);
186
- --rt-btn-color: var(--rt-color-primary, #10b981);
187
- --rt-btn-border-color: transparent;
188
- --rt-btn-border-color-hover: transparent;
189
- --rt-btn-shadow: none;
190
- }
191
-
192
- &--text#{&}--secondary {
193
- --rt-btn-color: var(--rt-color-secondary, #6b7280);
194
- }
195
-
196
- &--text#{&}--success {
197
- --rt-btn-color: var(--rt-color-success, #16a34a);
198
- }
199
-
200
- &--text#{&}--warning {
201
- --rt-btn-color: var(--rt-color-warning, #f59e0b);
202
- }
203
-
204
- &--text#{&}--danger {
205
- --rt-btn-color: var(--rt-color-danger, #ef4444);
206
- }
207
-
208
- &--text#{&}--info {
209
- --rt-btn-color: var(--rt-color-info, #0ea5e9);
210
- }
211
-
212
- &--rounded {
213
- --rt-btn-radius: 999px;
214
- }
215
-
216
- &--sm {
217
- --rt-btn-height: 30px;
218
- --rt-btn-padding: 0 0.875rem;
219
- --rt-btn-font-size: 0.8125rem;
220
- --rt-btn-icon-size: 0.875rem;
221
- --rt-btn-spinner-size: 0.875rem;
222
- }
223
-
224
- &--lg {
225
- --rt-btn-height: 50px;
226
- --rt-btn-padding: 0 1.5rem;
227
- --rt-btn-font-size: 1.0625rem;
228
- --rt-btn-icon-size: 1.125rem;
229
- --rt-btn-spinner-size: 1.125rem;
230
- }
231
-
232
- &--xl {
233
- --rt-btn-height: 60px;
234
- --rt-btn-padding: 0 1.75rem;
235
- --rt-btn-font-size: 1.125rem;
236
- --rt-btn-icon-size: 1.25rem;
237
- --rt-btn-spinner-size: 1.25rem;
238
- }
239
-
240
- &--2xl {
241
- --rt-btn-height: 70px;
242
- --rt-btn-padding: 0 2rem;
243
- --rt-btn-font-size: 1.1875rem;
244
- --rt-btn-icon-size: 1.375rem;
245
- --rt-btn-spinner-size: 1.375rem;
246
- }
247
-
248
- &--icon-only {
249
- width: var(--rt-btn-height);
250
- padding: 0;
251
- gap: 0;
252
- }
253
-
254
- &--icon-only#{&}--rounded {
255
- --rt-btn-radius: 50%;
256
- }
257
-
258
- &--loading {
259
- cursor: wait;
260
- pointer-events: none;
261
- }
262
- }
263
-
264
- @keyframes rt-button-spin {
265
- to {
266
- transform: rotate(360deg);
267
- }
268
- }
269
-
270
- @keyframes rt-button-fade-in {
271
- from {
272
- opacity: 0;
273
- }
274
-
275
- to {
276
- opacity: 1;
277
- }
278
- }
279
-
280
- @keyframes rt-button-fade-out {
281
- from {
282
- opacity: 1;
283
- }
284
54
 
285
- to {
286
- opacity: 0;
55
+ &:hover:not(:disabled) {
56
+ border-color: var(--rt-btn-border-color-hover);
57
+ background: var(--rt-btn-bg-hover);
58
+ }
59
+
60
+ &:active:not(:disabled) {
61
+ background: var(--rt-btn-bg-active);
62
+ }
63
+
64
+ &:focus-visible {
65
+ box-shadow: var(--rt-btn-focus-shadow);
66
+ outline: 2px solid transparent;
67
+ outline-offset: 2px;
68
+ }
69
+
70
+ /* `flex-shrink: 0` — иконке заданного размера. Без него в кнопке, которой ширину
71
+ навязали снаружи (пункт меню `rt-split-button` берёт её от панели), лейбл давит
72
+ на иконку, и та сжимается до нуля: место занято, а иконки не видно. */
73
+ &__icon {
74
+ display: inline-flex;
75
+ width: var(--rt-btn-icon-size);
76
+ height: var(--rt-btn-icon-size);
77
+ flex-shrink: 0;
78
+ align-items: center;
79
+ justify-content: center;
80
+ font-size: var(--rt-btn-icon-size);
81
+ }
82
+
83
+ &__label {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ white-space: nowrap;
87
+ }
88
+
89
+ &__spinner {
90
+ --rt-btn-spinner-fade-duration: 0.3s;
91
+ --rt-btn-spinner-rotation-duration: 0.7s;
92
+
93
+ display: inline-flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ animation: rt-button-fade-in var(--rt-btn-spinner-fade-duration) both;
97
+ }
98
+
99
+ &__spinner-circle {
100
+ display: inline-block;
101
+ width: var(--rt-btn-spinner-size);
102
+ height: var(--rt-btn-spinner-size);
103
+ border: var(--rt-btn-spinner-border-width) solid currentcolor;
104
+ border-radius: var(--rt-btn-spinner-radius);
105
+ border-bottom-color: transparent;
106
+ animation: rt-button-spin var(--rt-btn-spinner-rotation-duration) linear infinite;
107
+ opacity: 0.85;
108
+ }
109
+
110
+ &--secondary {
111
+ --rt-btn-bg: var(--rt-color-action-secondary);
112
+ --rt-btn-bg-hover: var(--rt-color-action-secondary-hover);
113
+ --rt-btn-bg-active: var(--rt-color-action-secondary-active);
114
+ --rt-btn-color: var(--rt-color-action-on-secondary);
115
+ }
116
+
117
+ &--success {
118
+ --rt-btn-bg: var(--rt-color-action-success);
119
+ --rt-btn-bg-hover: var(--rt-color-action-success-hover);
120
+ --rt-btn-bg-active: var(--rt-color-action-success-active);
121
+ --rt-btn-color: var(--rt-color-action-on-success);
122
+ }
123
+
124
+ &--warning {
125
+ --rt-btn-bg: var(--rt-color-action-warning);
126
+ --rt-btn-bg-hover: var(--rt-color-action-warning-hover);
127
+ --rt-btn-bg-active: var(--rt-color-action-warning-active);
128
+ --rt-btn-color: var(--rt-color-action-on-warning);
129
+ }
130
+
131
+ &--danger {
132
+ --rt-btn-bg: var(--rt-color-action-danger);
133
+ --rt-btn-bg-hover: var(--rt-color-action-danger-hover);
134
+ --rt-btn-bg-active: var(--rt-color-action-danger-active);
135
+ --rt-btn-color: var(--rt-color-action-on-danger);
136
+ }
137
+
138
+ &--info {
139
+ --rt-btn-bg: var(--rt-color-action-info);
140
+ --rt-btn-bg-hover: var(--rt-color-action-info-hover);
141
+ --rt-btn-bg-active: var(--rt-color-action-info-active);
142
+ --rt-btn-color: var(--rt-color-action-on-info);
143
+ }
144
+
145
+ /* Подложка наведения и нажатия у безфоновых оформлений считается от цвета самой
146
+ кнопки, а не берётся готовым оттенком: оттенок в слое назначений есть только у
147
+ марки, и роли danger или success получали бы от него чужой след. Доли вынесены
148
+ свойствами — на графите слабый оттенок не виден, и тёмная тема их поднимает. */
149
+ &--outlined {
150
+ --rt-btn-bg: transparent;
151
+ --rt-btn-bg-hover: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-hover), transparent);
152
+ --rt-btn-bg-active: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-active), transparent);
153
+ --rt-btn-color: var(--rt-color-action-primary-on-surface);
154
+ --rt-btn-border-color: currentcolor;
155
+ --rt-btn-border-color-hover: currentcolor;
156
+ --rt-btn-shadow: none;
157
+ }
158
+
159
+ &--outlined#{&}--secondary {
160
+ --rt-btn-color: var(--rt-color-action-secondary-on-surface);
161
+ }
162
+
163
+ &--outlined#{&}--success {
164
+ --rt-btn-color: var(--rt-color-action-success-on-surface);
165
+ }
166
+
167
+ &--outlined#{&}--warning {
168
+ --rt-btn-color: var(--rt-color-action-warning-on-surface);
169
+ }
170
+
171
+ &--outlined#{&}--danger {
172
+ --rt-btn-color: var(--rt-color-action-danger-on-surface);
173
+ }
174
+
175
+ &--outlined#{&}--info {
176
+ --rt-btn-color: var(--rt-color-action-info-on-surface);
177
+ }
178
+
179
+ &--text {
180
+ --rt-btn-bg: transparent;
181
+ --rt-btn-bg-hover: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-hover), transparent);
182
+ --rt-btn-bg-active: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-active), transparent);
183
+ --rt-btn-color: var(--rt-color-action-primary-on-surface);
184
+ --rt-btn-border-color: transparent;
185
+ --rt-btn-border-color-hover: transparent;
186
+ --rt-btn-shadow: none;
187
+ }
188
+
189
+ &--text#{&}--secondary {
190
+ --rt-btn-color: var(--rt-color-action-secondary-on-surface);
191
+ }
192
+
193
+ &--text#{&}--success {
194
+ --rt-btn-color: var(--rt-color-action-success-on-surface);
195
+ }
196
+
197
+ &--text#{&}--warning {
198
+ --rt-btn-color: var(--rt-color-action-warning-on-surface);
199
+ }
200
+
201
+ &--text#{&}--danger {
202
+ --rt-btn-color: var(--rt-color-action-danger-on-surface);
203
+ }
204
+
205
+ &--text#{&}--info {
206
+ --rt-btn-color: var(--rt-color-action-info-on-surface);
207
+ }
208
+
209
+ &--rounded {
210
+ --rt-btn-radius: 999px;
211
+ }
212
+
213
+ &--sm {
214
+ --rt-btn-height: var(--rt-control-height-sm);
215
+ --rt-btn-padding: 0 0.875rem;
216
+ --rt-btn-font-size: 0.8125rem;
217
+ --rt-btn-icon-size: 0.875rem;
218
+ --rt-btn-spinner-size: 0.875rem;
219
+ }
220
+
221
+ &--lg {
222
+ --rt-btn-height: var(--rt-control-height-lg);
223
+ --rt-btn-padding: 0 1.5rem;
224
+ --rt-btn-font-size: 1.0625rem;
225
+ --rt-btn-icon-size: 1.125rem;
226
+ --rt-btn-spinner-size: 1.125rem;
227
+ }
228
+
229
+ &--xl {
230
+ --rt-btn-height: var(--rt-control-height-xl);
231
+ --rt-btn-padding: 0 1.75rem;
232
+ --rt-btn-font-size: 1.125rem;
233
+ --rt-btn-icon-size: 1.25rem;
234
+ --rt-btn-spinner-size: 1.25rem;
235
+ }
236
+
237
+ &--2xl {
238
+ --rt-btn-height: var(--rt-control-height-2xl);
239
+ --rt-btn-padding: 0 2rem;
240
+ --rt-btn-font-size: 1.1875rem;
241
+ --rt-btn-icon-size: 1.375rem;
242
+ --rt-btn-spinner-size: 1.375rem;
243
+ }
244
+
245
+ &--icon-only {
246
+ width: var(--rt-btn-height);
247
+ padding: 0;
248
+ gap: 0;
249
+ }
250
+
251
+ &--icon-only#{&}--rounded {
252
+ --rt-btn-radius: 50%;
253
+ }
254
+
255
+ &--loading {
256
+ cursor: wait;
257
+ pointer-events: none;
258
+ }
259
+
260
+ /* Состояние стоит ниже всех вариантов оформления и палитры того же блока.
261
+ Специфичность у них равная, и правила равной силы разбираются порядком в
262
+ файле: отсюда, снизу, отключённость отменяет и заливку, и цвет подписи.
263
+ Стояла она выше — и проигрывала молча: текстовая кнопка получала серую
264
+ плашку, которой у неё нет ни в одном другом состоянии, а отключённая
265
+ danger оставалась красной надписью на этой плашке.
266
+
267
+ Поднимать специфичность вместо переноса нельзя: она перебила бы и то, чего
268
+ перебивать не собирались, — размер, скругление и свои свойства потребителя. */
269
+ &:disabled {
270
+ --rt-btn-bg: var(--rt-color-action-disabled);
271
+ --rt-btn-bg-hover: var(--rt-color-action-disabled);
272
+ --rt-btn-bg-active: var(--rt-color-action-disabled);
273
+ --rt-btn-border-color: var(--rt-color-action-disabled);
274
+ --rt-btn-border-color-hover: var(--rt-color-action-disabled);
275
+ --rt-btn-color: var(--rt-color-action-on-disabled);
276
+
277
+ cursor: not-allowed;
278
+ }
279
+
280
+ /* Безфоновым оформлениям отключённость фона не даёт: его у них нет ни в одном
281
+ другом состоянии, и серая плашка читалась бы как подсветка, а не как
282
+ недоступность. Остаётся приглушённая подпись, а обводочной — спокойная рамка
283
+ вместо цвета своей роли. */
284
+ &--outlined:disabled,
285
+ &--text:disabled {
286
+ --rt-btn-bg: transparent;
287
+ --rt-btn-bg-hover: transparent;
288
+ --rt-btn-bg-active: transparent;
289
+ }
290
+
291
+ &--outlined:disabled {
292
+ --rt-btn-border-color: var(--rt-color-border-default);
293
+ --rt-btn-border-color-hover: var(--rt-color-border-default);
294
+ }
295
+
296
+ &--text:disabled {
297
+ --rt-btn-border-color: transparent;
298
+ --rt-btn-border-color-hover: transparent;
299
+ }
300
+ }
301
+
302
+ @keyframes rt-button-spin {
303
+ to {
304
+ transform: rotate(360deg);
305
+ }
306
+ }
307
+
308
+ @keyframes rt-button-fade-in {
309
+ from {
310
+ opacity: 0;
311
+ }
312
+
313
+ to {
314
+ opacity: 1;
315
+ }
316
+ }
317
+
318
+ @keyframes rt-button-fade-out {
319
+ from {
320
+ opacity: 1;
321
+ }
322
+
323
+ to {
324
+ opacity: 0;
325
+ }
287
326
  }
288
327
  }