@rt-tools/ui-kit-v2 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/README.md +87 -7
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +1929 -994
  3. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  4. package/package.json +1 -1
  5. package/rt-tools-ui-kit-v2-0.7.0.tgz +0 -0
  6. package/src/lib/components/aside/_rt-aside-overlay.scss +73 -71
  7. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +20 -16
  8. package/src/lib/components/aside/header/rt-aside-header.component.scss +72 -70
  9. package/src/lib/components/aside/rt-aside.component.scss +107 -105
  10. package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +33 -31
  11. package/src/lib/components/aside-section/rt-aside-section.component.scss +27 -23
  12. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +124 -118
  13. package/src/lib/components/bar-list/rt-bar-list.component.scss +85 -81
  14. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +64 -57
  15. package/src/lib/components/button/rt-button.directive.scss +319 -280
  16. package/src/lib/components/calendar/rt-calendar.component.scss +106 -102
  17. package/src/lib/components/card/rt-card.component.scss +53 -45
  18. package/src/lib/components/chat/rt-chat.component.scss +312 -306
  19. package/src/lib/components/checkbox/rt-checkbox.component.scss +61 -54
  20. package/src/lib/components/collapsible-text/rt-collapsible-text.component.scss +36 -34
  21. package/src/lib/components/confirm-popover/rt-confirm-popover.component.scss +36 -30
  22. package/src/lib/components/container/rt-container.component.scss +91 -87
  23. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  24. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  26. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  27. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  28. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  29. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  30. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  31. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  32. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  33. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  34. package/src/lib/components/field/rt-field.component.scss +63 -61
  35. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  36. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  37. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  38. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  39. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  40. package/src/lib/components/header/rt-header.component.scss +61 -55
  41. package/src/lib/components/icon/CONTEXT.md +16 -10
  42. package/src/lib/components/icon/rt-icon.component.scss +14 -12
  43. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  44. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  45. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  46. package/src/lib/components/input/CONTEXT.md +9 -7
  47. package/src/lib/components/input/rt-input.component.scss +102 -98
  48. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  49. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  50. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  51. package/src/lib/components/markdown-text/CONTEXT.md +40 -0
  52. package/src/lib/components/markdown-text/rt-markdown-text.component.scss +130 -0
  53. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  54. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  55. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  56. package/src/lib/components/message/rt-message.component.scss +53 -49
  57. package/src/lib/components/message-composer/CONTEXT.md +1 -1
  58. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  59. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  60. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  61. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  62. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  63. package/src/lib/components/note/rt-note.component.scss +15 -11
  64. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  65. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  66. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  67. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  68. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  69. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  70. package/src/lib/components/rich-editor/CONTEXT.md +1 -1
  71. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  72. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  73. package/src/lib/components/select/rt-select.component.scss +146 -138
  74. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  75. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  76. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  77. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  78. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  79. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  80. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +39 -30
  81. package/src/lib/components/table/rt-table.component.scss +260 -252
  82. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  83. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  84. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  85. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  86. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  87. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  88. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  89. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  90. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  91. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  92. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  93. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  94. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  95. package/src/lib/components/toolbar/rt-toolbar.component.scss +63 -54
  96. package/src/lib/components/tooltip/rt-tooltip.component.scss +24 -15
  97. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  98. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  99. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  100. package/src/styles/_index.scss +11 -0
  101. package/src/styles/_layers.scss +22 -0
  102. package/src/styles/_login.scss +87 -85
  103. package/src/styles/_mixins.scss +1 -1
  104. package/src/styles/_primitives.scss +138 -66
  105. package/src/styles/_scrollbar.scss +21 -19
  106. package/src/styles/_semantic.scss +155 -62
  107. package/src/styles/_theme-dark-rules.scss +23 -0
  108. package/src/styles/_theme-dark.scss +61 -42
  109. package/styles/tokens.css +754 -418
  110. package/types/rt-tools-ui-kit-v2.d.ts +292 -103
  111. package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
@@ -1,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
  }