@rt-tools/ui-kit-v2 0.4.0 → 0.6.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 (108) hide show
  1. package/README.md +71 -0
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +395 -188
  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.6.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/CONTEXT.md +22 -0
  23. package/src/lib/components/container/rt-container.component.scss +91 -87
  24. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  25. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  26. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  27. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  28. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  29. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  30. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  31. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  32. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  33. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  34. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  35. package/src/lib/components/field/rt-field.component.scss +63 -61
  36. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  37. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  38. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  39. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  40. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  41. package/src/lib/components/header/rt-header.component.scss +61 -55
  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/rt-input.component.scss +102 -98
  47. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  48. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  49. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  50. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  51. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  52. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  53. package/src/lib/components/message/rt-message.component.scss +53 -49
  54. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  55. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  56. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  57. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  58. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  59. package/src/lib/components/note/rt-note.component.scss +15 -11
  60. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  61. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  62. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  63. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  64. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  65. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  66. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  67. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  68. package/src/lib/components/select/rt-select.component.scss +146 -138
  69. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  70. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  71. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  72. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  73. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  74. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  75. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
  76. package/src/lib/components/table/rt-table.component.scss +260 -252
  77. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  78. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  79. package/src/lib/components/table/sort-header/CONTEXT.md +40 -0
  80. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  81. package/src/lib/components/tabs/CONTEXT.md +5 -0
  82. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  83. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  84. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  85. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  86. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  87. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  88. package/src/lib/components/toast/CONTEXT.md +8 -0
  89. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  90. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  91. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  92. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  93. package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
  94. package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
  95. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  96. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  97. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  98. package/src/styles/_index.scss +4 -0
  99. package/src/styles/_layers.scss +22 -0
  100. package/src/styles/_login.scss +87 -85
  101. package/src/styles/_mixins.scss +1 -1
  102. package/src/styles/_primitives.scss +126 -67
  103. package/src/styles/_scrollbar.scss +21 -19
  104. package/src/styles/_semantic.scss +140 -56
  105. package/src/styles/_theme-dark.scss +60 -27
  106. package/styles/tokens.css +628 -408
  107. package/types/rt-tools-ui-kit-v2.d.ts +9 -16
  108. package/rt-tools-ui-kit-v2-0.4.0.tgz +0 -0
@@ -1,77 +1,89 @@
1
- /* rt-split-button — основной CTA + каретка с меню второстепенных действий.
2
- ViewEncapsulation.None: селекторы префиксованы `.rt-split-button`. Меню
3
- рендерится в CDK Overlay, поэтому `__menu` стилизуется глобально (вне host'а). */
1
+ @layer rt-kit.components {
2
+ /* rt-split-button — основной CTA + каретка с меню второстепенных действий.
3
+ ViewEncapsulation.None: селекторы префиксованы `.rt-split-button`. Меню
4
+ рендерится в CDK Overlay, поэтому `__menu` стилизуется глобально (вне host'а). */
4
5
 
5
- .rt-split-button {
6
- display: inline-flex;
6
+ .rt-split-button {
7
+ --rt-split-button-divider-width: var(--rt-border-width-thin);
8
+ --rt-split-button-caret-transition-duration: var(--rt-duration-fast);
7
9
 
8
- /* Контрол — origin popover'а (width="trigger" берёт его ширину) и flex-ряд
9
- лица + каретки. */
10
- &__control {
11
10
  display: inline-flex;
12
- width: 100%;
13
- align-items: stretch;
14
- }
15
11
 
16
- /* Лицо и каретка сшиты в один контрол: смежные углы выпрямлены,
17
- каретку отделяет тонкий делитель. */
18
- &__face.rt-button {
19
- border-end-end-radius: 0;
20
- border-start-end-radius: 0;
21
- }
12
+ /* Контрол — origin popover'а (width="trigger" берёт его ширину) и flex-ряд
13
+ лица + каретки. */
14
+ &__control {
15
+ display: inline-flex;
16
+ width: 100%;
17
+ align-items: stretch;
18
+ }
22
19
 
23
- &__toggle.rt-button {
24
- min-width: 0;
25
- border-end-start-radius: 0;
26
- border-inline-start: var(--rt-border-width-thin) solid color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
27
- border-start-start-radius: 0;
28
- padding-inline: var(--rt-space-sm);
20
+ /* Лицо и каретка сшиты в один контрол: смежные углы выпрямлены,
21
+ каретку отделяет тонкий делитель. */
22
+ &__face.rt-button {
23
+ border-end-end-radius: 0;
24
+ border-start-end-radius: 0;
25
+ }
29
26
 
30
- /* Шеврон наследует цвет текста кнопки: svg `.rt-button__icon` без
31
- `fill: currentColor` тянет дефолтный чёрный, не цвет лейбла. */
32
- .rt-button__icon {
33
- fill: currentcolor;
34
- transition: transform var(--rt-duration-fast) ease;
27
+ &__toggle.rt-button {
28
+ min-width: 0;
29
+ border-end-start-radius: 0;
30
+ border-inline-start: var(--rt-split-button-divider-width) solid
31
+ color-mix(in srgb, var(--rt-color-text-inverse) 24%, transparent);
32
+ border-start-start-radius: 0;
33
+ padding-inline: var(--rt-space-sm);
34
+
35
+ /* Шеврон наследует цвет текста кнопки: svg `.rt-button__icon` без
36
+ `fill: currentColor` тянет дефолтный чёрный, не цвет лейбла. */
37
+ .rt-button__icon {
38
+ fill: currentcolor;
39
+ transition: transform var(--rt-split-button-caret-transition-duration) ease;
40
+ }
35
41
  }
36
- }
37
42
 
38
- /* Открытое меню — шеврон смотрит вверх (как у select/multiselect). */
39
- &--open &__toggle.rt-button .rt-button__icon {
40
- transform: rotate(180deg);
41
- }
43
+ /* Открытое меню — шеврон смотрит вверх (как у select/multiselect). */
44
+ &--open &__toggle.rt-button .rt-button__icon {
45
+ transform: rotate(180deg);
46
+ }
42
47
 
43
- /* Меню (overlay). width="trigger" задаёт ширину панели = ширине контрола,
44
- поэтому меню тянется на 100% и box-sizing учитывает падинг. */
45
- &__menu {
46
- display: flex;
47
- width: 100%;
48
- box-sizing: border-box;
49
- flex-direction: column;
50
- padding: var(--rt-space-2xs);
51
- border: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
52
- border-radius: var(--rt-radius-md);
53
- margin: 0;
54
- background: var(--rt-color-bg-surface);
55
- box-shadow: var(--rt-shadow-lg);
56
- gap: var(--rt-space-2xs);
57
- list-style: none;
58
- }
48
+ /* Меню (overlay). width="trigger" задаёт ширину панели = ширине контрола,
49
+ поэтому меню тянется на 100% и box-sizing учитывает падинг. */
50
+ &__menu {
51
+ /* Меню рисуется в CDK Overlay, вне поддерева блока: свойства
52
+ объявляются на нём самом — с корня блока они бы не докатились. */
53
+ --rt-split-button-menu-radius: var(--rt-radius-md);
54
+ --rt-split-button-menu-border-width: var(--rt-border-width-thin);
55
+ --rt-split-button-menu-shadow: var(--rt-shadow-lg);
59
56
 
60
- /* Ширину пункту задаёт панель, а не его текст: `width="trigger"` держит её равной
61
- кнопке. Пункт длиннее обязан обрезаться, иначе лейбл вылезает за скруглённую
62
- рамку панели и висит в воздухе. Многоточие требует блочного лейбла: у
63
- `inline-flex` `text-overflow` не работает — текст внутри становится анонимным
64
- flex-элементом, и обрезка проходит без знака. */
65
- &__menu-item.rt-button {
66
- overflow: hidden;
67
- width: 100%;
68
- justify-content: flex-start;
57
+ display: flex;
58
+ width: 100%;
59
+ box-sizing: border-box;
60
+ flex-direction: column;
61
+ padding: var(--rt-space-2xs);
62
+ border: var(--rt-split-button-menu-border-width) solid var(--rt-color-border-subtle);
63
+ border-radius: var(--rt-split-button-menu-radius);
64
+ margin: 0;
65
+ background: var(--rt-color-bg-surface);
66
+ box-shadow: var(--rt-split-button-menu-shadow);
67
+ gap: var(--rt-space-2xs);
68
+ list-style: none;
69
+ }
69
70
 
70
- .rt-button__label {
71
- display: block;
71
+ /* Ширину пункту задаёт панель, а не его текст: `width="trigger"` держит её равной
72
+ кнопке. Пункт длиннее обязан обрезаться, иначе лейбл вылезает за скруглённую
73
+ рамку панели и висит в воздухе. Многоточие требует блочного лейбла: у
74
+ `inline-flex` `text-overflow` не работает — текст внутри становится анонимным
75
+ flex-элементом, и обрезка проходит без знака. */
76
+ &__menu-item.rt-button {
72
77
  overflow: hidden;
73
- min-width: 0;
74
- text-overflow: ellipsis;
78
+ width: 100%;
79
+ justify-content: flex-start;
80
+
81
+ .rt-button__label {
82
+ display: block;
83
+ overflow: hidden;
84
+ min-width: 0;
85
+ text-overflow: ellipsis;
86
+ }
75
87
  }
76
88
  }
77
89
  }
@@ -1,111 +1,115 @@
1
- /* rt-stat-tile — KPI-плитка в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stat-tile` висит
3
- и на `<rt-stat-tile>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона.
1
+ @layer rt-kit.components {
2
+ /* rt-stat-tile — KPI-плитка в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stat-tile` висит
4
+ и на `<rt-stat-tile>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона.
5
6
 
6
- Рамку и фон плитка не рисует: плитки стоят рядом внутри одной карточки, а
7
- разделители между ними — забота контейнера. */
7
+ Рамку и фон плитка не рисует: плитки стоят рядом внутри одной карточки, а
8
+ разделители между ними — забота контейнера. */
8
9
 
9
- rt-stat-tile {
10
- display: block;
10
+ rt-stat-tile {
11
+ display: block;
11
12
 
12
- .rt-stat-tile {
13
- display: flex;
14
- height: 100%;
15
- flex-direction: column;
16
- gap: var(--rt-space-2);
13
+ .rt-stat-tile {
14
+ --rt-stat-tile-year-radius: var(--rt-radius-sm);
17
15
 
18
- &__head {
19
16
  display: flex;
20
- align-items: center;
21
- gap: var(--rt-space-1);
22
- }
23
-
24
- &__label {
25
- color: var(--rt-color-text-primary);
26
- font-size: var(--rt-text-sm);
27
- font-weight: var(--rt-font-weight-semibold);
28
- }
29
-
30
- &__hint {
31
- color: var(--rt-color-text-muted);
32
- cursor: help;
33
- }
17
+ height: 100%;
18
+ flex-direction: column;
19
+ gap: var(--rt-space-2);
20
+
21
+ &__head {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: var(--rt-space-1);
25
+ }
34
26
 
35
- &__value-row {
36
- display: flex;
37
- flex-wrap: wrap;
38
- align-items: center;
39
- gap: var(--rt-space-3);
40
- }
27
+ &__label {
28
+ color: var(--rt-color-text-primary);
29
+ font-size: var(--rt-text-sm);
30
+ font-weight: var(--rt-font-weight-semibold);
31
+ }
41
32
 
42
- &__value {
43
- margin: 0;
44
- color: var(--rt-color-text-primary);
45
- font-size: var(--rt-text-3xl);
46
- font-weight: var(--rt-font-weight-bold);
47
- line-height: var(--rt-leading-none);
48
- }
33
+ &__hint {
34
+ color: var(--rt-color-text-muted);
35
+ cursor: help;
36
+ }
49
37
 
50
- &__delta {
51
- display: inline-flex;
52
- align-items: center;
53
- color: var(--rt-color-text-muted);
54
- font-size: var(--rt-text-md);
55
- font-weight: var(--rt-font-weight-bold);
56
- gap: var(--rt-space-1);
57
- line-height: var(--rt-leading-none);
58
-
59
- &--direction--up {
60
- color: var(--rt-color-state-success);
38
+ &__value-row {
39
+ display: flex;
40
+ flex-wrap: wrap;
41
+ align-items: center;
42
+ gap: var(--rt-space-4);
61
43
  }
62
44
 
63
- &--direction--down {
64
- color: var(--rt-color-state-danger);
45
+ &__value {
46
+ margin: 0;
47
+ color: var(--rt-color-text-primary);
48
+ font-size: var(--rt-text-3xl);
49
+ font-weight: var(--rt-font-weight-bold);
50
+ line-height: var(--rt-leading-none);
65
51
  }
66
- }
67
52
 
68
- &__year {
69
- flex: 0 0 auto;
70
- padding: var(--rt-space-0-5) var(--rt-space-1-5);
71
- border-radius: var(--rt-radius-sm);
72
- background: var(--rt-color-bg-surface-subtle);
73
- color: var(--rt-color-text-muted);
74
- font-size: var(--rt-text-xs);
75
- font-weight: var(--rt-font-weight-semibold);
76
- line-height: var(--rt-leading-none);
77
- white-space: nowrap;
78
-
79
- &--direction--up {
80
- background: var(--rt-color-state-success-bg);
81
- color: var(--rt-color-state-success);
53
+ &__delta {
54
+ display: inline-flex;
55
+ align-items: center;
56
+ color: var(--rt-color-text-muted);
57
+ font-size: var(--rt-text-md);
58
+ font-weight: var(--rt-font-weight-bold);
59
+ gap: var(--rt-space-1);
60
+ line-height: var(--rt-leading-none);
61
+
62
+ &--direction--up {
63
+ color: var(--rt-color-state-success);
64
+ }
65
+
66
+ &--direction--down {
67
+ color: var(--rt-color-state-danger);
68
+ }
82
69
  }
83
70
 
84
- &--direction--down {
85
- background: var(--rt-color-state-danger-bg);
86
- color: var(--rt-color-state-danger);
71
+ &__year {
72
+ flex: 0 0 auto;
73
+ padding: var(--rt-space-0-5) var(--rt-space-2);
74
+ border-radius: var(--rt-stat-tile-year-radius);
75
+ background: var(--rt-color-bg-surface-subtle);
76
+ color: var(--rt-color-text-muted);
77
+ font-size: var(--rt-text-xs);
78
+ font-weight: var(--rt-font-weight-semibold);
79
+ line-height: var(--rt-leading-none);
80
+ white-space: nowrap;
81
+
82
+ &--direction--up {
83
+ background: var(--rt-color-state-success-bg);
84
+ color: var(--rt-color-state-success);
85
+ }
86
+
87
+ &--direction--down {
88
+ background: var(--rt-color-state-danger-bg);
89
+ color: var(--rt-color-state-danger);
90
+ }
87
91
  }
88
- }
89
92
 
90
- &__baseline {
91
- overflow: hidden;
92
- margin: 0;
93
- color: var(--rt-color-text-muted);
94
- font-size: var(--rt-text-sm);
95
- text-overflow: ellipsis;
96
- white-space: nowrap;
97
- }
93
+ &__baseline {
94
+ overflow: hidden;
95
+ margin: 0;
96
+ color: var(--rt-color-text-muted);
97
+ font-size: var(--rt-text-sm);
98
+ text-overflow: ellipsis;
99
+ white-space: nowrap;
100
+ }
98
101
 
99
- /* Вторичная метрика прижата к низу: строки «было …» может не быть,
100
- и без прижатия плитки в ряду разъезжались бы по базовой линии. */
101
- &__secondary {
102
- overflow: hidden;
103
- margin: 0;
104
- margin-top: auto;
105
- color: var(--rt-color-text-muted);
106
- font-size: var(--rt-text-xs);
107
- text-overflow: ellipsis;
108
- white-space: nowrap;
102
+ /* Вторичная метрика прижата к низу: строки «было …» может не быть,
103
+ и без прижатия плитки в ряду разъезжались бы по базовой линии. */
104
+ &__secondary {
105
+ overflow: hidden;
106
+ margin: 0;
107
+ margin-top: auto;
108
+ color: var(--rt-color-text-muted);
109
+ font-size: var(--rt-text-xs);
110
+ text-overflow: ellipsis;
111
+ white-space: nowrap;
112
+ }
109
113
  }
110
114
  }
111
115
  }
@@ -1,119 +1,125 @@
1
- /* rt-stepper — линейный прогресс-степпер в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stepper` висит
3
- и на `<rt-stepper>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона. */
5
-
6
- rt-stepper {
7
- display: block;
8
-
9
- .rt-stepper {
10
- display: flex;
11
- flex-direction: column;
12
- gap: var(--rt-space-3);
13
-
14
- &__rail {
15
- position: relative;
16
- block-size: 39px;
17
- }
18
-
19
- &__label {
20
- position: absolute;
21
- margin: 0;
22
- color: var(--rt-color-stepper-current);
23
- font-size: var(--rt-text-xs);
24
- font-weight: var(--rt-font-weight-regular);
25
- inset-block-start: 0;
26
- letter-spacing: var(--rt-letter-spacing-wide);
27
- line-height: var(--rt-leading-none);
28
- transition: left var(--rt-duration-fast) ease-out;
29
- white-space: nowrap;
30
-
31
- /* Подпись висит над активной точкой (`left` задаётся инлайном):
32
- на крайних шагах прижимаем к краю точки, иначе центрируем. */
33
- &--anchor--start {
34
- transform: translateX(0);
35
- }
1
+ @layer rt-kit.components {
2
+ /* rt-stepper — линейный прогресс-степпер в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stepper` висит
4
+ и на `<rt-stepper>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона. */
36
6
 
37
- &--anchor--center {
38
- transform: translateX(-50%);
39
- }
7
+ rt-stepper {
8
+ display: block;
40
9
 
41
- &--anchor--end {
42
- transform: translateX(-100%);
43
- }
44
- }
10
+ .rt-stepper {
11
+ --rt-stepper-radius: var(--rt-radius-full);
12
+ --rt-stepper-point-shadow: var(--rt-shadow-step-indicator);
13
+ --rt-stepper-transition-duration: var(--rt-duration-fast);
45
14
 
46
- &__track-band {
47
- position: absolute;
48
15
  display: flex;
49
- align-items: center;
50
- block-size: 16px;
51
- inset-block-end: 0;
52
- inset-inline: 0;
53
- }
16
+ flex-direction: column;
17
+ gap: var(--rt-space-4);
54
18
 
55
- &__track,
56
- &__progress {
57
- position: absolute;
58
- border-radius: var(--rt-radius-full);
59
- block-size: 2px;
60
- inset-block-start: 50%;
61
- inset-inline-start: 0;
62
- transform: translateY(-50%);
63
- }
19
+ &__rail {
20
+ position: relative;
21
+ block-size: 39px;
22
+ }
64
23
 
65
- &__track {
66
- background: var(--rt-color-stepper-track);
67
- inset-inline-end: 0;
68
- }
24
+ &__label {
25
+ position: absolute;
26
+ margin: 0;
27
+ color: var(--rt-color-stepper-current);
28
+ font-size: var(--rt-text-xs);
29
+ font-weight: var(--rt-font-weight-regular);
30
+ inset-block-start: 0;
31
+ letter-spacing: var(--rt-letter-spacing-wide);
32
+ line-height: var(--rt-leading-none);
33
+ transition: left var(--rt-stepper-transition-duration) ease-out;
34
+ white-space: nowrap;
35
+
36
+ /* Подпись висит над активной точкой (`left` задаётся инлайном):
37
+ на крайних шагах прижимаем к краю точки, иначе центрируем. */
38
+ &--anchor--start {
39
+ transform: translateX(0);
40
+ }
41
+
42
+ &--anchor--center {
43
+ transform: translateX(-50%);
44
+ }
45
+
46
+ &--anchor--end {
47
+ transform: translateX(-100%);
48
+ }
49
+ }
69
50
 
70
- &__progress {
71
- background: var(--rt-color-stepper-progress);
72
- transition: width var(--rt-duration-fast) ease-out;
73
- }
51
+ &__track-band {
52
+ position: absolute;
53
+ display: flex;
54
+ align-items: center;
55
+ block-size: 16px;
56
+ inset-block-end: 0;
57
+ inset-inline: 0;
58
+ }
74
59
 
75
- &__points {
76
- position: relative;
77
- display: flex;
78
- align-items: center;
79
- justify-content: space-between;
80
- padding: 0;
81
- margin: 0;
82
- inline-size: 100%;
83
- list-style: none;
84
- }
60
+ &__track,
61
+ &__progress {
62
+ position: absolute;
63
+ border-radius: var(--rt-stepper-radius);
64
+ block-size: 2px;
65
+ inset-block-start: 50%;
66
+ inset-inline-start: 0;
67
+ transform: translateY(-50%);
68
+ }
85
69
 
86
- &__point {
87
- border-radius: var(--rt-radius-full);
88
- background: var(--rt-color-stepper-track);
89
- block-size: 8px;
90
- inline-size: 8px;
91
- transition:
92
- inline-size var(--rt-duration-fast) ease-out,
93
- block-size var(--rt-duration-fast) ease-out,
94
- background var(--rt-duration-fast) ease-out;
95
-
96
- &--complete {
70
+ &__track {
71
+ background: var(--rt-color-stepper-track);
72
+ inset-inline-end: 0;
73
+ }
74
+
75
+ &__progress {
97
76
  background: var(--rt-color-stepper-progress);
77
+ transition: width var(--rt-stepper-transition-duration) ease-out;
98
78
  }
99
79
 
100
- &--current {
101
- background: var(--rt-color-stepper-current);
102
- block-size: 16px;
103
- box-shadow: var(--rt-shadow-step-indicator);
104
- inline-size: 16px;
80
+ &__points {
81
+ position: relative;
82
+ display: flex;
83
+ align-items: center;
84
+ justify-content: space-between;
85
+ padding: 0;
86
+ margin: 0;
87
+ inline-size: 100%;
88
+ list-style: none;
89
+ }
90
+
91
+ &__point {
92
+ border-radius: var(--rt-stepper-radius);
93
+ background: var(--rt-color-stepper-track);
94
+ block-size: 8px;
95
+ inline-size: 8px;
96
+ transition:
97
+ inline-size var(--rt-stepper-transition-duration) ease-out,
98
+ block-size var(--rt-stepper-transition-duration) ease-out,
99
+ background var(--rt-stepper-transition-duration) ease-out;
100
+
101
+ &--complete {
102
+ background: var(--rt-color-stepper-progress);
103
+ }
104
+
105
+ &--current {
106
+ background: var(--rt-color-stepper-current);
107
+ block-size: 16px;
108
+ box-shadow: var(--rt-stepper-point-shadow);
109
+ inline-size: 16px;
110
+ }
105
111
  }
106
- }
107
112
 
108
- &__description {
109
- margin: 0;
110
- color: var(--rt-color-text-primary);
111
- font-size: var(--rt-text-xs);
112
- letter-spacing: var(--rt-letter-spacing-wide);
113
- line-height: var(--rt-leading-snug);
113
+ &__description {
114
+ margin: 0;
115
+ color: var(--rt-color-text-primary);
116
+ font-size: var(--rt-text-xs);
117
+ letter-spacing: var(--rt-letter-spacing-wide);
118
+ line-height: var(--rt-leading-snug);
114
119
 
115
- & + & {
116
- margin-block-start: var(--rt-space-2-5);
120
+ & + & {
121
+ margin-block-start: var(--rt-space-2);
122
+ }
117
123
  }
118
124
  }
119
125
  }