@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,25 +1,29 @@
1
- /* rt-money-row — строка финансового блока (ViewEncapsulation.None).
2
- Селектор bare `.rt-money-row` (класс на host). */
1
+ @layer rt-kit.components {
2
+ /* rt-money-row — строка финансового блока (ViewEncapsulation.None).
3
+ Селектор bare `.rt-money-row` (класс на host). */
3
4
 
4
- .rt-money-row {
5
- display: flex;
6
- justify-content: space-between;
7
- font-size: var(--rt-text-sm);
8
- gap: var(--rt-space-md);
9
- line-height: var(--rt-leading-normal);
5
+ .rt-money-row {
6
+ --rt-money-row-border-width: var(--rt-border-width-thin);
10
7
 
11
- &__label {
12
- color: var(--rt-color-text-muted);
13
- }
8
+ display: flex;
9
+ justify-content: space-between;
10
+ font-size: var(--rt-text-sm);
11
+ gap: var(--rt-space-md);
12
+ line-height: var(--rt-leading-normal);
14
13
 
15
- &__value {
16
- color: var(--rt-color-text-primary);
17
- white-space: nowrap;
18
- }
14
+ &__label {
15
+ color: var(--rt-color-text-muted);
16
+ }
17
+
18
+ &__value {
19
+ color: var(--rt-color-text-primary);
20
+ white-space: nowrap;
21
+ }
19
22
 
20
- &--total {
21
- padding-top: var(--rt-space-xs);
22
- border-top: var(--rt-border-width-thin) solid var(--rt-color-border-default);
23
- font-weight: var(--rt-font-weight-semibold);
23
+ &--total {
24
+ padding-top: var(--rt-space-xs);
25
+ border-top: var(--rt-money-row-border-width) solid var(--rt-color-border-default);
26
+ font-weight: var(--rt-font-weight-semibold);
27
+ }
24
28
  }
25
29
  }
@@ -1,198 +1,206 @@
1
- .rt-multiselect {
2
- position: relative;
3
- display: block;
4
- width: 100%;
5
-
6
- /* bordered=false: снимаем только resting-рамку триггера. Объявлено ДО блока
7
- __trigger — его :focus и правила --open/--invalid __trigger (равная
8
- специфичность) идут ниже по source-order и перекрывают рамку. */
9
- &--borderless &__trigger {
10
- border-color: transparent;
11
- }
1
+ @layer rt-kit.components {
2
+ .rt-multiselect {
3
+ --rt-multiselect-caret-transition-duration: var(--rt-duration-fast);
12
4
 
13
- &__trigger {
14
- display: flex;
5
+ position: relative;
6
+ display: block;
15
7
  width: 100%;
16
- min-height: var(--rt-input-height);
17
- box-sizing: border-box;
18
- align-items: center;
19
- padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
20
- border: var(--rt-input-border-width) solid var(--rt-input-color-border);
21
- border-radius: var(--rt-input-radius);
22
- background-color: var(--rt-input-color-bg);
23
- color: var(--rt-input-color-text);
24
- cursor: pointer;
25
-
26
- /* Триггер — нативный <button>: без явного наследования берёт UA-шрифт
27
- (Arial), а не Montserrat от body. */
28
- font-family: inherit;
29
- font-size: var(--rt-input-font-size);
30
- gap: var(--rt-space-sm);
31
- line-height: var(--rt-input-line-height);
32
- text-align: start;
33
- transition: var(--rt-input-transition);
34
-
35
- // :focus (не :focus-visible) — триггер это <button>, у которого
36
- // :focus-visible не срабатывает на клик мышью; кольцо нужно и при клике.
37
- &:focus {
38
- border-color: var(--rt-input-color-border-focus);
39
- box-shadow: var(--rt-input-focus-shadow);
40
- outline: 2px solid transparent;
41
- outline-offset: var(--rt-input-focus-outline-offset);
42
- }
43
8
 
44
- &:disabled {
45
- cursor: not-allowed;
9
+ /* bordered=false: снимаем только resting-рамку триггера. Объявлено ДО блока
10
+ __trigger — его :focus и правила --open/--invalid __trigger (равная
11
+ специфичность) идут ниже по source-order и перекрывают рамку. */
12
+ &--borderless &__trigger {
13
+ border-color: transparent;
46
14
  }
47
- }
48
15
 
49
- &--open &__trigger {
50
- border-color: var(--rt-input-color-border-focus);
51
- }
52
-
53
- &--invalid &__trigger {
54
- border-color: var(--rt-input-color-border-error);
16
+ &__trigger {
17
+ display: flex;
18
+ width: 100%;
19
+ min-height: var(--rt-input-height);
20
+ box-sizing: border-box;
21
+ align-items: center;
22
+ padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
23
+ border: var(--rt-input-border-width) solid var(--rt-input-color-border);
24
+ border-radius: var(--rt-input-radius);
25
+ background-color: var(--rt-input-color-bg);
26
+ color: var(--rt-input-color-text);
27
+ cursor: pointer;
28
+
29
+ /* Триггер — нативный <button>: без явного наследования берёт UA-шрифт
30
+ (Arial), а не Montserrat от body. */
31
+ font-family: inherit;
32
+ font-size: var(--rt-input-font-size);
33
+ gap: var(--rt-space-sm);
34
+ line-height: var(--rt-input-line-height);
35
+ text-align: start;
36
+ transition: var(--rt-input-transition);
37
+
38
+ // :focus (не :focus-visible) — триггер это <button>, у которого
39
+ // :focus-visible не срабатывает на клик мышью; кольцо нужно и при клике.
40
+ &:focus {
41
+ border-color: var(--rt-input-color-border-focus);
42
+ box-shadow: var(--rt-input-focus-shadow);
43
+ outline: 2px solid transparent;
44
+ outline-offset: var(--rt-input-focus-outline-offset);
45
+ }
55
46
 
56
- &:focus {
57
- box-shadow: var(--rt-input-focus-shadow-error);
47
+ &:disabled {
48
+ cursor: not-allowed;
49
+ }
58
50
  }
59
- }
60
51
 
61
- &--disabled {
62
- opacity: var(--rt-input-disabled-opacity);
63
- }
52
+ &--open &__trigger {
53
+ border-color: var(--rt-input-color-border-focus);
54
+ }
64
55
 
65
- /* Read-only: триггер остаётся в DOM (нужен для viewChild.required popover'а),
66
- но скрыт — значение показывает плоский текст __readonly. */
67
- &--readonly &__trigger {
68
- display: none;
69
- }
56
+ &--invalid &__trigger {
57
+ border-color: var(--rt-input-color-border-error);
70
58
 
71
- /* Read-only: выбранные labels через запятую как плоский текст. */
72
- &__readonly {
73
- display: inline-flex;
74
- min-height: var(--rt-input-height);
75
- align-items: center;
76
- color: var(--rt-field-value-color);
77
- font-size: var(--rt-field-value-font-size);
59
+ &:focus {
60
+ box-shadow: var(--rt-input-focus-shadow-error);
61
+ }
62
+ }
78
63
 
79
- &--empty {
80
- color: var(--rt-field-value-empty-color);
64
+ &--disabled {
65
+ opacity: var(--rt-input-disabled-opacity);
81
66
  }
82
- }
83
67
 
84
- &--size--sm &__trigger {
85
- min-height: var(--rt-input-height-sm);
86
- }
68
+ /* Read-only: триггер остаётся в DOM (нужен для viewChild.required popover'а),
69
+ но скрыт — значение показывает плоский текст __readonly. */
70
+ &--readonly &__trigger {
71
+ display: none;
72
+ }
87
73
 
88
- &--size--lg &__trigger {
89
- min-height: var(--rt-input-height-lg);
90
- }
74
+ /* Read-only: выбранные labels через запятую как плоский текст. */
75
+ &__readonly {
76
+ display: inline-flex;
77
+ min-height: var(--rt-input-height);
78
+ align-items: center;
79
+ color: var(--rt-field-value-color);
80
+ font-size: var(--rt-field-value-font-size);
91
81
 
92
- &__placeholder {
93
- overflow: hidden;
94
- min-width: 0;
95
- flex: 1 1 auto;
96
- color: var(--rt-input-color-text-placeholder);
97
- text-overflow: ellipsis;
98
- white-space: nowrap;
99
- }
82
+ &--empty {
83
+ color: var(--rt-field-value-empty-color);
84
+ }
85
+ }
100
86
 
101
- &__chips {
102
- display: flex;
103
- min-width: 0;
104
- flex: 1 1 auto;
105
- flex-wrap: wrap;
106
- gap: var(--rt-space-2xs);
107
- }
87
+ &--size--sm &__trigger {
88
+ min-height: var(--rt-input-height-sm);
89
+ }
108
90
 
109
- &__chip {
110
- display: inline-flex;
111
- align-items: center;
112
- }
91
+ &--size--lg &__trigger {
92
+ min-height: var(--rt-input-height-lg);
93
+ }
113
94
 
114
- &__chip-more {
115
- display: inline-flex;
116
- align-items: center;
117
- padding: 0 var(--rt-space-xs);
118
- color: var(--rt-input-color-text-placeholder);
119
- font-size: var(--rt-input-font-size);
120
- }
95
+ &__placeholder {
96
+ overflow: hidden;
97
+ min-width: 0;
98
+ flex: 1 1 auto;
99
+ color: var(--rt-input-color-text-placeholder);
100
+ text-overflow: ellipsis;
101
+ white-space: nowrap;
102
+ }
121
103
 
122
- &__clear {
123
- flex-shrink: 0;
124
- }
104
+ &__chips {
105
+ display: flex;
106
+ min-width: 0;
107
+ flex: 1 1 auto;
108
+ flex-wrap: wrap;
109
+ gap: var(--rt-space-2xs);
110
+ }
125
111
 
126
- &__chevron {
127
- flex-shrink: 0;
128
- transition: transform var(--rt-duration-fast) ease;
129
- }
112
+ &__chip {
113
+ display: inline-flex;
114
+ align-items: center;
115
+ }
130
116
 
131
- &--open &__chevron {
132
- transform: rotate(180deg);
133
- }
117
+ &__chip-more {
118
+ display: inline-flex;
119
+ align-items: center;
120
+ padding: 0 var(--rt-space-xs);
121
+ color: var(--rt-input-color-text-placeholder);
122
+ font-size: var(--rt-input-font-size);
123
+ }
134
124
 
135
- /* Panel рендерится в CDK Overlay (body) — позиционирование на CDK. */
136
- &__panel {
137
- width: 100%;
138
- max-height: var(--rt-input-panel-max-height);
139
- box-sizing: border-box;
140
- border: var(--rt-input-border-width) solid var(--rt-color-border-subtle);
141
- border-radius: var(--rt-input-radius);
142
- background-color: var(--rt-color-bg-surface);
143
- box-shadow: var(--rt-shadow-md);
144
- overflow-y: auto;
145
- }
125
+ &__clear {
126
+ flex-shrink: 0;
127
+ }
146
128
 
147
- &__list {
148
- padding: var(--rt-space-2xs) 0;
149
- margin: 0;
150
- list-style: none;
151
- }
129
+ &__chevron {
130
+ flex-shrink: 0;
131
+ transition: transform var(--rt-multiselect-caret-transition-duration) ease;
132
+ }
152
133
 
153
- &__option {
154
- display: flex;
155
- align-items: center;
156
- padding: var(--rt-space-sm) var(--rt-space-md);
157
- color: var(--rt-color-text-primary);
158
- cursor: pointer;
159
- font-size: var(--rt-input-font-size);
160
- gap: var(--rt-space-sm);
134
+ &--open &__chevron {
135
+ transform: rotate(180deg);
136
+ }
161
137
 
162
- &:hover,
163
- &--active {
164
- background-color: var(--rt-color-bg-hover);
138
+ /* Panel рендерится в CDK Overlay (body) — позиционирование на CDK. */
139
+ &__panel {
140
+ /* Панель рисуется в CDK Overlay, вне поддерева блока: свойство
141
+ объявляется на ней самой — с корня блока оно бы не докатилось. */
142
+ --rt-multiselect-panel-shadow: var(--rt-shadow-md);
143
+
144
+ width: 100%;
145
+ max-height: var(--rt-input-panel-max-height);
146
+ box-sizing: border-box;
147
+ border: var(--rt-input-border-width) solid var(--rt-color-border-subtle);
148
+ border-radius: var(--rt-input-radius);
149
+ background-color: var(--rt-color-bg-surface);
150
+ box-shadow: var(--rt-multiselect-panel-shadow);
151
+ overflow-y: auto;
165
152
  }
166
153
 
167
- &--selected {
168
- background-color: var(--rt-color-action-primary-subtle);
169
- font-weight: var(--rt-font-weight-semibold);
154
+ &__list {
155
+ padding: var(--rt-space-2xs) 0;
156
+ margin: 0;
157
+ list-style: none;
170
158
  }
171
159
 
172
- &--disabled {
173
- cursor: not-allowed;
174
- opacity: var(--rt-input-disabled-opacity);
160
+ &__option {
161
+ display: flex;
162
+ align-items: center;
163
+ padding: var(--rt-space-sm) var(--rt-space-md);
164
+ color: var(--rt-color-text-primary);
165
+ cursor: pointer;
166
+ font-size: var(--rt-input-font-size);
167
+ gap: var(--rt-space-sm);
168
+
169
+ &:hover,
170
+ &--active {
171
+ background-color: var(--rt-color-bg-hover);
172
+ }
173
+
174
+ &--selected {
175
+ background-color: var(--rt-color-action-primary-subtle);
176
+ font-weight: var(--rt-font-weight-semibold);
177
+ }
178
+
179
+ &--disabled {
180
+ cursor: not-allowed;
181
+ opacity: var(--rt-input-disabled-opacity);
175
182
 
176
- &:hover {
177
- background-color: transparent;
183
+ &:hover {
184
+ background-color: transparent;
185
+ }
178
186
  }
179
187
  }
180
- }
181
188
 
182
- &__checkbox {
183
- flex-shrink: 0;
184
- margin: 0;
185
- pointer-events: none;
186
- }
189
+ &__checkbox {
190
+ flex-shrink: 0;
191
+ margin: 0;
192
+ pointer-events: none;
193
+ }
187
194
 
188
- &__option-label {
189
- min-width: 0;
190
- flex: 1 1 auto;
191
- }
195
+ &__option-label {
196
+ min-width: 0;
197
+ flex: 1 1 auto;
198
+ }
192
199
 
193
- &__empty {
194
- padding: var(--rt-space-sm) var(--rt-space-md);
195
- color: var(--rt-input-color-text-placeholder);
196
- font-style: italic;
200
+ &__empty {
201
+ padding: var(--rt-space-sm) var(--rt-space-md);
202
+ color: var(--rt-input-color-text-placeholder);
203
+ font-style: italic;
204
+ }
197
205
  }
198
206
  }
@@ -1,45 +1,50 @@
1
- /* rt-night-grid — плотная сетка суток в common/ui. ViewEncapsulation.None.
2
- Хост адресуется по имени элемента, а не по классу блока: класс `.rt-night-grid` висит
3
- и на `<rt-night-grid>`, и на корне шаблона, поэтому правила блока вложены в хост —
4
- так они достаются только корню шаблона.
5
-
6
- Ячейки мелкие и без подписей: сетка читается как индикатор занятости целиком, а
7
- не как календарь — конкретный день подсказывает нативный title. */
8
-
9
- rt-night-grid {
10
- display: block;
11
-
12
- .rt-night-grid {
13
- /* Колонки резиновые от 16px: при жёсткой ширине ячейки сетка занимала
14
- треть широкой карточки, а фиксированный максимум оставлял в ряду
15
- «хвост» из одной ячейки, не попавшей в предыдущую строку. */
16
- display: grid;
17
- gap: var(--rt-space-1);
18
- grid-template-columns: repeat(auto-fit, minmax(16px, 1fr));
19
-
20
- &__cell {
21
- padding: 0;
22
- border: none;
23
- border-radius: var(--rt-radius-sm);
24
- aspect-ratio: 1;
25
- background: var(--rt-color-bg-surface-subtle);
26
- cursor: pointer;
27
-
28
- &:hover {
29
- outline: var(--rt-border-width-thin) solid var(--rt-color-border-strong);
30
- }
31
-
32
- &:focus-visible {
33
- outline: var(--rt-border-width-thin) solid var(--rt-color-border-focus);
34
- outline-offset: 1px;
35
- }
36
-
37
- &--state--primary {
38
- background: var(--rt-color-state-success);
39
- }
40
-
41
- &--state--secondary {
42
- background: color-mix(in srgb, var(--rt-color-state-success) 35%, transparent);
1
+ @layer rt-kit.components {
2
+ /* rt-night-grid — плотная сетка суток в common/ui. ViewEncapsulation.None.
3
+ Хост адресуется по имени элемента, а не по классу блока: класс `.rt-night-grid` висит
4
+ и на `<rt-night-grid>`, и на корне шаблона, поэтому правила блока вложены в хост —
5
+ так они достаются только корню шаблона.
6
+
7
+ Ячейки мелкие и без подписей: сетка читается как индикатор занятости целиком, а
8
+ не как календарь — конкретный день подсказывает нативный title. */
9
+
10
+ rt-night-grid {
11
+ display: block;
12
+
13
+ .rt-night-grid {
14
+ --rt-night-grid-cell-radius: var(--rt-radius-sm);
15
+ --rt-night-grid-outline-width: var(--rt-border-width-thin);
16
+
17
+ /* Колонки резиновые от 16px: при жёсткой ширине ячейки сетка занимала
18
+ треть широкой карточки, а фиксированный максимум оставлял в ряду
19
+ «хвост» из одной ячейки, не попавшей в предыдущую строку. */
20
+ display: grid;
21
+ gap: var(--rt-space-1);
22
+ grid-template-columns: repeat(auto-fit, minmax(16px, 1fr));
23
+
24
+ &__cell {
25
+ padding: 0;
26
+ border: none;
27
+ border-radius: var(--rt-night-grid-cell-radius);
28
+ aspect-ratio: 1;
29
+ background: var(--rt-color-bg-surface-subtle);
30
+ cursor: pointer;
31
+
32
+ &:hover {
33
+ outline: var(--rt-night-grid-outline-width) solid var(--rt-color-border-strong);
34
+ }
35
+
36
+ &:focus-visible {
37
+ outline: var(--rt-night-grid-outline-width) solid var(--rt-color-border-focus);
38
+ outline-offset: 1px;
39
+ }
40
+
41
+ &--state--primary {
42
+ background: var(--rt-color-state-success);
43
+ }
44
+
45
+ &--state--secondary {
46
+ background: color-mix(in srgb, var(--rt-color-state-success) 35%, transparent);
47
+ }
43
48
  }
44
49
  }
45
50
  }
@@ -1,13 +1,17 @@
1
- /* rt-note — тихая информационная заметка в common/ui (ViewEncapsulation.None).
2
- Селектор bare `.rt-note` (класс на host) — `:host` в None light-DOM не матчит.
3
- Палитра приглушённая (text-muted на subtle-фоне) — намеренно тише rt-message. */
1
+ @layer rt-kit.components {
2
+ /* rt-note — тихая информационная заметка в common/ui (ViewEncapsulation.None).
3
+ Селектор bare `.rt-note` (класс на host) — `:host` в None light-DOM не матчит.
4
+ Палитра приглушённая (text-muted на subtle-фоне) — намеренно тише rt-message. */
4
5
 
5
- .rt-note {
6
- display: block;
7
- padding: var(--rt-space-sm) var(--rt-space-md);
8
- border-radius: var(--rt-radius-md);
9
- background: var(--rt-color-bg-subtle);
10
- color: var(--rt-color-text-muted);
11
- font-size: var(--rt-text-sm);
12
- line-height: var(--rt-leading-normal);
6
+ .rt-note {
7
+ --rt-note-radius: var(--rt-radius-md);
8
+
9
+ display: block;
10
+ padding: var(--rt-space-sm) var(--rt-space-md);
11
+ border-radius: var(--rt-note-radius);
12
+ background: var(--rt-color-bg-subtle);
13
+ color: var(--rt-color-text-muted);
14
+ font-size: var(--rt-text-sm);
15
+ line-height: var(--rt-leading-normal);
16
+ }
13
17
  }
@@ -1,32 +1,39 @@
1
- .rt-notifications-bell {
2
- display: inline-flex;
3
- min-height: var(--rt-nav-item-height);
4
- align-items: center;
5
- padding: var(--rt-nav-item-padding);
6
- border: 0;
7
- border-radius: var(--rt-radius-md);
8
- background-color: transparent;
9
- color: var(--rt-nav-item-color);
10
- cursor: pointer;
11
- gap: var(--rt-nav-item-content-gap);
12
- transition: color var(--rt-duration-fast) linear;
1
+ @layer rt-kit.components {
2
+ .rt-notifications-bell {
3
+ --rt-notifications-bell-radius: var(--rt-radius-md);
4
+ --rt-notifications-bell-dot-radius: var(--rt-radius-full);
5
+ --rt-notifications-bell-outline-width: var(--rt-border-width-thin);
6
+ --rt-notifications-bell-transition-duration: var(--rt-duration-fast);
13
7
 
14
- &:hover {
15
- color: var(--rt-nav-item-color-hover);
16
- }
8
+ display: inline-flex;
9
+ min-height: var(--rt-nav-item-height);
10
+ align-items: center;
11
+ padding: var(--rt-nav-item-padding);
12
+ border: 0;
13
+ border-radius: var(--rt-notifications-bell-radius);
14
+ background-color: transparent;
15
+ color: var(--rt-nav-item-color);
16
+ cursor: pointer;
17
+ gap: var(--rt-nav-item-content-gap);
18
+ transition: color var(--rt-notifications-bell-transition-duration) linear;
17
19
 
18
- &:focus-visible {
19
- outline: var(--rt-border-width-thin) dashed var(--rt-color-border-strong);
20
- outline-offset: calc(var(--rt-space-0-5) * -1);
21
- }
20
+ &:hover {
21
+ color: var(--rt-nav-item-color-hover);
22
+ }
23
+
24
+ &:focus-visible {
25
+ outline: var(--rt-notifications-bell-outline-width) dashed var(--rt-color-border-strong);
26
+ outline-offset: calc(var(--rt-space-0-5) * -1);
27
+ }
22
28
 
23
- /* Точка идёт следом за иконкой, в потоке содержимого кнопки: место ей даёт
24
- общий зазор, как и у пункта меню. */
25
- &__marker {
26
- width: var(--rt-nav-marker-size);
27
- height: var(--rt-nav-marker-size);
28
- flex-shrink: 0;
29
- border-radius: var(--rt-radius-full);
30
- background-color: var(--rt-nav-marker-color);
29
+ /* Точка идёт следом за иконкой, в потоке содержимого кнопки: место ей даёт
30
+ общий зазор, как и у пункта меню. */
31
+ &__marker {
32
+ width: var(--rt-nav-marker-size);
33
+ height: var(--rt-nav-marker-size);
34
+ flex-shrink: 0;
35
+ border-radius: var(--rt-notifications-bell-dot-radius);
36
+ background-color: var(--rt-nav-marker-color);
37
+ }
31
38
  }
32
39
  }