@rt-tools/ui-kit-v2 0.13.0 → 0.14.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 (69) hide show
  1. package/README.md +25 -5
  2. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +45 -9
  3. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  4. package/fesm2022/rt-tools-ui-kit-v2.mjs +2265 -664
  5. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/rt-tools-ui-kit-v2-0.14.0.tgz +0 -0
  8. package/src/lib/components/CONTEXT.md +1 -1
  9. package/src/lib/components/action-bar/rt-action-bar.component.scss +5 -0
  10. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +8 -1
  11. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +5 -0
  12. package/src/lib/components/button/CONTEXT.md +1 -1
  13. package/src/lib/components/button/rt-button.directive.scss +5 -7
  14. package/src/lib/components/calendar/CONTEXT.md +16 -2
  15. package/src/lib/components/calendar/rt-calendar.component.scss +81 -4
  16. package/src/lib/components/card/rt-card.component.scss +5 -0
  17. package/src/lib/components/checkbox/rt-checkbox.component.scss +11 -0
  18. package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +1 -1
  19. package/src/lib/components/data-list/toolbar/rt-data-list-toolbar.component.scss +1 -1
  20. package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +1 -1
  21. package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +1 -1
  22. package/src/lib/components/data-table/rt-data-table.component.scss +1 -1
  23. package/src/lib/components/date-picker/CONTEXT.md +33 -14
  24. package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +155 -0
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +18 -2
  26. package/src/lib/components/date-range/CONTEXT.md +53 -0
  27. package/src/lib/components/date-range/panel/rt-date-range-panel.component.scss +103 -0
  28. package/src/lib/components/date-range/rt-date-range.component.scss +120 -0
  29. package/src/lib/components/dialog/rt-dialog.component.scss +5 -0
  30. package/src/lib/components/empty-state/rt-empty-state.component.scss +5 -0
  31. package/src/lib/components/file-card/rt-file-card.component.scss +5 -0
  32. package/src/lib/components/file-drop/rt-file-drop.component.scss +5 -0
  33. package/src/lib/components/header/rt-header.component.scss +5 -0
  34. package/src/lib/components/icon-button/CONTEXT.md +1 -1
  35. package/src/lib/components/icon-button/rt-icon-button.component.scss +9 -29
  36. package/src/lib/components/input/rt-input.component.scss +7 -1
  37. package/src/lib/components/input-number/rt-input-number.component.scss +7 -1
  38. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +5 -0
  39. package/src/lib/components/menu/rt-menu-item.component.scss +5 -0
  40. package/src/lib/components/message/rt-message.component.scss +5 -0
  41. package/src/lib/components/money-list/rt-money-list.component.scss +5 -0
  42. package/src/lib/components/multiselect/CONTEXT.md +12 -5
  43. package/src/lib/components/multiselect/rt-multiselect.component.scss +32 -1
  44. package/src/lib/components/note/rt-note.component.scss +5 -0
  45. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +5 -0
  46. package/src/lib/components/pagination/rt-pagination.component.scss +6 -1
  47. package/src/lib/components/radio-button/rt-radio-button.component.scss +5 -0
  48. package/src/lib/components/section-nav/rt-section-nav.component.scss +5 -0
  49. package/src/lib/components/select/CONTEXT.md +10 -7
  50. package/src/lib/components/select/rt-select.component.scss +36 -1
  51. package/src/lib/components/skeleton/CONTEXT.md +14 -16
  52. package/src/lib/components/skeleton/rt-skeleton.component.scss +7 -1
  53. package/src/lib/components/skeleton-wrapper/CONTEXT.md +6 -6
  54. package/src/lib/components/split-button/rt-split-button.component.scss +6 -0
  55. package/src/lib/components/stepper/rt-stepper.component.scss +5 -0
  56. package/src/lib/components/table/rt-table.component.scss +12 -0
  57. package/src/lib/components/tag/CONTEXT.md +14 -15
  58. package/src/lib/components/tag/rt-tag.component.scss +6 -30
  59. package/src/lib/components/textarea/rt-textarea.component.scss +8 -1
  60. package/src/lib/components/thread-list/rt-thread-list.component.scss +5 -0
  61. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +7 -6
  62. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +5 -0
  63. package/src/rich-editor/lib/components/message-composer/CONTEXT.md +11 -1
  64. package/src/rich-editor/lib/components/message-composer/rt-message-composer.component.scss +78 -34
  65. package/src/styles/_mixins.scss +39 -0
  66. package/styles/tokens.css +30 -5
  67. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +11 -5
  68. package/types/rt-tools-ui-kit-v2.d.ts +394 -109
  69. package/rt-tools-ui-kit-v2-0.13.0.tgz +0 -0
@@ -1,5 +1,8 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-multiselect {
5
+ --rt-multiselect-radius: var(--rt-input-radius);
3
6
  --rt-multiselect-caret-transition-duration: var(--rt-duration-fast);
4
7
  --rt-multiselect-own-outline-width: var(--rt-border-width-medium);
5
8
 
@@ -22,7 +25,7 @@
22
25
  align-items: center;
23
26
  padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
24
27
  border: var(--rt-input-border-width) solid var(--rt-input-color-border);
25
- border-radius: var(--rt-input-radius);
28
+ border-radius: var(--rt-multiselect-radius);
26
29
  background-color: var(--rt-input-color-bg);
27
30
  color: var(--rt-input-color-text);
28
31
  cursor: pointer;
@@ -171,6 +174,7 @@
171
174
  font-size: var(--rt-input-font-size);
172
175
  }
173
176
 
177
+ &__icon-left,
174
178
  &__clear {
175
179
  flex-shrink: 0;
176
180
  }
@@ -189,6 +193,7 @@
189
193
  /* Панель рисуется в CDK Overlay, вне поддерева блока: свойство
190
194
  объявляется на ней самой — с корня блока оно бы не докатилось. */
191
195
  --rt-multiselect-panel-shadow: var(--rt-shadow-md);
196
+ --rt-multiselect-tree-indent: var(--rt-space-lg);
192
197
 
193
198
  /* Предел высоты по умолчанию — предел кита: длинный список прокручивается внутри
194
199
  панели, а не уходит за нижний край экрана. Вход `panelMaxHeight` ставит свой
@@ -215,6 +220,9 @@
215
220
  }
216
221
 
217
222
  &__option {
223
+ /* Уровень строки в дереве ставит разметка на саму строку; ноль — строка верхнего уровня. */
224
+ --rt-multiselect-tree-level: 0;
225
+
218
226
  display: flex;
219
227
  align-items: center;
220
228
  padding: var(--rt-space-sm) var(--rt-space-md);
@@ -222,6 +230,7 @@
222
230
  cursor: pointer;
223
231
  font-size: var(--rt-input-font-size);
224
232
  gap: var(--rt-space-sm);
233
+ padding-inline-start: calc(var(--rt-space-md) + var(--rt-multiselect-tree-indent) * var(--rt-multiselect-tree-level));
225
234
 
226
235
  &:hover,
227
236
  &--active {
@@ -243,6 +252,25 @@
243
252
  }
244
253
  }
245
254
 
255
+ /* Стрелка ветки и пустое место под неё у листа: шаг отступа равен их ширине с зазором,
256
+ и стрелка дочерней строки встаёт под подписью родителя. */
257
+ &__toggle,
258
+ &__toggle-space {
259
+ display: inline-flex;
260
+ flex-shrink: 0;
261
+ block-size: var(--rt-input-icon-size);
262
+ inline-size: var(--rt-input-icon-size);
263
+ }
264
+
265
+ &__toggle {
266
+ align-items: center;
267
+ justify-content: center;
268
+ padding: 0;
269
+ border: 0;
270
+ background: transparent;
271
+ cursor: pointer;
272
+ }
273
+
246
274
  &__checkbox {
247
275
  flex-shrink: 0;
248
276
  margin: 0;
@@ -259,5 +287,8 @@
259
287
  color: var(--rt-input-color-text-placeholder);
260
288
  font-style: italic;
261
289
  }
290
+
291
+ /* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
292
+ @include kv.radius-steps('--rt-multiselect-radius');
262
293
  }
263
294
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-note — тихая информационная заметка в common/ui (ViewEncapsulation.None).
3
5
  Селектор bare `.rt-note` (класс на host) — `:host` в None light-DOM не матчит.
@@ -13,5 +15,8 @@
13
15
  color: var(--rt-color-text-muted);
14
16
  font-size: var(--rt-text-sm);
15
17
  line-height: var(--rt-leading-normal);
18
+
19
+ /* Шаг входа `radius` переназначает скругление заметки. */
20
+ @include kv.radius-steps('--rt-note-radius');
16
21
  }
17
22
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-notifications-bell {
3
5
  --rt-notifications-bell-radius: var(--rt-radius-md);
@@ -35,5 +37,8 @@
35
37
  border-radius: var(--rt-notifications-bell-dot-radius);
36
38
  background-color: var(--rt-nav-marker-color);
37
39
  }
40
+
41
+ /* Шаг входа `radius` переназначает скругление кнопки: класс блока стоит и на хосте, и на кнопке внутри. */
42
+ @include kv.radius-steps('--rt-notifications-bell-radius', '> .rt-notifications-bell');
38
43
  }
39
44
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-pagination {
3
5
  --rt-pagination-page-radius: var(--rt-pagination-box-radius);
@@ -24,7 +26,7 @@
24
26
 
25
27
  .rt-icon-button {
26
28
  --rt-icon-button-size: var(--rt-pagination-arrow-size);
27
- --rt-icon-button-square-radius: var(--rt-pagination-arrow-radius);
29
+ --rt-icon-button-radius: var(--rt-pagination-arrow-radius);
28
30
  --rt-icon-button-shadow: var(--rt-pagination-arrow-shadow);
29
31
  }
30
32
 
@@ -123,6 +125,9 @@
123
125
  font-size: var(--rt-text-sm);
124
126
  white-space: var(--rt-pagination-per-page-label-white-space);
125
127
  }
128
+
129
+ /* Шаг входа `radius` переназначает скругление страницы; стрелки и поле держат своё. */
130
+ @include kv.radius-steps('--rt-pagination-page-radius');
126
131
  }
127
132
 
128
133
  // Узкий контейнер: прячем числовую полосу и диапазон, показываем compact-форму.
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-radio-button — радиокнопка. ViewEncapsulation.None, как у галочки: класс блока висит и на
3
5
  хосте, и на корне шаблона, поэтому правила блока вложены в хост. Размеры образца лежат на
@@ -7,6 +9,9 @@
7
9
 
8
10
  rt-radio-button {
9
11
  display: inline-block;
12
+
13
+ /* Шаг входа `radius` переназначает скругление карточки; кружок остаётся кругом. */
14
+ @include kv.radius-steps('--rt-radio-button-card-radius', '> .rt-radio-button');
10
15
  }
11
16
 
12
17
  rt-radio-button .rt-radio-button {
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-section-nav — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
3
5
  `.rt-section-nav` — сам хост (шаблон начинается с ng-container, класс ставит host). */
@@ -53,6 +55,9 @@
53
55
  letter-spacing: var(--rt-letter-spacing-wide);
54
56
  line-height: var(--rt-leading-snug);
55
57
  }
58
+
59
+ /* Шаг входа `radius` переназначает скругление плитки. */
60
+ @include kv.radius-steps('--rt-section-nav-tile-radius');
56
61
  }
57
62
 
58
63
  /* Тёмная тема: активная плитка на тёмной поверхности берёт свой фон.
@@ -8,13 +8,13 @@
8
8
 
9
9
  Свои входы поверх общих из [`RtFormControlBase`](../form-control/CONTEXT.md):
10
10
 
11
- | вход | тип | умолчание |
12
- | ------------------- | -------------------------------------------- | ----------------- |
13
- | `options` | `ReadonlyArray<{ label, value, disabled? }>` | `[]` |
14
- | `placeholder` | `string` | `''` |
15
- | `iconLeft` | `IRtIcon.Name \| null` | `null` |
16
- | `filter` | `boolean` | `false` |
17
- | `filterPlaceholder` | `string` | `''` → `uiSearch` |
11
+ | вход | тип | умолчание |
12
+ | ------------------- | ------------------------------------------------------- | ----------------- |
13
+ | `options` | `ReadonlyArray<{ label, value, disabled?, children? }>` | `[]` |
14
+ | `placeholder` | `string` | `''` |
15
+ | `iconLeft` | `IRtIcon.Name \| null` | `null` |
16
+ | `filter` | `boolean` | `false` |
17
+ | `filterPlaceholder` | `string` | `''` → `uiSearch` |
18
18
 
19
19
  | выход | тип |
20
20
  | ----------------- | ---------------- |
@@ -37,6 +37,9 @@
37
37
  первую доступную опцию.
38
38
  - Стрелки **перешагивают отключённые опции** и заворачиваются по кругу.
39
39
  - `Enter`/`Space` выбирают подсвеченную, `Escape` закрывает без выбора.
40
+ - В дереве `ArrowRight` раскрывает ветку или спускается к первому ребёнку, `ArrowLeft` сворачивает
41
+ ветку или поднимается к родителю. Опции с `children` рисуются деревом — договорённость в
42
+ `docs/specs/ui-kit-v2/option-tree/`.
40
43
  - Опции не фокусируются поодиночке: подсвеченная называется скринридеру через
41
44
  `aria-activedescendant` на триггере.
42
45
  - Подсвеченная опция **прокручивается в видимую часть панели** (`block: 'nearest'`): у панели
@@ -1,5 +1,8 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-select {
5
+ --rt-select-radius: var(--rt-input-radius);
3
6
  --rt-select-fill-radius: var(--rt-radius-sm);
4
7
  --rt-select-caret-transition-duration: var(--rt-duration-fast);
5
8
  --rt-select-own-outline-width: var(--rt-border-width-medium);
@@ -34,7 +37,7 @@
34
37
  align-items: center;
35
38
  padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
36
39
  border: var(--rt-input-border-width) solid var(--rt-input-color-border);
37
- border-radius: var(--rt-input-radius);
40
+ border-radius: var(--rt-select-radius);
38
41
  background-color: var(--rt-input-color-bg);
39
42
  color: var(--rt-input-color-text);
40
43
  cursor: pointer;
@@ -207,6 +210,7 @@
207
210
  --rt-select-check-display: var(--rt-overlay-select-check-display);
208
211
  --rt-select-option-min-height: var(--rt-overlay-select-option-min-height);
209
212
  --rt-select-panel-border-width: var(--rt-overlay-select-panel-border-width);
213
+ --rt-select-tree-indent: var(--rt-space-lg);
210
214
 
211
215
  /* Предел высоты по умолчанию — предел кита: длинный список прокручивается внутри
212
216
  панели, а не уходит за нижний край экрана. Вход `panelMaxHeight` ставит свой
@@ -238,6 +242,9 @@
238
242
  }
239
243
 
240
244
  &__option {
245
+ /* Уровень строки в дереве ставит разметка на саму строку; ноль — строка верхнего уровня. */
246
+ --rt-select-tree-level: 0;
247
+
241
248
  display: flex;
242
249
  min-height: var(--rt-select-option-min-height);
243
250
  box-sizing: border-box;
@@ -248,6 +255,7 @@
248
255
  cursor: pointer;
249
256
  font-size: var(--rt-select-option-font-size);
250
257
  gap: var(--rt-space-sm);
258
+ padding-inline-start: calc(var(--rt-space-md) + var(--rt-select-tree-indent) * var(--rt-select-tree-level));
251
259
 
252
260
  &:hover,
253
261
  &--active {
@@ -269,6 +277,30 @@
269
277
  }
270
278
  }
271
279
 
280
+ &__option-label {
281
+ min-width: 0;
282
+ flex: 1 1 auto;
283
+ }
284
+
285
+ /* Стрелка ветки и пустое место под неё у листа: шаг отступа равен их ширине с зазором,
286
+ и стрелка дочерней строки встаёт под подписью родителя. */
287
+ &__toggle,
288
+ &__toggle-space {
289
+ display: inline-flex;
290
+ flex-shrink: 0;
291
+ block-size: var(--rt-input-icon-size);
292
+ inline-size: var(--rt-input-icon-size);
293
+ }
294
+
295
+ &__toggle {
296
+ align-items: center;
297
+ justify-content: center;
298
+ padding: 0;
299
+ border: 0;
300
+ background: transparent;
301
+ cursor: pointer;
302
+ }
303
+
272
304
  /* Отметка выбранного пункта — у mat-select первого кита; свой вид её не рисует. */
273
305
  &__check {
274
306
  display: var(--rt-select-check-display);
@@ -280,5 +312,8 @@
280
312
  color: var(--rt-input-color-text-placeholder);
281
313
  font-style: italic;
282
314
  }
315
+
316
+ /* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
317
+ @include kv.radius-steps('--rt-select-radius');
283
318
  }
284
319
  }
@@ -1,20 +1,19 @@
1
1
  # `rt-skeleton`
2
2
 
3
3
  ```html
4
- <rt-skeleton shape="rectangle" size="md" width="240px" height="16px" borderRadius="xl" [animation]="true" />
4
+ <rt-skeleton shape="rectangle" size="md" width="240px" height="16px" radius="full" [animation]="true" />
5
5
  ```
6
6
 
7
- | вход | тип | умолчание |
8
- | -------------- | ---------------------------------------------- | ------------------ |
9
- | `shape` | `'rectangle' \| 'circle' \| 'square'` | `'rectangle'` |
10
- | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
11
- | `width` | `string` (любая CSS-длина) | `'100%'` |
12
- | `height` | `string` | `'10px'` |
13
- | `borderRadius` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| null` | `null` (по фигуре) |
14
- | `animation` | `boolean` | `true` |
7
+ | вход | тип | умолчание |
8
+ | ----------- | ------------------------------------- | ------------------ |
9
+ | `shape` | `'rectangle' \| 'circle' \| 'square'` | `'rectangle'` |
10
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
11
+ | `width` | `string` (любая CSS-длина) | `'100%'` |
12
+ | `height` | `string` | `'10px'` |
13
+ | `radius` | `TRtRadius \| null` — шаг общей шкалы | `null` (по фигуре) |
14
+ | `animation` | `boolean` | `true` |
15
15
 
16
- Шкала размеров: `sm` 10px, `md` 15px, `lg` 20px. Шкала скруглений: `xs` 2, `sm` 4, `md` 6,
17
- `lg` 10, `xl` 999px.
16
+ Шкала размеров: `sm` 10px, `md` 15px, `lg` 20px. Скругление — шаг общей шкалы кита, вход `radius`.
18
17
 
19
18
  ## Главное, что нужно знать
20
19
 
@@ -28,11 +27,10 @@
28
27
  - **Умолчание высоты — 10px, хотя умолчание размера — `md` (15px).** Расхождение намеренное:
29
28
  полоска текста тоньше шага размера. Прямоугольник слушается `height`, круг и квадрат — нет.
30
29
  - Круг и квадрат берут сторону из `size` и **игнорируют** `width`/`height`.
31
- - **`borderRadius: null` значит «по фигуре», а не «без скругления»:** прямоугольник берёт `xl`,
32
- квадрат — `sm` (пилюля из квадрата не квадрат). Заданное значение перебивает умолчание у
33
- обоих. Умолчанием нельзя держать сам `xl` — тогда явный `xl` неотличим от невыставленного, и
34
- квадрату приходится прибивать `sm` жёстко, молча теряя вход.
35
- - Круг — единственное исключение: он всегда `50%`, потому что круг и есть это скругление.
30
+ - **`radius: null` значит «по фигуре», а не «без скругления»:** прямоугольник и квадрат берут `sm`,
31
+ как в макете. Названный шаг перебивает умолчание у обоих.
32
+ - Круг — единственное исключение: он всегда круглый, и шаг его не меняет — круг и есть это
33
+ скругление.
36
34
  - `animation` принимает голый атрибут (`animation` без значения = `true`).
37
35
  - Мерцание снимается у пользователей с `prefers-reduced-motion` — правило в SCSS.
38
36
 
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-skeleton {
3
5
  --rt-skeleton-wave-duration: 2.5s;
@@ -24,9 +26,13 @@
24
26
  }
25
27
 
26
28
  &--square {
27
- border-radius: 0;
29
+ border-radius: var(--rt-skeleton-radius);
28
30
  }
29
31
 
32
+ /* Шаг входа `radius` переназначает скругление прямоугольника и квадрата; круг берёт своё
33
+ свойство и шагом не задевается. */
34
+ @include kv.radius-steps('--rt-skeleton-radius');
35
+
30
36
  &--sm {
31
37
  min-width: 10px;
32
38
  min-height: 10px;
@@ -6,12 +6,12 @@
6
6
  <rt-skeleton-wrapper width="240px" height="16px" [isLoading]="!tour()">{{ tour()?.title }}</rt-skeleton-wrapper>
7
7
  ```
8
8
 
9
- | вход | тип | умолчание |
10
- | ----------------------------------------------- | --------------------------------------------- | --------- |
11
- | `isLoading` | `boolean` | `false` |
12
- | `width` | `string` | `'100%'` |
13
- | `height` | `string` | `'15px'` |
14
- | `shape` / `size` / `borderRadius` / `animation` | как у [`rt-skeleton`](../skeleton/CONTEXT.md) | |
9
+ | вход | тип | умолчание |
10
+ | ----------------------------------------- | --------------------------------------------- | --------- |
11
+ | `isLoading` | `boolean` | `false` |
12
+ | `width` | `string` | `'100%'` |
13
+ | `height` | `string` | `'15px'` |
14
+ | `shape` / `size` / `radius` / `animation` | как у [`rt-skeleton`](../skeleton/CONTEXT.md) | |
15
15
 
16
16
  ## Главное, что нужно знать
17
17
 
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-split-button — основной CTA + каретка с меню второстепенных действий.
3
5
  ViewEncapsulation.None: селекторы префиксованы `.rt-split-button`. Меню
@@ -9,6 +11,10 @@
9
11
 
10
12
  display: inline-flex;
11
13
 
14
+ /* Шаг входа `radius` переназначает скругление обеих кнопок контрола: лицо и каретка —
15
+ одна поверхность. */
16
+ @include kv.radius-steps('--rt-btn-radius', '> .rt-split-button__control > .rt-button');
17
+
12
18
  /* Контрол — origin popover'а (width="trigger" берёт его ширину) и flex-ряд
13
19
  лица + каретки. */
14
20
  &__control {
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-stepper — линейный прогресс-степпер в common/ui. ViewEncapsulation.None.
3
5
  Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stepper` висит
@@ -122,5 +124,8 @@
122
124
  }
123
125
  }
124
126
  }
127
+
128
+ /* Шаг входа `radius` переназначает скругление точек шагов. */
129
+ @include kv.radius-steps('--rt-stepper-radius', '> .rt-stepper');
125
130
  }
126
131
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-table — common/ui таблица поверх cdk-table. ViewEncapsulation.None:
3
5
  классы доступны без scope-attrs, токены --rt-* наследуются. */
@@ -276,6 +278,13 @@
276
278
  flex-direction: column;
277
279
  gap: var(--rt-space-sm);
278
280
  }
281
+
282
+ /* Фон у каждой карточки свой, а хост без фона: иначе скруглённый угол карточки
283
+ стоит на белом квадрате хоста, и на странице другого цвета угол видно. Пустая
284
+ таблица карточек не рисует и держит свою панель заглушки. */
285
+ &:not(.rt-table--empty) {
286
+ background: transparent;
287
+ }
279
288
  }
280
289
 
281
290
  &__card {
@@ -334,6 +343,9 @@
334
343
  width: 80%;
335
344
  }
336
345
  }
346
+
347
+ /* Шаг входа `radius` переназначает скругление карточки узкого вида; у широкого вида углов нет. */
348
+ @include kv.radius-steps('--rt-table-card-radius');
337
349
  }
338
350
 
339
351
  /* В тёмной теме таблица сливается с фоном контента (bg-page), а не поднимается
@@ -1,19 +1,18 @@
1
1
  # `rt-tag`
2
2
 
3
3
  ```html
4
- <rt-tag value="Активен" severity="success" shape="pill" appearance="solid" icon="check" [closable]="true" (closed)="onClosed($event)" />
4
+ <rt-tag value="Активен" severity="success" appearance="solid" icon="check" [closable]="true" (closed)="onClosed($event)" />
5
5
  ```
6
6
 
7
- | вход | тип | умолчание |
8
- | ------------------ | -------------------------------------------------------------------------- | -------------- |
9
- | `value` | `string` | **обязателен** |
10
- | `severity` | `'info' \| 'success' \| 'warning' \| 'danger' \| 'secondary' \| 'neutral'` | `'neutral'` |
11
- | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
12
- | `shape` | `'pill' \| 'square'` | `'pill'` |
13
- | `appearance` | `'solid' \| 'outlined'` | `'solid'` |
14
- | `radius` | `'none' \| 'sm' \| 'md' \| 'lg' \| 'full' \| null` | `null` |
15
- | `icon` / `iconEnd` | `IRtIcon.Name \| null` | `null` |
16
- | `closable` | `boolean` | `false` |
7
+ | вход | тип | умолчание |
8
+ | ------------------ | -------------------------------------------------------------------------- | --------------- |
9
+ | `value` | `string` | **обязателен** |
10
+ | `severity` | `'info' \| 'success' \| 'warning' \| 'danger' \| 'secondary' \| 'neutral'` | `'neutral'` |
11
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
12
+ | `appearance` | `'solid' \| 'outlined'` | `'solid'` |
13
+ | `radius` | `TRtRadius \| null` — шаг общей шкалы | `null` → `full` |
14
+ | `icon` / `iconEnd` | `IRtIcon.Name \| null` | `null` |
15
+ | `closable` | `boolean` | `false` |
17
16
 
18
17
  | выход | тип |
19
18
  | -------- | ------------ |
@@ -37,8 +36,8 @@
37
36
  12 пикселей, `md` — 16, `lg` — 20. Кегль, названный отдельно, оставил бы отступы от другой
38
37
  ступени, и ряд пилюль перестал бы выстраиваться.
39
38
 
40
- - `radius` перебивает скругление, заданное формой. Без него класс скругления не выводится
41
- вовсе — радиус берётся из `shape`.
39
+ - `radius` — шаг общей шкалы кита, он ложится на хост атрибутом. Без него пилюля скруглена
40
+ полностью.
42
41
  - Палитра дублируется атрибутом `data-severity` — по нему тег находят проверки и внешние стили,
43
42
  не завязываясь на BEM-класс.
44
43
  - Подпись крестика для скринридера берётся из словаря кита (`uiRemove`). Без
@@ -48,8 +47,8 @@
48
47
 
49
48
  - `value` — обязательный вход: тег без текста не бывает. Иконка без текста — это
50
49
  [`rt-icon-button`](../icon-button/CONTEXT.md), а не тег.
51
- - Модификаторы выводятся BEM-директивами: `rt-tag--severity--success`, `rt-tag--shape--square`,
52
- булев `closable` даёт `rt-tag--closable` без значения.
50
+ - Модификаторы выводятся BEM-директивами: `rt-tag--severity--success`, булев `closable` даёт
51
+ `rt-tag--closable` без значения.
53
52
 
54
53
  ## Рядом
55
54
 
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-tag — status pill в common/ui. ViewEncapsulation.None.
3
5
  Хост адресуется по имени элемента, а не по классу блока: класс `.rt-tag` висит
@@ -13,7 +15,7 @@
13
15
  max-width: 100%;
14
16
 
15
17
  .rt-tag {
16
- --rt-tag-radius: var(--rt-radius-md);
18
+ --rt-tag-radius: var(--rt-radius-full);
17
19
  --rt-tag-border-width: var(--rt-border-width-thin);
18
20
 
19
21
  display: inline-flex;
@@ -48,35 +50,6 @@
48
50
  gap: var(--rt-space-2);
49
51
  }
50
52
 
51
- &--shape--pill {
52
- --rt-tag-radius: var(--rt-radius-full);
53
- }
54
-
55
- &--shape--square {
56
- --rt-tag-radius: var(--rt-radius-sm);
57
- }
58
-
59
- /* Явный radius переопределяет shape — правила идут позже по порядку. */
60
- &--radius--none {
61
- --rt-tag-radius: var(--rt-radius-none);
62
- }
63
-
64
- &--radius--sm {
65
- --rt-tag-radius: var(--rt-radius-sm);
66
- }
67
-
68
- &--radius--md {
69
- --rt-tag-radius: var(--rt-radius-md);
70
- }
71
-
72
- &--radius--lg {
73
- --rt-tag-radius: var(--rt-radius-lg);
74
- }
75
-
76
- &--radius--full {
77
- --rt-tag-radius: var(--rt-radius-full);
78
- }
79
-
80
53
  &--severity--info {
81
54
  background: var(--rt-color-state-info-bg);
82
55
  color: var(--rt-color-state-info);
@@ -137,5 +110,8 @@
137
110
  margin-inline-start: var(--rt-space-0-5);
138
111
  }
139
112
  }
113
+
114
+ /* Шаг входа `radius` переназначает собственное свойство пилюли. */
115
+ @include kv.radius-steps('--rt-tag-radius', '> .rt-tag');
140
116
  }
141
117
  }
@@ -1,5 +1,9 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-textarea {
5
+ --rt-textarea-radius: var(--rt-input-radius);
6
+
3
7
  display: block;
4
8
  width: 100%;
5
9
 
@@ -16,7 +20,7 @@
16
20
  box-sizing: border-box;
17
21
  padding: var(--rt-textarea-padding-y) var(--rt-input-padding-x);
18
22
  border: var(--rt-input-border-width) solid var(--rt-input-color-border);
19
- border-radius: var(--rt-input-radius);
23
+ border-radius: var(--rt-textarea-radius);
20
24
  background-color: var(--rt-input-color-bg);
21
25
  color: var(--rt-input-color-text);
22
26
 
@@ -76,5 +80,8 @@
76
80
  color: var(--rt-field-value-empty-color);
77
81
  }
78
82
  }
83
+
84
+ /* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
85
+ @include kv.radius-steps('--rt-textarea-radius');
79
86
  }
80
87
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  .rt-thread-list {
3
5
  --rt-thread-list-border-width: var(--rt-border-width-thin);
@@ -253,5 +255,8 @@
253
255
  inline-size: 48px;
254
256
  }
255
257
  }
258
+
259
+ /* Шаг входа `radius` переназначает скругление карточки беседы. */
260
+ @include kv.radius-steps('--rt-thread-list-card-radius');
256
261
  }
257
262
  }
@@ -1,3 +1,5 @@
1
+ @use '../../../styles/mixins' as kv;
2
+
1
3
  @layer rt-kit.components {
2
4
  /* rt-toggle-button-group — segmented control. ViewEncapsulation.None.
3
5
  Хост адресуется по имени элемента, а не по классу блока: класс
@@ -26,9 +28,9 @@
26
28
  --rt-toggle-button-group-transition-duration: var(--rt-duration-fast);
27
29
  --rt-toggle-button-group-focus-shadow: var(--rt-shadow-focus-ring);
28
30
  --rt-toggle-button-group-track-padding: 4px;
29
- --rt-toggle-button-group-track-radius: 8px;
31
+ --rt-toggle-button-group-track-radius: var(--rt-radius-md);
30
32
  --rt-toggle-button-group-btn-padding: 0 8px;
31
- --rt-toggle-button-group-btn-radius: 8px;
33
+ --rt-toggle-button-group-btn-radius: var(--rt-radius-ms);
32
34
  --rt-toggle-button-group-btn-gap: 4px;
33
35
  --rt-toggle-button-group-btn-font-size: 12px;
34
36
  --rt-toggle-button-group-btn-line-height: 14px;
@@ -98,9 +100,7 @@
98
100
  /* Размерные тиры — общая высота совпадает с rt-button (sm/md/lg). */
99
101
  &--md {
100
102
  --rt-toggle-button-group-height: 40px;
101
- --rt-toggle-button-group-track-radius: 10px;
102
103
  --rt-toggle-button-group-btn-padding: 0 14px;
103
- --rt-toggle-button-group-btn-radius: 10px;
104
104
  --rt-toggle-button-group-btn-gap: 6px;
105
105
  --rt-toggle-button-group-btn-font-size: 14px;
106
106
  --rt-toggle-button-group-btn-line-height: 16px;
@@ -108,9 +108,7 @@
108
108
 
109
109
  &--lg {
110
110
  --rt-toggle-button-group-height: 50px;
111
- --rt-toggle-button-group-track-radius: 12px;
112
111
  --rt-toggle-button-group-btn-padding: 0 20px;
113
- --rt-toggle-button-group-btn-radius: 12px;
114
112
  --rt-toggle-button-group-btn-gap: 8px;
115
113
  --rt-toggle-button-group-btn-font-size: 16px;
116
114
  --rt-toggle-button-group-btn-line-height: 18px;
@@ -120,6 +118,9 @@
120
118
  opacity: 0.5;
121
119
  }
122
120
  }
121
+
122
+ /* Шаг входа `radius` переназначает скругление дорожки; сегменты держат своё. */
123
+ @include kv.radius-steps('--rt-toggle-button-group-track-radius', '> .rt-toggle-button-group');
123
124
  }
124
125
 
125
126
  /* full-width: группа растягивается на контейнер, опции делят ширину поровну. */