@rt-tools/ui-kit-v2 0.5.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 (103) hide show
  1. package/README.md +71 -0
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +166 -166
  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/rt-container.component.scss +91 -87
  23. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  24. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  26. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  27. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  28. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  29. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  30. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  31. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  32. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  33. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  34. package/src/lib/components/field/rt-field.component.scss +63 -61
  35. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  36. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  37. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  38. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  39. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  40. package/src/lib/components/header/rt-header.component.scss +61 -55
  41. package/src/lib/components/icon/rt-icon.component.scss +14 -12
  42. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  43. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  44. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  45. package/src/lib/components/input/rt-input.component.scss +102 -98
  46. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  47. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  48. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  49. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  50. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  51. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  52. package/src/lib/components/message/rt-message.component.scss +53 -49
  53. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  54. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  55. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  56. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  57. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  58. package/src/lib/components/note/rt-note.component.scss +15 -11
  59. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  60. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  61. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  62. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  63. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  64. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  65. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  66. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  67. package/src/lib/components/select/rt-select.component.scss +146 -138
  68. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  69. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  70. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  71. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  72. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  73. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  74. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
  75. package/src/lib/components/table/rt-table.component.scss +260 -252
  76. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  77. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  78. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  79. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  80. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  81. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  82. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  83. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  84. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  85. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  86. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  87. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  88. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  89. package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
  90. package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
  91. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  92. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  93. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  94. package/src/styles/_index.scss +4 -0
  95. package/src/styles/_layers.scss +22 -0
  96. package/src/styles/_login.scss +87 -85
  97. package/src/styles/_mixins.scss +1 -1
  98. package/src/styles/_primitives.scss +126 -67
  99. package/src/styles/_scrollbar.scss +21 -19
  100. package/src/styles/_semantic.scss +140 -56
  101. package/src/styles/_theme-dark.scss +60 -27
  102. package/styles/tokens.css +628 -408
  103. package/rt-tools-ui-kit-v2-0.5.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
  }