@rt-tools/ui-kit-v2 0.39.0 → 0.39.2

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 (88) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +4 -4
  2. package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +2 -2
  4. package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +14 -0
  6. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +5 -5
  8. package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +48 -45
  10. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +62 -9
  12. package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +93 -12
  14. package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs +2 -2
  16. package/fesm2022/rt-tools-ui-kit-v2-detail-list.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-field.mjs +2 -2
  18. package/fesm2022/rt-tools-ui-kit-v2-field.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs +4 -1
  20. package/fesm2022/rt-tools-ui-kit-v2-form-control.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +10 -0
  22. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  23. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +76 -5
  24. package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
  25. package/fesm2022/rt-tools-ui-kit-v2-input.mjs +2 -2
  26. package/fesm2022/rt-tools-ui-kit-v2-message.mjs +3 -3
  27. package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
  28. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +4 -4
  29. package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
  30. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs +37 -16
  31. package/fesm2022/rt-tools-ui-kit-v2-stat-tile.mjs.map +1 -1
  32. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs +101 -0
  33. package/fesm2022/rt-tools-ui-kit-v2-table-core.mjs.map +1 -0
  34. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +130 -42
  35. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  36. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +41 -4
  37. package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
  38. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +2 -0
  39. package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
  40. package/package.json +5 -1
  41. package/src/assets/icons-material/bookmark.fill.svg +5 -0
  42. package/src/assets/icons-material/bookmark.svg +5 -0
  43. package/src/assets/icons-material/flag.fill.svg +3 -0
  44. package/src/assets/icons-material/flag.svg +5 -0
  45. package/src/lib/components/aside/footer/CONTEXT.md +27 -0
  46. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +8 -3
  47. package/src/lib/components/aside/header/rt-aside-header.component.scss +11 -3
  48. package/src/lib/components/button/rt-button.directive.scss +5 -1
  49. package/src/lib/components/data-table/CONTEXT.md +8 -2
  50. package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +51 -2
  51. package/src/lib/components/date-range/panel/rt-date-range-panel.component.scss +95 -2
  52. package/src/lib/components/detail-list/CONTEXT.md +3 -0
  53. package/src/lib/components/detail-list/rt-detail-row.component.scss +1 -0
  54. package/src/lib/components/field/CONTEXT.md +4 -2
  55. package/src/lib/components/field/rt-field.component.scss +14 -0
  56. package/src/lib/components/form-control/CONTEXT.md +13 -8
  57. package/src/lib/components/input/rt-input.component.scss +4 -0
  58. package/src/lib/components/input-number/CONTEXT.md +8 -0
  59. package/src/lib/components/input-number/rt-input-number.component.scss +50 -0
  60. package/src/lib/components/message/CONTEXT.md +1 -1
  61. package/src/lib/components/message/rt-message.component.scss +2 -1
  62. package/src/lib/components/multiselect/rt-multiselect.component.scss +21 -0
  63. package/src/lib/components/service-block/stories/component/test-service-block-panel.component.scss +29 -0
  64. package/src/lib/components/stat-tile/CONTEXT.md +11 -6
  65. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +21 -0
  66. package/src/lib/components/stat-tile/stories/component/test-stat-tile-matrix.component.scss +15 -0
  67. package/src/lib/components/table/CONTEXT.md +23 -0
  68. package/src/lib/components/table/copy-cell/CONTEXT.md +32 -0
  69. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +26 -0
  70. package/src/lib/components/table/rt-table.component.scss +77 -22
  71. package/src/lib/components/table/stories/component/test-table-pinned.component.scss +76 -0
  72. package/src/lib/components/tabs/CONTEXT.md +18 -16
  73. package/src/lib/components/tabs/rt-tabs.component.scss +25 -1
  74. package/src/styles/_form.scss +10 -0
  75. package/src/styles/_primitives.scss +2 -0
  76. package/src/styles/_semantic.scss +11 -1
  77. package/src/styles/_theme-dark.scss +2 -0
  78. package/styles/tokens.css +95 -9
  79. package/types/rt-tools-ui-kit-v2-core.d.ts +28 -5
  80. package/types/rt-tools-ui-kit-v2-data-table.d.ts +23 -9
  81. package/types/rt-tools-ui-kit-v2-date-picker.d.ts +14 -0
  82. package/types/rt-tools-ui-kit-v2-form-control.d.ts +2 -2
  83. package/types/rt-tools-ui-kit-v2-input-number.d.ts +30 -2
  84. package/types/rt-tools-ui-kit-v2-message.d.ts +1 -1
  85. package/types/rt-tools-ui-kit-v2-stat-tile.d.ts +29 -6
  86. package/types/rt-tools-ui-kit-v2-table-core.d.ts +76 -0
  87. package/types/rt-tools-ui-kit-v2-table.d.ts +52 -18
  88. package/types/rt-tools-ui-kit-v2-tabs.d.ts +26 -0
@@ -0,0 +1,76 @@
1
+ @layer rt-kit.components {
2
+ /* Кадры закреплённой колонки: сетка два в ряд, как в макете. Ширина контейнера — 375, таблица
3
+ шире него, поэтому контейнер прокручивается вбок. Ширины колонок взяты из макета. */
4
+ .app-table-pinned {
5
+ display: grid;
6
+ gap: var(--rt-space-6) var(--rt-space-12);
7
+ grid-template-columns: repeat(2, 375px);
8
+
9
+ &__frame {
10
+ margin: 0;
11
+ background: var(--rt-color-bg-page);
12
+ color: var(--rt-color-text-primary);
13
+ }
14
+
15
+ &__caption {
16
+ margin-bottom: calc(var(--rt-space-1) * 3);
17
+ font-size: var(--rt-text-sm);
18
+ }
19
+
20
+ &__scroller {
21
+ width: 375px;
22
+ overflow-x: auto;
23
+ scrollbar-width: none;
24
+ }
25
+
26
+ /* Колонки макета — 150, 140, 140 и 130 вместе с отступами ячейки по 20 с боков и линией
27
+ между колонками: ячейка кита считает ширину без них, а слитая граница отдаёт каждой соседней
28
+ ячейке по половине пикселя. Поэтому здесь стоит ширина содержимого. Без фиксированной
29
+ раскладки таблица делит место по содержимому. */
30
+ &__table {
31
+ min-width: 560px;
32
+ table-layout: fixed;
33
+
34
+ .cdk-column-guest {
35
+ width: 109.5px;
36
+ }
37
+
38
+ .cdk-column-dates,
39
+ .cdk-column-status {
40
+ width: 99px;
41
+ }
42
+
43
+ .cdk-column-sum {
44
+ width: 89.5px;
45
+ }
46
+ }
47
+
48
+ /* Строка итога: цвет строки задаёт приложение тем же свойством, что берёт закреплённая ячейка. */
49
+ &__footer {
50
+ --rt-table-row-bg: var(--rt-color-bg-surface-subtle);
51
+
52
+ /* Ячейки итога кит не оформляет: высота, отступы и нижняя линия взяты у обычной ячейки
53
+ таблицы. */
54
+ .cdk-footer-cell {
55
+ height: calc(50px - 2 * var(--rt-space-2) - var(--rt-table-border-width));
56
+ padding: var(--rt-space-2) var(--rt-space-5);
57
+ border-bottom: var(--rt-table-border-width) solid var(--rt-color-border-subtle);
58
+ }
59
+ }
60
+
61
+ /* Имя гостя обрезается многоточием, как в макете; полное имя — в подсказке ячейки. Обрезает
62
+ вложенный элемент, а не сама ячейка: закреплённая ячейка рисует тень за своим краем, и её
63
+ собственный overflow: hidden эту тень срезает. */
64
+ &__guest {
65
+ display: block;
66
+ overflow: hidden;
67
+ max-width: 110px;
68
+ text-overflow: ellipsis;
69
+ white-space: nowrap;
70
+ }
71
+
72
+ &__total {
73
+ font-weight: var(--rt-font-weight-semibold);
74
+ }
75
+ }
76
+ }
@@ -31,22 +31,24 @@
31
31
 
32
32
  ## `[rtTab]`
33
33
 
34
- | вход | тип | умолчание |
35
- | --------------------------------- | --------------------------------------------- | --------------------- |
36
- | `rtTab` | `IRtTabs.Id` — идентификатор вкладки | `''` |
37
- | `label` | `string` | `''` |
38
- | `titleTemplate` | `TemplateRef \| null` | `null` |
39
- | `icon` / `iconColor` | `IRtIcon.Name \| null` / `IRtTabs.TitleColor` | `null` / `'current'` |
40
- | `badge` | `string \| number \| null` | `null` |
41
- | `badgeTitle` | `string` — подсказка при наведении на метку | `''` |
42
- | `badgeAriaLabel` | `string` — подпись метки для чтения с экрана | `''` |
43
- | `disabled` / `hidden` / `invalid` | `boolean` | `false` |
44
- | `invalidMessage` | `string` | `''` → `uiTabInvalid` |
45
- | `glyph` | `string \| null` — значок Material | `null` |
46
- | `tooltip` | `string` — подсказка, и у отключённой | `''` |
47
- | `closable` | `boolean` | `false` |
48
- | `closeTooltip` | `string` — подсказка крестика | `''` |
49
- | `closeTooltipPlacement` | `IRtTooltip.Placement \| null` | `null` |
34
+ | вход | тип | умолчание |
35
+ | --------------------------------- | ------------------------------------------------- | --------------------- |
36
+ | `rtTab` | `IRtTabs.Id` — идентификатор вкладки | `''` |
37
+ | `label` | `string` | `''` |
38
+ | `titleTemplate` | `TemplateRef \| null` | `null` |
39
+ | `icon` / `iconColor` | `IRtIcon.Name \| null` / `IRtTabs.TitleColor` | `null` / `'current'` |
40
+ | `badge` | `string \| number \| null` | `null` |
41
+ | `badgeTitle` | `string` — подсказка при наведении на метку | `''` |
42
+ | `badgeAriaLabel` | `string` — подпись метки для чтения с экрана | `''` |
43
+ | `badgePosition` | `IRtTabs.BadgePosition` — `'overlay'` над иконкой | `'inline'` |
44
+ | `iconFill` | `boolean` — иконка залита | `false` |
45
+ | `disabled` / `hidden` / `invalid` | `boolean` | `false` |
46
+ | `invalidMessage` | `string` | `''` → `uiTabInvalid` |
47
+ | `glyph` | `string \| null` — значок Material | `null` |
48
+ | `tooltip` | `string` — подсказка, и у отключённой | `''` |
49
+ | `closable` | `boolean` | `false` |
50
+ | `closeTooltip` | `string` — подсказка крестика | `''` |
51
+ | `closeTooltipPlacement` | `IRtTooltip.Placement \| null` | `null` |
50
52
 
51
53
  ## Главное, что нужно знать
52
54
 
@@ -351,6 +351,13 @@
351
351
  flex-shrink: 0;
352
352
  }
353
353
 
354
+ /* Опора бейджа над иконкой: вкладка не знает, где иконка, и кружок ставится от её коробки. */
355
+ &__icon-box {
356
+ position: relative;
357
+ display: inline-flex;
358
+ flex-shrink: 0;
359
+ }
360
+
354
361
  &__badge {
355
362
  display: inline-flex;
356
363
  min-width: 18px;
@@ -364,6 +371,23 @@
364
371
  font-size: var(--rt-text-xs);
365
372
  font-weight: var(--rt-font-weight-medium);
366
373
  line-height: var(--rt-leading-none);
374
+
375
+ /* Кружок над правым верхним углом иконки, как `matBadge` у Material: из потока вынут, и
376
+ вкладка той же ширины, что без бейджа. Привязан правым краем — длинное число растёт
377
+ на иконку, а не на подпись. Сторона кружка — его полная ширина: поля внутри неё, иначе
378
+ однозначное число шире 16 px. */
379
+ &--overlay {
380
+ position: absolute;
381
+ top: calc(-1 * var(--rt-space-2));
382
+ right: calc(-1 * (var(--rt-space-1) + var(--rt-space-0-5)));
383
+ min-width: var(--rt-size-4);
384
+ height: var(--rt-size-4);
385
+ box-sizing: border-box;
386
+ padding: 0 var(--rt-space-1);
387
+ background-color: var(--rt-color-action-primary);
388
+ color: var(--rt-color-action-on-primary);
389
+ font-size: var(--rt-text-2xs);
390
+ }
367
391
  }
368
392
 
369
393
  /* Крестик закрываемой вкладки: подложка при наведении отделяет его от самой вкладки,
@@ -419,7 +443,7 @@
419
443
  background-color: var(--rt-color-action-primary);
420
444
  }
421
445
 
422
- .rt-tab-item__badge {
446
+ .rt-tab-item__badge:not(.rt-tab-item__badge--overlay) {
423
447
  background-color: var(--rt-color-action-primary-soft);
424
448
  color: var(--rt-color-action-primary);
425
449
  }
@@ -231,6 +231,16 @@
231
231
  }
232
232
  }
233
233
 
234
+ /* Блок службы, стоящий прямо в форме, отбивается от следующего раздела шагом строк: на
235
+ макете панели подключения поле под чертой блока стоит на 16 при любой ширине. Источник
236
+ промежутка остаётся один, зазор формы, а блок снимает с него разницу между шагом разделов
237
+ и шагом строк. Разница есть только шире порога панели: на узком экране зазор формы и так 16. */
238
+ @media (width > #{bp.$rt-bp-md}) {
239
+ .rt-form > .rt-service-block {
240
+ margin-bottom: calc(var(--rt-space-md) - var(--rt-space-xl));
241
+ }
242
+ }
243
+
234
244
  /* На узком экране панель занимает весь экран, и ритм разделов сжимается вдвое. Порог тот же,
235
245
  что у самой панели. Ритм строк не трогается: строки и на узком идут тем же шагом. */
236
246
  @media (width <= #{bp.$rt-bp-md}) {
@@ -275,6 +275,8 @@
275
275
  /* Alpha overlays — для backdrop'ов и focus-ring tint'ов. */
276
276
  --rt-overlay-black-4: rgb(0 0 0 / 4%);
277
277
  --rt-overlay-black-8: rgb(0 0 0 / 8%); /* наведение поверх приглушённой поверхности: она сама стоит на четырёх процентах */
278
+ --rt-overlay-black-16: rgb(0 0 0 / 16%); /* тень у края закреплённой колонки таблицы */
279
+ --rt-overlay-black-64: rgb(0 0 0 / 64%); /* та же тень на графите */
278
280
  --rt-overlay-white-4: rgb(255 255 255 / 4%);
279
281
  --rt-overlay-white-8: rgb(255 255 255 / 8%); /* то же на графите */
280
282
  --rt-overlay-white-25: rgb(250 250 250 / 25%); /* disabled-текст на графите */
@@ -162,6 +162,15 @@
162
162
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
163
163
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
164
164
 
165
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
166
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
167
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
168
+
169
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
170
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
171
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
172
+ --rt-color-table-bg: var(--rt-color-bg-surface);
173
+
165
174
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
166
175
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
167
176
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -398,6 +407,7 @@
398
407
  --rt-field-gap: var(--rt-space-xs);
399
408
  --rt-field-label-font-size: var(--rt-text-sm);
400
409
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
410
+ --rt-field-label-line-height: var(--rt-leading-none);
401
411
  --rt-field-label-color: var(--rt-color-text-muted);
402
412
  --rt-field-label-help-gap: var(--rt-space-xs);
403
413
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -407,7 +417,7 @@
407
417
  --rt-field-messages-padding-top: 0px;
408
418
  --rt-field-error-color: var(--rt-color-state-danger);
409
419
  --rt-field-required-color: var(--rt-color-state-danger);
410
- --rt-field-required-gap: var(--rt-space-1);
420
+ --rt-field-required-gap: var(--rt-space-0-5);
411
421
  --rt-field-value-font-size: var(--rt-text-sm);
412
422
  --rt-field-value-color: var(--rt-color-text-primary);
413
423
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -87,6 +87,8 @@
87
87
  /* Шапка таблицы — та же подложка роли, что в светлой: ответ стоит, чтобы тёмная тема
88
88
  выигрывала у материального набора и на этом имени. */
89
89
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
90
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-64);
91
+ --rt-color-table-bg: var(--rt-color-bg-page);
90
92
  --rt-color-field-fill-underline: var(--rt-color-border-strong);
91
93
 
92
94
  /* Навигация — вся шкала серых разворачивается: подложка уходит глубже
package/styles/tokens.css CHANGED
@@ -331,6 +331,8 @@
331
331
  /* Alpha overlays — для backdrop'ов и focus-ring tint'ов. */
332
332
  --rt-overlay-black-4: rgb(0 0 0 / 4%);
333
333
  --rt-overlay-black-8: rgb(0 0 0 / 8%); /* наведение поверх приглушённой поверхности: она сама стоит на четырёх процентах */
334
+ --rt-overlay-black-16: rgb(0 0 0 / 16%); /* тень у края закреплённой колонки таблицы */
335
+ --rt-overlay-black-64: rgb(0 0 0 / 64%); /* та же тень на графите */
334
336
  --rt-overlay-white-4: rgb(255 255 255 / 4%);
335
337
  --rt-overlay-white-8: rgb(255 255 255 / 8%); /* то же на графите */
336
338
  --rt-overlay-white-25: rgb(250 250 250 / 25%); /* disabled-текст на графите */
@@ -602,6 +604,13 @@
602
604
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
603
605
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
604
606
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
607
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
608
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
609
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
610
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
611
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
612
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
613
+ --rt-color-table-bg: var(--rt-color-bg-surface);
605
614
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
606
615
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
607
616
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -808,6 +817,7 @@
808
817
  --rt-field-gap: var(--rt-space-xs);
809
818
  --rt-field-label-font-size: var(--rt-text-sm);
810
819
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
820
+ --rt-field-label-line-height: var(--rt-leading-none);
811
821
  --rt-field-label-color: var(--rt-color-text-muted);
812
822
  --rt-field-label-help-gap: var(--rt-space-xs);
813
823
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -817,7 +827,7 @@
817
827
  --rt-field-messages-padding-top: 0px;
818
828
  --rt-field-error-color: var(--rt-color-state-danger);
819
829
  --rt-field-required-color: var(--rt-color-state-danger);
820
- --rt-field-required-gap: var(--rt-space-1);
830
+ --rt-field-required-gap: var(--rt-space-0-5);
821
831
  --rt-field-value-font-size: var(--rt-text-sm);
822
832
  --rt-field-value-color: var(--rt-color-text-primary);
823
833
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -1379,6 +1389,8 @@ html.rt-theme-dark {
1379
1389
  /* Шапка таблицы — та же подложка роли, что в светлой: ответ стоит, чтобы тёмная тема
1380
1390
  выигрывала у материального набора и на этом имени. */
1381
1391
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
1392
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-64);
1393
+ --rt-color-table-bg: var(--rt-color-bg-page);
1382
1394
  --rt-color-field-fill-underline: var(--rt-color-border-strong);
1383
1395
  /* Навигация — вся шкала серых разворачивается: подложка уходит глубже
1384
1396
  поверхности, а приглушённые подписи становятся светлее фона, а не темнее.
@@ -1636,6 +1648,13 @@ html.rt-theme-dark {
1636
1648
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
1637
1649
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
1638
1650
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
1651
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
1652
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
1653
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
1654
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
1655
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
1656
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
1657
+ --rt-color-table-bg: var(--rt-color-bg-surface);
1639
1658
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
1640
1659
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
1641
1660
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -1842,6 +1861,7 @@ html.rt-theme-dark {
1842
1861
  --rt-field-gap: var(--rt-space-xs);
1843
1862
  --rt-field-label-font-size: var(--rt-text-sm);
1844
1863
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
1864
+ --rt-field-label-line-height: var(--rt-leading-none);
1845
1865
  --rt-field-label-color: var(--rt-color-text-muted);
1846
1866
  --rt-field-label-help-gap: var(--rt-space-xs);
1847
1867
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -1851,7 +1871,7 @@ html.rt-theme-dark {
1851
1871
  --rt-field-messages-padding-top: 0px;
1852
1872
  --rt-field-error-color: var(--rt-color-state-danger);
1853
1873
  --rt-field-required-color: var(--rt-color-state-danger);
1854
- --rt-field-required-gap: var(--rt-space-1);
1874
+ --rt-field-required-gap: var(--rt-space-0-5);
1855
1875
  --rt-field-value-font-size: var(--rt-text-sm);
1856
1876
  --rt-field-value-color: var(--rt-color-text-primary);
1857
1877
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -2173,6 +2193,13 @@ html.rt-theme-dark {
2173
2193
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
2174
2194
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
2175
2195
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
2196
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
2197
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
2198
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
2199
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
2200
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
2201
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
2202
+ --rt-color-table-bg: var(--rt-color-bg-surface);
2176
2203
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
2177
2204
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
2178
2205
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -2379,6 +2406,7 @@ html.rt-theme-dark {
2379
2406
  --rt-field-gap: var(--rt-space-xs);
2380
2407
  --rt-field-label-font-size: var(--rt-text-sm);
2381
2408
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
2409
+ --rt-field-label-line-height: var(--rt-leading-none);
2382
2410
  --rt-field-label-color: var(--rt-color-text-muted);
2383
2411
  --rt-field-label-help-gap: var(--rt-space-xs);
2384
2412
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -2388,7 +2416,7 @@ html.rt-theme-dark {
2388
2416
  --rt-field-messages-padding-top: 0px;
2389
2417
  --rt-field-error-color: var(--rt-color-state-danger);
2390
2418
  --rt-field-required-color: var(--rt-color-state-danger);
2391
- --rt-field-required-gap: var(--rt-space-1);
2419
+ --rt-field-required-gap: var(--rt-space-0-5);
2392
2420
  --rt-field-value-font-size: var(--rt-text-sm);
2393
2421
  --rt-field-value-color: var(--rt-color-text-primary);
2394
2422
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -2631,6 +2659,8 @@ html.rt-theme-dark {
2631
2659
  /* Шапка таблицы — та же подложка роли, что в светлой: ответ стоит, чтобы тёмная тема
2632
2660
  выигрывала у материального набора и на этом имени. */
2633
2661
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
2662
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-64);
2663
+ --rt-color-table-bg: var(--rt-color-bg-page);
2634
2664
  --rt-color-field-fill-underline: var(--rt-color-border-strong);
2635
2665
  /* Навигация — вся шкала серых разворачивается: подложка уходит глубже
2636
2666
  поверхности, а приглушённые подписи становятся светлее фона, а не темнее.
@@ -2859,6 +2889,13 @@ html.rt-theme-dark {
2859
2889
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
2860
2890
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
2861
2891
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
2892
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
2893
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
2894
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
2895
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
2896
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
2897
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
2898
+ --rt-color-table-bg: var(--rt-color-bg-surface);
2862
2899
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
2863
2900
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
2864
2901
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -3065,6 +3102,7 @@ html.rt-theme-dark {
3065
3102
  --rt-field-gap: var(--rt-space-xs);
3066
3103
  --rt-field-label-font-size: var(--rt-text-sm);
3067
3104
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
3105
+ --rt-field-label-line-height: var(--rt-leading-none);
3068
3106
  --rt-field-label-color: var(--rt-color-text-muted);
3069
3107
  --rt-field-label-help-gap: var(--rt-space-xs);
3070
3108
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -3074,7 +3112,7 @@ html.rt-theme-dark {
3074
3112
  --rt-field-messages-padding-top: 0px;
3075
3113
  --rt-field-error-color: var(--rt-color-state-danger);
3076
3114
  --rt-field-required-color: var(--rt-color-state-danger);
3077
- --rt-field-required-gap: var(--rt-space-1);
3115
+ --rt-field-required-gap: var(--rt-space-0-5);
3078
3116
  --rt-field-value-font-size: var(--rt-text-sm);
3079
3117
  --rt-field-value-color: var(--rt-color-text-primary);
3080
3118
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -3671,6 +3709,13 @@ html.rt-theme-dark .rt-preset-material {
3671
3709
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
3672
3710
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
3673
3711
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
3712
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
3713
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
3714
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
3715
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
3716
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
3717
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
3718
+ --rt-color-table-bg: var(--rt-color-bg-surface);
3674
3719
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
3675
3720
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
3676
3721
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -3877,6 +3922,7 @@ html.rt-theme-dark .rt-preset-material {
3877
3922
  --rt-field-gap: var(--rt-space-xs);
3878
3923
  --rt-field-label-font-size: var(--rt-text-sm);
3879
3924
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
3925
+ --rt-field-label-line-height: var(--rt-leading-none);
3880
3926
  --rt-field-label-color: var(--rt-color-text-muted);
3881
3927
  --rt-field-label-help-gap: var(--rt-space-xs);
3882
3928
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -3886,7 +3932,7 @@ html.rt-theme-dark .rt-preset-material {
3886
3932
  --rt-field-messages-padding-top: 0px;
3887
3933
  --rt-field-error-color: var(--rt-color-state-danger);
3888
3934
  --rt-field-required-color: var(--rt-color-state-danger);
3889
- --rt-field-required-gap: var(--rt-space-1);
3935
+ --rt-field-required-gap: var(--rt-space-0-5);
3890
3936
  --rt-field-value-font-size: var(--rt-text-sm);
3891
3937
  --rt-field-value-color: var(--rt-color-text-primary);
3892
3938
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -4397,6 +4443,8 @@ html.rt-theme-dark .rt-preset-material {
4397
4443
  /* Шапка таблицы — та же подложка роли, что в светлой: ответ стоит, чтобы тёмная тема
4398
4444
  выигрывала у материального набора и на этом имени. */
4399
4445
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
4446
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-64);
4447
+ --rt-color-table-bg: var(--rt-color-bg-page);
4400
4448
  --rt-color-field-fill-underline: var(--rt-color-border-strong);
4401
4449
  /* Навигация — вся шкала серых разворачивается: подложка уходит глубже
4402
4450
  поверхности, а приглушённые подписи становятся светлее фона, а не темнее.
@@ -4668,6 +4716,13 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
4668
4716
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
4669
4717
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
4670
4718
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
4719
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
4720
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
4721
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
4722
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
4723
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
4724
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
4725
+ --rt-color-table-bg: var(--rt-color-bg-surface);
4671
4726
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
4672
4727
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
4673
4728
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -4874,6 +4929,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
4874
4929
  --rt-field-gap: var(--rt-space-xs);
4875
4930
  --rt-field-label-font-size: var(--rt-text-sm);
4876
4931
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
4932
+ --rt-field-label-line-height: var(--rt-leading-none);
4877
4933
  --rt-field-label-color: var(--rt-color-text-muted);
4878
4934
  --rt-field-label-help-gap: var(--rt-space-xs);
4879
4935
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -4883,7 +4939,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
4883
4939
  --rt-field-messages-padding-top: 0px;
4884
4940
  --rt-field-error-color: var(--rt-color-state-danger);
4885
4941
  --rt-field-required-color: var(--rt-color-state-danger);
4886
- --rt-field-required-gap: var(--rt-space-1);
4942
+ --rt-field-required-gap: var(--rt-space-0-5);
4887
4943
  --rt-field-value-font-size: var(--rt-text-sm);
4888
4944
  --rt-field-value-color: var(--rt-color-text-primary);
4889
4945
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -5479,6 +5535,13 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
5479
5535
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
5480
5536
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
5481
5537
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
5538
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
5539
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
5540
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
5541
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
5542
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
5543
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
5544
+ --rt-color-table-bg: var(--rt-color-bg-surface);
5482
5545
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
5483
5546
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
5484
5547
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -5685,6 +5748,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
5685
5748
  --rt-field-gap: var(--rt-space-xs);
5686
5749
  --rt-field-label-font-size: var(--rt-text-sm);
5687
5750
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
5751
+ --rt-field-label-line-height: var(--rt-leading-none);
5688
5752
  --rt-field-label-color: var(--rt-color-text-muted);
5689
5753
  --rt-field-label-help-gap: var(--rt-space-xs);
5690
5754
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -5694,7 +5758,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
5694
5758
  --rt-field-messages-padding-top: 0px;
5695
5759
  --rt-field-error-color: var(--rt-color-state-danger);
5696
5760
  --rt-field-required-color: var(--rt-color-state-danger);
5697
- --rt-field-required-gap: var(--rt-space-1);
5761
+ --rt-field-required-gap: var(--rt-space-0-5);
5698
5762
  --rt-field-value-font-size: var(--rt-text-sm);
5699
5763
  --rt-field-value-color: var(--rt-color-text-primary);
5700
5764
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -6287,6 +6351,13 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
6287
6351
  серой у всех остальных частей кита. Тёмная тема отвечает на имя сама: без ответа она
6288
6352
  уступила бы его материальному набору, и тёмная шапка получила бы светлую заливку. */
6289
6353
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
6354
+ /* Table (rt-table) — тень у края закреплённой колонки, пока под ней есть прокрученное
6355
+ содержимое. На графите тень гуще: шестнадцать процентов чёрного на нём не видны. */
6356
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-16);
6357
+ /* Table (rt-table) — подложка таблицы, её шапки, пустого состояния и закреплённых ячеек.
6358
+ В тёмной теме таблица сливается с фоном контента, а не поднимается светлой плитой. Своё имя,
6359
+ а не правило темы в компоненте: светлый кусок внутри тёмной страницы отвечает на него сам. */
6360
+ --rt-color-table-bg: var(--rt-color-bg-surface);
6290
6361
  /* Залитое поле (вид fill у поля ввода, числа, даты и выбора) — черта снизу. Своё имя,
6291
6362
  а не рамка роли: в материальном наборе она берёт цвет черты поля Material, а рамка роли
6292
6363
  остаётся светлой у всех остальных частей кита. Тёмная тема отвечает на имя сама. */
@@ -6493,6 +6564,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
6493
6564
  --rt-field-gap: var(--rt-space-xs);
6494
6565
  --rt-field-label-font-size: var(--rt-text-sm);
6495
6566
  --rt-field-label-font-weight: var(--rt-font-weight-medium);
6567
+ --rt-field-label-line-height: var(--rt-leading-none);
6496
6568
  --rt-field-label-color: var(--rt-color-text-muted);
6497
6569
  --rt-field-label-help-gap: var(--rt-space-xs);
6498
6570
  --rt-field-hint-font-size: var(--rt-text-xs);
@@ -6502,7 +6574,7 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
6502
6574
  --rt-field-messages-padding-top: 0px;
6503
6575
  --rt-field-error-color: var(--rt-color-state-danger);
6504
6576
  --rt-field-required-color: var(--rt-color-state-danger);
6505
- --rt-field-required-gap: var(--rt-space-1);
6577
+ --rt-field-required-gap: var(--rt-space-0-5);
6506
6578
  --rt-field-value-font-size: var(--rt-text-sm);
6507
6579
  --rt-field-value-color: var(--rt-color-text-primary);
6508
6580
  --rt-field-value-empty-color: var(--rt-color-text-muted);
@@ -7013,6 +7085,8 @@ html.rt-theme-dark [data-theme=light] .rt-preset-material {
7013
7085
  /* Шапка таблицы — та же подложка роли, что в светлой: ответ стоит, чтобы тёмная тема
7014
7086
  выигрывала у материального набора и на этом имени. */
7015
7087
  --rt-color-table-head-bg: var(--rt-color-bg-surface-subtle);
7088
+ --rt-color-table-pinned-shadow: var(--rt-overlay-black-64);
7089
+ --rt-color-table-bg: var(--rt-color-bg-page);
7016
7090
  --rt-color-field-fill-underline: var(--rt-color-border-strong);
7017
7091
  /* Навигация — вся шкала серых разворачивается: подложка уходит глубже
7018
7092
  поверхности, а приглушённые подписи становятся светлее фона, а не темнее.
@@ -7638,6 +7712,15 @@ html.rt-theme-dark.rt-preset-material {
7638
7712
  .rt-form .rt-tabs__content {
7639
7713
  gap: var(--rt-space-xl);
7640
7714
  }
7715
+ /* Блок службы, стоящий прямо в форме, отбивается от следующего раздела шагом строк: на
7716
+ макете панели подключения поле под чертой блока стоит на 16 при любой ширине. Источник
7717
+ промежутка остаётся один, зазор формы, а блок снимает с него разницу между шагом разделов
7718
+ и шагом строк. Разница есть только шире порога панели: на узком экране зазор формы и так 16. */
7719
+ @media (width > 768px) {
7720
+ .rt-form > .rt-service-block {
7721
+ margin-bottom: calc(var(--rt-space-md) - var(--rt-space-xl));
7722
+ }
7723
+ }
7641
7724
  /* На узком экране панель занимает весь экран, и ритм разделов сжимается вдвое. Порог тот же,
7642
7725
  что у самой панели. Ритм строк не трогается: строки и на узком идут тем же шагом. */
7643
7726
  @media (width <= 768px) {
@@ -7665,7 +7748,9 @@ html.rt-theme-dark.rt-preset-material {
7665
7748
  --rt-btn-padding: 0 1.25rem;
7666
7749
  --rt-btn-gap: 0.5rem;
7667
7750
  --rt-btn-radius: var(--rt-radius-control);
7668
- --rt-btn-border-width: var(--rt-border-width-thin);
7751
+ /* Рамка есть только у кнопки в рамке, как в макете кнопок: у залитой и текстовой
7752
+ её нет, и подпись стоит на отступе от края, а не на отступе плюс рамка. */
7753
+ --rt-btn-border-width: 0px;
7669
7754
  --rt-btn-transition-duration: var(--rt-duration-fast);
7670
7755
  --rt-btn-focus-shadow: var(--rt-shadow-focus-ring);
7671
7756
  --rt-btn-font-size: 0.95rem;
@@ -7818,6 +7903,7 @@ html.rt-theme-dark.rt-preset-material {
7818
7903
  свойствами — на графите слабый оттенок не виден, и тёмная тема их поднимает. */
7819
7904
  }
7820
7905
  .rt-button--outlined {
7906
+ --rt-btn-border-width: var(--rt-border-width-thin);
7821
7907
  --rt-btn-bg: transparent;
7822
7908
  --rt-btn-bg-hover: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-hover), transparent);
7823
7909
  --rt-btn-bg-active: color-mix(in srgb, var(--rt-btn-color) var(--rt-btn-tint-active), transparent);