@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,143 +1,150 @@
1
- /* rt-toggle-button-group — segmented control. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс
3
- `.rt-toggle-button-group` висит и на `<rt-toggle-button-group>`, и на корне
4
- шаблона, поэтому правила блока вложены в хост — так они достаются только
5
- корню шаблона.
6
- Размеры — три тира sm/md/lg, общая высота совпадает с rt-button
7
- (sm 30 / md 40 / lg 50px).
8
- Цвета — только семантические --rt-* токены. */
9
-
10
- rt-toggle-button-group {
11
- display: inline-flex;
12
-
13
- /* Локальные overridable custom properties — позволяют потребителю
14
- подстроить trackовый bg без перекраски всей темы (см. dark override ниже). */
15
- // --rt-toggle-button-group-track-bg: var(--rt-color-bg-surface-subtle-2);
16
- --rt-toggle-button-group-track-bg: #eef0f4;
17
- --rt-toggle-button-group-active-bg: var(--rt-color-bg-surface);
18
-
19
- .rt-toggle-button-group {
20
- /* Default size = sm. md/lg переопределяют ниже. */
21
- --rt-toggle-button-group-height: 30px;
22
- --rt-toggle-button-group-track-padding: 4px;
23
- --rt-toggle-button-group-track-radius: 8px;
24
- --rt-toggle-button-group-btn-padding: 0 8px;
25
- --rt-toggle-button-group-btn-radius: 8px;
26
- --rt-toggle-button-group-btn-gap: 4px;
27
- --rt-toggle-button-group-btn-font-size: 12px;
28
- --rt-toggle-button-group-btn-line-height: 14px;
29
-
1
+ @layer rt-kit.components {
2
+ /* rt-toggle-button-group — segmented control. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс
4
+ `.rt-toggle-button-group` висит и на `<rt-toggle-button-group>`, и на корне
5
+ шаблона, поэтому правила блока вложены в хост — так они достаются только
6
+ корню шаблона.
7
+ Размеры — три тира sm/md/lg, общая высота совпадает с rt-button
8
+ (sm 30 / md 40 / lg 50px).
9
+ Цвета — только семантические --rt-* токены. */
10
+
11
+ rt-toggle-button-group {
30
12
  display: inline-flex;
31
- height: var(--rt-toggle-button-group-height);
32
- box-sizing: border-box;
33
- align-items: stretch;
34
- padding: var(--rt-toggle-button-group-track-padding);
35
- border-radius: var(--rt-toggle-button-group-track-radius);
36
- background-color: var(--rt-toggle-button-group-track-bg);
37
- gap: 0;
38
-
39
- &__button {
13
+
14
+ /* Локальные overridable custom properties — позволяют потребителю
15
+ подстроить trackовый bg без перекраски всей темы (см. dark override ниже).
16
+
17
+ Дорожка берёт приглушённую поверхность, а не ближайшую по светлоте ступень:
18
+ прежний код цвета стоял почти на уровне белого, а отличаться дорожка обязана
19
+ именно от активного сегмента, который белым и покрашен. */
20
+ --rt-toggle-button-group-track-bg: var(--rt-color-bg-surface-subtle);
21
+ --rt-toggle-button-group-active-bg: var(--rt-color-bg-surface);
22
+
23
+ .rt-toggle-button-group {
24
+ /* Default size = sm. md/lg переопределяют ниже. */
25
+ --rt-toggle-button-group-height: 30px;
26
+ --rt-toggle-button-group-transition-duration: var(--rt-duration-fast);
27
+ --rt-toggle-button-group-focus-shadow: var(--rt-shadow-focus-ring);
28
+ --rt-toggle-button-group-track-padding: 4px;
29
+ --rt-toggle-button-group-track-radius: 8px;
30
+ --rt-toggle-button-group-btn-padding: 0 8px;
31
+ --rt-toggle-button-group-btn-radius: 8px;
32
+ --rt-toggle-button-group-btn-gap: 4px;
33
+ --rt-toggle-button-group-btn-font-size: 12px;
34
+ --rt-toggle-button-group-btn-line-height: 14px;
35
+
40
36
  display: inline-flex;
41
- align-items: center;
42
- justify-content: center;
43
- padding: var(--rt-toggle-button-group-btn-padding);
44
- border: 0;
45
- border-radius: var(--rt-toggle-button-group-btn-radius);
46
- background-color: transparent;
47
- color: var(--rt-color-text-muted);
48
- cursor: pointer;
49
-
50
- /* Нативный <button>: без явного наследования берёт UA-шрифт (Arial),
51
- а не Montserrat от body. */
52
- font-family: inherit;
53
- font-size: var(--rt-toggle-button-group-btn-font-size);
54
- font-weight: var(--rt-font-weight-semibold);
55
- gap: var(--rt-toggle-button-group-btn-gap);
56
- line-height: var(--rt-toggle-button-group-btn-line-height);
57
- transition:
58
- background-color var(--rt-duration-fast) ease,
59
- color var(--rt-duration-fast) ease;
60
-
61
- &:hover:not(:disabled, &--active) {
62
- color: var(--rt-color-text-primary);
37
+ height: var(--rt-toggle-button-group-height);
38
+ box-sizing: border-box;
39
+ align-items: stretch;
40
+ padding: var(--rt-toggle-button-group-track-padding);
41
+ border-radius: var(--rt-toggle-button-group-track-radius);
42
+ background-color: var(--rt-toggle-button-group-track-bg);
43
+ gap: 0;
44
+
45
+ &__button {
46
+ display: inline-flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ padding: var(--rt-toggle-button-group-btn-padding);
50
+ border: 0;
51
+ border-radius: var(--rt-toggle-button-group-btn-radius);
52
+ background-color: transparent;
53
+ color: var(--rt-color-text-muted);
54
+ cursor: pointer;
55
+
56
+ /* Нативный <button>: без явного наследования берёт UA-шрифт (Arial),
57
+ а не Montserrat от body. */
58
+ font-family: inherit;
59
+ font-size: var(--rt-toggle-button-group-btn-font-size);
60
+ font-weight: var(--rt-font-weight-semibold);
61
+ gap: var(--rt-toggle-button-group-btn-gap);
62
+ line-height: var(--rt-toggle-button-group-btn-line-height);
63
+ transition:
64
+ background-color var(--rt-toggle-button-group-transition-duration) ease,
65
+ color var(--rt-toggle-button-group-transition-duration) ease;
66
+
67
+ &:hover:not(:disabled, &--active) {
68
+ color: var(--rt-color-text-primary);
69
+ }
70
+
71
+ &--active {
72
+ background-color: var(--rt-toggle-button-group-active-bg);
73
+ color: var(--rt-color-text-primary);
74
+ }
75
+
76
+ &:focus-visible {
77
+ position: relative;
78
+ z-index: 1;
79
+ box-shadow: var(--rt-toggle-button-group-focus-shadow);
80
+ outline: 2px solid transparent;
81
+ outline-offset: 1px;
82
+ }
83
+
84
+ &:disabled {
85
+ cursor: not-allowed;
86
+ }
63
87
  }
64
88
 
65
- &--active {
66
- background-color: var(--rt-toggle-button-group-active-bg);
67
- color: var(--rt-color-text-primary);
89
+ &__label {
90
+ display: inline-block;
91
+ white-space: nowrap;
68
92
  }
69
93
 
70
- &:focus-visible {
71
- position: relative;
72
- z-index: 1;
73
- box-shadow: var(--rt-shadow-focus-ring);
74
- outline: 2px solid transparent;
75
- outline-offset: 1px;
94
+ &__icon {
95
+ flex-shrink: 0;
76
96
  }
77
97
 
78
- &:disabled {
79
- cursor: not-allowed;
98
+ /* Размерные тиры — общая высота совпадает с rt-button (sm/md/lg). */
99
+ &--md {
100
+ --rt-toggle-button-group-height: 40px;
101
+ --rt-toggle-button-group-track-radius: 10px;
102
+ --rt-toggle-button-group-btn-padding: 0 14px;
103
+ --rt-toggle-button-group-btn-radius: 10px;
104
+ --rt-toggle-button-group-btn-gap: 6px;
105
+ --rt-toggle-button-group-btn-font-size: 14px;
106
+ --rt-toggle-button-group-btn-line-height: 16px;
80
107
  }
81
- }
82
-
83
- &__label {
84
- display: inline-block;
85
- white-space: nowrap;
86
- }
87
-
88
- &__icon {
89
- flex-shrink: 0;
90
- }
91
-
92
- /* Размерные тиры — общая высота совпадает с rt-button (sm/md/lg). */
93
- &--md {
94
- --rt-toggle-button-group-height: 40px;
95
- --rt-toggle-button-group-track-radius: 10px;
96
- --rt-toggle-button-group-btn-padding: 0 14px;
97
- --rt-toggle-button-group-btn-radius: 10px;
98
- --rt-toggle-button-group-btn-gap: 6px;
99
- --rt-toggle-button-group-btn-font-size: 14px;
100
- --rt-toggle-button-group-btn-line-height: 16px;
101
- }
102
108
 
103
- &--lg {
104
- --rt-toggle-button-group-height: 50px;
105
- --rt-toggle-button-group-track-radius: 12px;
106
- --rt-toggle-button-group-btn-padding: 0 20px;
107
- --rt-toggle-button-group-btn-radius: 12px;
108
- --rt-toggle-button-group-btn-gap: 8px;
109
- --rt-toggle-button-group-btn-font-size: 16px;
110
- --rt-toggle-button-group-btn-line-height: 18px;
111
- }
109
+ &--lg {
110
+ --rt-toggle-button-group-height: 50px;
111
+ --rt-toggle-button-group-track-radius: 12px;
112
+ --rt-toggle-button-group-btn-padding: 0 20px;
113
+ --rt-toggle-button-group-btn-radius: 12px;
114
+ --rt-toggle-button-group-btn-gap: 8px;
115
+ --rt-toggle-button-group-btn-font-size: 16px;
116
+ --rt-toggle-button-group-btn-line-height: 18px;
117
+ }
112
118
 
113
- &--disabled {
114
- opacity: 0.5;
119
+ &--disabled {
120
+ opacity: 0.5;
121
+ }
115
122
  }
116
123
  }
117
- }
118
-
119
- /* full-width: группа растягивается на контейнер, опции делят ширину поровну. */
120
- rt-toggle-button-group.rt-toggle-button-group--full-width {
121
- display: flex;
122
- width: 100%;
123
124
 
124
- .rt-toggle-button-group {
125
+ /* full-width: группа растягивается на контейнер, опции делят ширину поровну. */
126
+ rt-toggle-button-group.rt-toggle-button-group--full-width {
125
127
  display: flex;
126
128
  width: 100%;
127
- flex: 1 1 auto;
128
129
 
129
- .rt-toggle-button-group__button {
130
- flex: 1 1 0;
130
+ .rt-toggle-button-group {
131
+ display: flex;
132
+ width: 100%;
133
+ flex: 1 1 auto;
134
+
135
+ .rt-toggle-button-group__button {
136
+ flex: 1 1 0;
137
+ }
131
138
  }
132
139
  }
133
- }
134
140
 
135
- /* Dark theme: `--rt-color-bg-surface-subtle` совпадает с `--rt-color-bg-surface`
136
- в палитре (см. styles/_theme-dark.scss), поэтому track теряет контраст с
137
- активным сегментом. Локально перекрашиваем track в более тёмный neutral.
138
- Раньше правило было записано через `:host-context`, который под None не
139
- совпадает ни с чем: тему задаёт предок, им же и адресуемся. */
140
- :root[data-theme='dark'] rt-toggle-button-group,
141
- html.rt-theme-dark rt-toggle-button-group {
142
- --rt-toggle-button-group-track-bg: var(--rt-neutral-900);
141
+ /* Dark theme: `--rt-color-bg-surface-subtle` совпадает с `--rt-color-bg-surface`
142
+ в палитре (см. styles/_theme-dark.scss), поэтому track теряет контраст с
143
+ активным сегментом. Локально перекрашиваем track в более тёмный neutral.
144
+ Раньше правило было записано через `:host-context`, который под None не
145
+ совпадает ни с чем: тему задаёт предок, им же и адресуемся. */
146
+ :root[data-theme='dark'] rt-toggle-button-group,
147
+ html.rt-theme-dark rt-toggle-button-group {
148
+ --rt-toggle-button-group-track-bg: var(--rt-neutral-900);
149
+ }
143
150
  }
@@ -1,107 +1,113 @@
1
- /* rt-toggle-switch — переключатель в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-toggle-switch` висит
3
- и на `<rt-toggle-switch>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона. */
1
+ @layer rt-kit.components {
2
+ /* rt-toggle-switch — переключатель в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-toggle-switch` висит
4
+ и на `<rt-toggle-switch>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона. */
5
6
 
6
- rt-toggle-switch {
7
- display: inline-flex;
8
- }
7
+ rt-toggle-switch {
8
+ display: inline-flex;
9
+ }
9
10
 
10
- rt-toggle-switch .rt-toggle-switch {
11
- /* Геометрия размера. База — `sm`; модификаторы перекрывают только числа,
12
- правила ниже к размерам не привязаны. `thumb-travel` держим явным
13
- числом, а не calc из ширины: каждое значение сверяется с макетом. */
14
- --rt-toggle-track-width: 42px;
15
- --rt-toggle-track-height: 24px;
16
- --rt-toggle-thumb-size: 18px;
17
- --rt-toggle-thumb-inset: 3px;
18
- --rt-toggle-thumb-travel: 18px;
19
- --rt-toggle-icon-inset: 4px;
11
+ rt-toggle-switch .rt-toggle-switch {
12
+ --rt-toggle-radius: var(--rt-radius-full);
13
+ --rt-toggle-focus-shadow: var(--rt-shadow-focus-ring);
14
+ --rt-toggle-transition-duration: var(--rt-duration-fast);
20
15
 
21
- display: inline-flex;
22
- padding: 0;
23
- border: none;
24
- background: none;
25
- cursor: pointer;
16
+ /* Геометрия размера. База — `sm`; модификаторы перекрывают только числа,
17
+ правила ниже к размерам не привязаны. `thumb-travel` держим явным
18
+ числом, а не calc из ширины: каждое значение сверяется с макетом. */
19
+ --rt-toggle-track-width: 42px;
20
+ --rt-toggle-track-height: 24px;
21
+ --rt-toggle-thumb-size: 18px;
22
+ --rt-toggle-thumb-inset: 3px;
23
+ --rt-toggle-thumb-travel: 18px;
24
+ --rt-toggle-icon-inset: 4px;
26
25
 
27
- &--md {
28
- --rt-toggle-track-width: 52px;
29
- --rt-toggle-thumb-travel: 28px;
30
- }
26
+ display: inline-flex;
27
+ padding: 0;
28
+ border: none;
29
+ background: none;
30
+ cursor: pointer;
31
31
 
32
- &--lg {
33
- --rt-toggle-track-width: 60px;
34
- --rt-toggle-track-height: 30px;
35
- --rt-toggle-thumb-size: 24px;
36
- --rt-toggle-thumb-travel: 30px;
37
- --rt-toggle-icon-inset: 6px;
38
- }
32
+ &--md {
33
+ --rt-toggle-track-width: 52px;
34
+ --rt-toggle-thumb-travel: 28px;
35
+ }
39
36
 
40
- &:focus-visible {
41
- border-radius: var(--rt-radius-full);
42
- box-shadow: var(--rt-shadow-focus-ring);
43
- outline: 2px solid transparent;
44
- outline-offset: 2px;
45
- }
37
+ &--lg {
38
+ --rt-toggle-track-width: 60px;
39
+ --rt-toggle-track-height: 30px;
40
+ --rt-toggle-thumb-size: 24px;
41
+ --rt-toggle-thumb-travel: 30px;
42
+ --rt-toggle-icon-inset: 6px;
43
+ }
46
44
 
47
- &--disabled {
48
- cursor: not-allowed;
49
- opacity: 0.5;
50
- }
45
+ &:focus-visible {
46
+ border-radius: var(--rt-toggle-radius);
47
+ box-shadow: var(--rt-toggle-focus-shadow);
48
+ outline: 2px solid transparent;
49
+ outline-offset: 2px;
50
+ }
51
51
 
52
- &__track {
53
- position: relative;
54
- display: inline-block;
55
- width: var(--rt-toggle-track-width);
56
- height: var(--rt-toggle-track-height);
57
- border-radius: var(--rt-radius-full);
58
- background: var(--rt-toggle-color-track);
59
- box-shadow: var(--rt-toggle-shadow-border);
60
- color: var(--rt-toggle-color-icon);
61
- transition:
62
- background var(--rt-duration-fast) ease,
63
- box-shadow var(--rt-duration-fast) ease;
64
- }
52
+ &--disabled {
53
+ cursor: not-allowed;
54
+ opacity: 0.5;
55
+ }
65
56
 
66
- /* Элемент адресуется классом, а не вторым `&`: родитель здесь составной
67
- (`rt-toggle-switch .rt-toggle-switch`), и второй `&` развернулся бы в него целиком —
68
- то есть в селектор, требующий вложенного переключателя. Включённое состояние
69
- из-за этого не применялось: трек оставался серым, бегунок — слева. */
70
- &--on .rt-toggle-switch__track {
71
- background: var(--rt-toggle-color-track-on);
72
- box-shadow: none;
73
- }
57
+ &__track {
58
+ position: relative;
59
+ display: inline-block;
60
+ width: var(--rt-toggle-track-width);
61
+ height: var(--rt-toggle-track-height);
62
+ border-radius: var(--rt-toggle-radius);
63
+ background: var(--rt-toggle-color-track);
64
+ box-shadow: var(--rt-toggle-shadow-border);
65
+ color: var(--rt-toggle-color-icon);
66
+ transition:
67
+ background var(--rt-toggle-transition-duration) ease,
68
+ box-shadow var(--rt-toggle-transition-duration) ease;
69
+ }
74
70
 
75
- /* Иконки статичны: бегунок наезжает на иконку активного состояния и
76
- закрывает её, поэтому видна всегда иконка целевого состояния. */
77
- &__icon-off,
78
- &__icon-on {
79
- position: absolute;
80
- inset-block-start: 50%;
81
- transform: translateY(-50%);
82
- }
71
+ /* Элемент адресуется классом, а не вторым `&`: родитель здесь составной
72
+ (`rt-toggle-switch .rt-toggle-switch`), и второй `&` развернулся бы в него целиком —
73
+ то есть в селектор, требующий вложенного переключателя. Включённое состояние
74
+ из-за этого не применялось: трек оставался серым, бегунок — слева. */
75
+ &--on .rt-toggle-switch__track {
76
+ background: var(--rt-toggle-color-track-on);
77
+ box-shadow: none;
78
+ }
83
79
 
84
- &__icon-off {
85
- inset-inline-start: var(--rt-toggle-icon-inset);
86
- }
80
+ /* Иконки статичны: бегунок наезжает на иконку активного состояния и
81
+ закрывает её, поэтому видна всегда иконка целевого состояния. */
82
+ &__icon-off,
83
+ &__icon-on {
84
+ position: absolute;
85
+ inset-block-start: 50%;
86
+ transform: translateY(-50%);
87
+ }
87
88
 
88
- &__icon-on {
89
- inset-inline-end: var(--rt-toggle-icon-inset);
90
- }
89
+ &__icon-off {
90
+ inset-inline-start: var(--rt-toggle-icon-inset);
91
+ }
91
92
 
92
- &__thumb {
93
- position: absolute;
94
- width: var(--rt-toggle-thumb-size);
95
- height: var(--rt-toggle-thumb-size);
96
- border-radius: var(--rt-radius-full);
97
- background: var(--rt-toggle-color-thumb);
98
- box-shadow: var(--rt-toggle-shadow-thumb);
99
- inset-block-start: var(--rt-toggle-thumb-inset);
100
- inset-inline-start: var(--rt-toggle-thumb-inset);
101
- transition: transform var(--rt-duration-fast) ease;
102
- }
93
+ &__icon-on {
94
+ inset-inline-end: var(--rt-toggle-icon-inset);
95
+ }
96
+
97
+ &__thumb {
98
+ position: absolute;
99
+ width: var(--rt-toggle-thumb-size);
100
+ height: var(--rt-toggle-thumb-size);
101
+ border-radius: var(--rt-toggle-radius);
102
+ background: var(--rt-toggle-color-thumb);
103
+ box-shadow: var(--rt-toggle-shadow-thumb);
104
+ inset-block-start: var(--rt-toggle-thumb-inset);
105
+ inset-inline-start: var(--rt-toggle-thumb-inset);
106
+ transition: transform var(--rt-toggle-transition-duration) ease;
107
+ }
103
108
 
104
- &--on .rt-toggle-switch__thumb {
105
- transform: translateX(var(--rt-toggle-thumb-travel));
109
+ &--on .rt-toggle-switch__thumb {
110
+ transform: translateX(var(--rt-toggle-thumb-travel));
111
+ }
106
112
  }
107
113
  }
@@ -1,69 +1,78 @@
1
- .rt-toolbar {
2
- display: block;
1
+ @layer rt-kit.components {
2
+ .rt-toolbar {
3
+ display: block;
3
4
 
4
- &__bars {
5
- display: flex;
6
- width: 100%;
7
- flex-direction: row;
8
- align-items: center;
9
- justify-content: space-between;
10
- padding: var(--rt-space-2-5) 0;
11
- gap: var(--rt-space-2-5);
12
- }
5
+ &__bars {
6
+ display: flex;
7
+ width: 100%;
8
+ flex-direction: row;
9
+ align-items: center;
10
+ justify-content: space-between;
11
+ padding: var(--rt-space-2) 0;
12
+ gap: var(--rt-space-2);
13
+ }
13
14
 
14
- &__bar {
15
- display: flex;
16
- align-items: center;
15
+ &__bar {
16
+ display: flex;
17
+ align-items: center;
17
18
 
18
- // left/right — по контенту; center — эластичный спейсер, который
19
- // прижимает right-бар к краю. Раньше каждый list-page переопределял
20
- // эти три флекса через ::ng-deep — теперь поведение зашито здесь.
21
- &--left {
22
- flex: 0 0 auto;
23
- gap: var(--rt-space-2-5);
24
- }
19
+ // left/right — по контенту; center — эластичный спейсер, который
20
+ // прижимает right-бар к краю. Раньше каждый list-page переопределял
21
+ // эти три флекса через ::ng-deep — теперь поведение зашито здесь.
22
+ &--left {
23
+ flex: 0 0 auto;
24
+ gap: var(--rt-space-2);
25
+ }
25
26
 
26
- &--center {
27
- flex: 1 1 auto;
28
- justify-content: flex-end;
29
- gap: var(--rt-space-2-5);
27
+ &--center {
28
+ flex: 1 1 auto;
29
+ justify-content: flex-end;
30
+ gap: var(--rt-space-2);
30
31
 
31
- // Контрол-фильтр (поиск/селект) занимает ширину center и право-
32
- // выравнивается к action-кнопкам; свой max-width задаёт потребитель.
33
- rt-input,
34
- rt-select {
35
- width: 100%;
32
+ // Контрол-фильтр (поиск/селект) занимает ширину center и право-
33
+ // выравнивается к action-кнопкам; свой max-width задаёт потребитель.
34
+ rt-input,
35
+ rt-select {
36
+ width: 100%;
37
+ }
36
38
  }
37
- }
38
39
 
39
- &--right {
40
- // Прижатие к правому краю даже когда right — единственный бар
41
- // (нет left/center, которые бы вытолкнули его через space-between).
42
- flex: 0 0 auto;
43
- margin-left: auto;
44
- gap: var(--rt-space-sm);
40
+ &--right {
41
+ // Прижатие к правому краю даже когда right — единственный бар
42
+ // (нет left/center, которые бы вытолкнули его через space-between).
43
+ flex: 0 0 auto;
44
+ margin-left: auto;
45
+ gap: var(--rt-space-sm);
46
+ }
45
47
  }
46
48
  }
47
- }
48
49
 
49
- // Мобилка: три зоны не влезают в строку — стекаем в колонку на всю ширину
50
- // (фильтр → поиск → действия), поиск растягивается. `--dense` (компактная
51
- // шапка вроде rt-chat) из стекинга исключён — остаётся в одну строку.
52
- @media (width <= 768px) {
53
- .rt-toolbar:not(.rt-toolbar--dense) {
54
- .rt-toolbar__bars {
55
- flex-direction: column;
56
- align-items: stretch;
57
- gap: var(--rt-space-sm);
58
- }
50
+ // Мобилка: три зоны не влезают в строку — стекаем в колонку на всю ширину
51
+ // (фильтр → поиск → действия), поиск растягивается. `--dense` (компактная
52
+ // шапка вроде rt-chat) из стекинга исключён — остаётся в одну строку.
53
+ @media (width <= 768px) {
54
+ .rt-toolbar:not(.rt-toolbar--dense) {
55
+ .rt-toolbar__bars {
56
+ flex-direction: column;
57
+ align-items: stretch;
58
+ gap: var(--rt-space-sm);
59
+ }
59
60
 
60
- .rt-toolbar__bar--center {
61
- justify-content: stretch;
62
- }
61
+ // Зона стекает в колонку, а её содержимое — нет: третий отбор уезжал за
62
+ // правый край окна и обрезался прокруткой, не сказав об этом. Перенос
63
+ // объявлен здесь, а не у потребителя: зона узкого экрана — забота тулбара.
64
+ .rt-toolbar__bar {
65
+ flex-wrap: wrap;
66
+ }
63
67
 
64
- .rt-toolbar__bar--right {
65
- justify-content: flex-end;
66
- margin-left: 0;
68
+ .rt-toolbar__bar--center {
69
+ justify-content: stretch;
70
+ }
71
+
72
+ .rt-toolbar__bar--right {
73
+ justify-content: flex-end;
74
+ margin-left: 0;
75
+ }
67
76
  }
68
77
  }
69
78
  }