@rt-tools/ui-kit-v2 0.13.0 → 0.14.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.
- package/README.md +25 -5
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +45 -9
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +2265 -664
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-v2-0.14.0.tgz +0 -0
- package/src/lib/components/CONTEXT.md +1 -1
- package/src/lib/components/action-bar/rt-action-bar.component.scss +5 -0
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +8 -1
- package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +5 -0
- package/src/lib/components/button/CONTEXT.md +1 -1
- package/src/lib/components/button/rt-button.directive.scss +5 -7
- package/src/lib/components/calendar/CONTEXT.md +16 -2
- package/src/lib/components/calendar/rt-calendar.component.scss +81 -4
- package/src/lib/components/card/rt-card.component.scss +5 -0
- package/src/lib/components/checkbox/rt-checkbox.component.scss +11 -0
- package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +1 -1
- package/src/lib/components/data-list/toolbar/rt-data-list-toolbar.component.scss +1 -1
- package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +1 -1
- package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +1 -1
- package/src/lib/components/data-table/rt-data-table.component.scss +1 -1
- package/src/lib/components/date-picker/CONTEXT.md +33 -14
- package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +155 -0
- package/src/lib/components/date-picker/rt-date-picker.component.scss +18 -2
- package/src/lib/components/date-range/CONTEXT.md +53 -0
- package/src/lib/components/date-range/panel/rt-date-range-panel.component.scss +103 -0
- package/src/lib/components/date-range/rt-date-range.component.scss +120 -0
- package/src/lib/components/dialog/rt-dialog.component.scss +5 -0
- package/src/lib/components/empty-state/rt-empty-state.component.scss +5 -0
- package/src/lib/components/file-card/rt-file-card.component.scss +5 -0
- package/src/lib/components/file-drop/rt-file-drop.component.scss +5 -0
- package/src/lib/components/header/rt-header.component.scss +5 -0
- package/src/lib/components/icon-button/CONTEXT.md +1 -1
- package/src/lib/components/icon-button/rt-icon-button.component.scss +9 -29
- package/src/lib/components/input/rt-input.component.scss +7 -1
- package/src/lib/components/input-number/rt-input-number.component.scss +7 -1
- package/src/lib/components/markdown-text/rt-markdown-text.component.scss +5 -0
- package/src/lib/components/menu/rt-menu-item.component.scss +5 -0
- package/src/lib/components/message/rt-message.component.scss +5 -0
- package/src/lib/components/money-list/rt-money-list.component.scss +5 -0
- package/src/lib/components/multiselect/CONTEXT.md +12 -5
- package/src/lib/components/multiselect/rt-multiselect.component.scss +32 -1
- package/src/lib/components/note/rt-note.component.scss +5 -0
- package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +5 -0
- package/src/lib/components/pagination/rt-pagination.component.scss +6 -1
- package/src/lib/components/radio-button/rt-radio-button.component.scss +5 -0
- package/src/lib/components/section-nav/rt-section-nav.component.scss +5 -0
- package/src/lib/components/select/CONTEXT.md +10 -7
- package/src/lib/components/select/rt-select.component.scss +36 -1
- package/src/lib/components/skeleton/CONTEXT.md +14 -16
- package/src/lib/components/skeleton/rt-skeleton.component.scss +7 -1
- package/src/lib/components/skeleton-wrapper/CONTEXT.md +6 -6
- package/src/lib/components/split-button/rt-split-button.component.scss +6 -0
- package/src/lib/components/stepper/rt-stepper.component.scss +5 -0
- package/src/lib/components/table/rt-table.component.scss +12 -0
- package/src/lib/components/tag/CONTEXT.md +14 -15
- package/src/lib/components/tag/rt-tag.component.scss +6 -30
- package/src/lib/components/textarea/rt-textarea.component.scss +8 -1
- package/src/lib/components/thread-list/rt-thread-list.component.scss +5 -0
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +7 -6
- package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +5 -0
- package/src/rich-editor/lib/components/message-composer/CONTEXT.md +11 -1
- package/src/rich-editor/lib/components/message-composer/rt-message-composer.component.scss +78 -34
- package/src/styles/_mixins.scss +39 -0
- package/styles/tokens.css +30 -5
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +11 -5
- package/types/rt-tools-ui-kit-v2.d.ts +394 -109
- package/rt-tools-ui-kit-v2-0.13.0.tgz +0 -0
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-multiselect {
|
|
5
|
+
--rt-multiselect-radius: var(--rt-input-radius);
|
|
3
6
|
--rt-multiselect-caret-transition-duration: var(--rt-duration-fast);
|
|
4
7
|
--rt-multiselect-own-outline-width: var(--rt-border-width-medium);
|
|
5
8
|
|
|
@@ -22,7 +25,7 @@
|
|
|
22
25
|
align-items: center;
|
|
23
26
|
padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
|
|
24
27
|
border: var(--rt-input-border-width) solid var(--rt-input-color-border);
|
|
25
|
-
border-radius: var(--rt-
|
|
28
|
+
border-radius: var(--rt-multiselect-radius);
|
|
26
29
|
background-color: var(--rt-input-color-bg);
|
|
27
30
|
color: var(--rt-input-color-text);
|
|
28
31
|
cursor: pointer;
|
|
@@ -171,6 +174,7 @@
|
|
|
171
174
|
font-size: var(--rt-input-font-size);
|
|
172
175
|
}
|
|
173
176
|
|
|
177
|
+
&__icon-left,
|
|
174
178
|
&__clear {
|
|
175
179
|
flex-shrink: 0;
|
|
176
180
|
}
|
|
@@ -189,6 +193,7 @@
|
|
|
189
193
|
/* Панель рисуется в CDK Overlay, вне поддерева блока: свойство
|
|
190
194
|
объявляется на ней самой — с корня блока оно бы не докатилось. */
|
|
191
195
|
--rt-multiselect-panel-shadow: var(--rt-shadow-md);
|
|
196
|
+
--rt-multiselect-tree-indent: var(--rt-space-lg);
|
|
192
197
|
|
|
193
198
|
/* Предел высоты по умолчанию — предел кита: длинный список прокручивается внутри
|
|
194
199
|
панели, а не уходит за нижний край экрана. Вход `panelMaxHeight` ставит свой
|
|
@@ -215,6 +220,9 @@
|
|
|
215
220
|
}
|
|
216
221
|
|
|
217
222
|
&__option {
|
|
223
|
+
/* Уровень строки в дереве ставит разметка на саму строку; ноль — строка верхнего уровня. */
|
|
224
|
+
--rt-multiselect-tree-level: 0;
|
|
225
|
+
|
|
218
226
|
display: flex;
|
|
219
227
|
align-items: center;
|
|
220
228
|
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
@@ -222,6 +230,7 @@
|
|
|
222
230
|
cursor: pointer;
|
|
223
231
|
font-size: var(--rt-input-font-size);
|
|
224
232
|
gap: var(--rt-space-sm);
|
|
233
|
+
padding-inline-start: calc(var(--rt-space-md) + var(--rt-multiselect-tree-indent) * var(--rt-multiselect-tree-level));
|
|
225
234
|
|
|
226
235
|
&:hover,
|
|
227
236
|
&--active {
|
|
@@ -243,6 +252,25 @@
|
|
|
243
252
|
}
|
|
244
253
|
}
|
|
245
254
|
|
|
255
|
+
/* Стрелка ветки и пустое место под неё у листа: шаг отступа равен их ширине с зазором,
|
|
256
|
+
и стрелка дочерней строки встаёт под подписью родителя. */
|
|
257
|
+
&__toggle,
|
|
258
|
+
&__toggle-space {
|
|
259
|
+
display: inline-flex;
|
|
260
|
+
flex-shrink: 0;
|
|
261
|
+
block-size: var(--rt-input-icon-size);
|
|
262
|
+
inline-size: var(--rt-input-icon-size);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
&__toggle {
|
|
266
|
+
align-items: center;
|
|
267
|
+
justify-content: center;
|
|
268
|
+
padding: 0;
|
|
269
|
+
border: 0;
|
|
270
|
+
background: transparent;
|
|
271
|
+
cursor: pointer;
|
|
272
|
+
}
|
|
273
|
+
|
|
246
274
|
&__checkbox {
|
|
247
275
|
flex-shrink: 0;
|
|
248
276
|
margin: 0;
|
|
@@ -259,5 +287,8 @@
|
|
|
259
287
|
color: var(--rt-input-color-text-placeholder);
|
|
260
288
|
font-style: italic;
|
|
261
289
|
}
|
|
290
|
+
|
|
291
|
+
/* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
|
|
292
|
+
@include kv.radius-steps('--rt-multiselect-radius');
|
|
262
293
|
}
|
|
263
294
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-note — тихая информационная заметка в common/ui (ViewEncapsulation.None).
|
|
3
5
|
Селектор bare `.rt-note` (класс на host) — `:host` в None light-DOM не матчит.
|
|
@@ -13,5 +15,8 @@
|
|
|
13
15
|
color: var(--rt-color-text-muted);
|
|
14
16
|
font-size: var(--rt-text-sm);
|
|
15
17
|
line-height: var(--rt-leading-normal);
|
|
18
|
+
|
|
19
|
+
/* Шаг входа `radius` переназначает скругление заметки. */
|
|
20
|
+
@include kv.radius-steps('--rt-note-radius');
|
|
16
21
|
}
|
|
17
22
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-notifications-bell {
|
|
3
5
|
--rt-notifications-bell-radius: var(--rt-radius-md);
|
|
@@ -35,5 +37,8 @@
|
|
|
35
37
|
border-radius: var(--rt-notifications-bell-dot-radius);
|
|
36
38
|
background-color: var(--rt-nav-marker-color);
|
|
37
39
|
}
|
|
40
|
+
|
|
41
|
+
/* Шаг входа `radius` переназначает скругление кнопки: класс блока стоит и на хосте, и на кнопке внутри. */
|
|
42
|
+
@include kv.radius-steps('--rt-notifications-bell-radius', '> .rt-notifications-bell');
|
|
38
43
|
}
|
|
39
44
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-pagination {
|
|
3
5
|
--rt-pagination-page-radius: var(--rt-pagination-box-radius);
|
|
@@ -24,7 +26,7 @@
|
|
|
24
26
|
|
|
25
27
|
.rt-icon-button {
|
|
26
28
|
--rt-icon-button-size: var(--rt-pagination-arrow-size);
|
|
27
|
-
--rt-icon-button-
|
|
29
|
+
--rt-icon-button-radius: var(--rt-pagination-arrow-radius);
|
|
28
30
|
--rt-icon-button-shadow: var(--rt-pagination-arrow-shadow);
|
|
29
31
|
}
|
|
30
32
|
|
|
@@ -123,6 +125,9 @@
|
|
|
123
125
|
font-size: var(--rt-text-sm);
|
|
124
126
|
white-space: var(--rt-pagination-per-page-label-white-space);
|
|
125
127
|
}
|
|
128
|
+
|
|
129
|
+
/* Шаг входа `radius` переназначает скругление страницы; стрелки и поле держат своё. */
|
|
130
|
+
@include kv.radius-steps('--rt-pagination-page-radius');
|
|
126
131
|
}
|
|
127
132
|
|
|
128
133
|
// Узкий контейнер: прячем числовую полосу и диапазон, показываем compact-форму.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-radio-button — радиокнопка. ViewEncapsulation.None, как у галочки: класс блока висит и на
|
|
3
5
|
хосте, и на корне шаблона, поэтому правила блока вложены в хост. Размеры образца лежат на
|
|
@@ -7,6 +9,9 @@
|
|
|
7
9
|
|
|
8
10
|
rt-radio-button {
|
|
9
11
|
display: inline-block;
|
|
12
|
+
|
|
13
|
+
/* Шаг входа `radius` переназначает скругление карточки; кружок остаётся кругом. */
|
|
14
|
+
@include kv.radius-steps('--rt-radio-button-card-radius', '> .rt-radio-button');
|
|
10
15
|
}
|
|
11
16
|
|
|
12
17
|
rt-radio-button .rt-radio-button {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-section-nav — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
3
5
|
`.rt-section-nav` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
@@ -53,6 +55,9 @@
|
|
|
53
55
|
letter-spacing: var(--rt-letter-spacing-wide);
|
|
54
56
|
line-height: var(--rt-leading-snug);
|
|
55
57
|
}
|
|
58
|
+
|
|
59
|
+
/* Шаг входа `radius` переназначает скругление плитки. */
|
|
60
|
+
@include kv.radius-steps('--rt-section-nav-tile-radius');
|
|
56
61
|
}
|
|
57
62
|
|
|
58
63
|
/* Тёмная тема: активная плитка на тёмной поверхности берёт свой фон.
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
|
|
9
9
|
Свои входы поверх общих из [`RtFormControlBase`](../form-control/CONTEXT.md):
|
|
10
10
|
|
|
11
|
-
| вход | тип
|
|
12
|
-
| ------------------- |
|
|
13
|
-
| `options` | `ReadonlyArray<{ label, value, disabled? }>` | `[]` |
|
|
14
|
-
| `placeholder` | `string`
|
|
15
|
-
| `iconLeft` | `IRtIcon.Name \| null`
|
|
16
|
-
| `filter` | `boolean`
|
|
17
|
-
| `filterPlaceholder` | `string`
|
|
11
|
+
| вход | тип | умолчание |
|
|
12
|
+
| ------------------- | ------------------------------------------------------- | ----------------- |
|
|
13
|
+
| `options` | `ReadonlyArray<{ label, value, disabled?, children? }>` | `[]` |
|
|
14
|
+
| `placeholder` | `string` | `''` |
|
|
15
|
+
| `iconLeft` | `IRtIcon.Name \| null` | `null` |
|
|
16
|
+
| `filter` | `boolean` | `false` |
|
|
17
|
+
| `filterPlaceholder` | `string` | `''` → `uiSearch` |
|
|
18
18
|
|
|
19
19
|
| выход | тип |
|
|
20
20
|
| ----------------- | ---------------- |
|
|
@@ -37,6 +37,9 @@
|
|
|
37
37
|
первую доступную опцию.
|
|
38
38
|
- Стрелки **перешагивают отключённые опции** и заворачиваются по кругу.
|
|
39
39
|
- `Enter`/`Space` выбирают подсвеченную, `Escape` закрывает без выбора.
|
|
40
|
+
- В дереве `ArrowRight` раскрывает ветку или спускается к первому ребёнку, `ArrowLeft` сворачивает
|
|
41
|
+
ветку или поднимается к родителю. Опции с `children` рисуются деревом — договорённость в
|
|
42
|
+
`docs/specs/ui-kit-v2/option-tree/`.
|
|
40
43
|
- Опции не фокусируются поодиночке: подсвеченная называется скринридеру через
|
|
41
44
|
`aria-activedescendant` на триггере.
|
|
42
45
|
- Подсвеченная опция **прокручивается в видимую часть панели** (`block: 'nearest'`): у панели
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-select {
|
|
5
|
+
--rt-select-radius: var(--rt-input-radius);
|
|
3
6
|
--rt-select-fill-radius: var(--rt-radius-sm);
|
|
4
7
|
--rt-select-caret-transition-duration: var(--rt-duration-fast);
|
|
5
8
|
--rt-select-own-outline-width: var(--rt-border-width-medium);
|
|
@@ -34,7 +37,7 @@
|
|
|
34
37
|
align-items: center;
|
|
35
38
|
padding: var(--rt-input-padding-y) var(--rt-input-padding-x);
|
|
36
39
|
border: var(--rt-input-border-width) solid var(--rt-input-color-border);
|
|
37
|
-
border-radius: var(--rt-
|
|
40
|
+
border-radius: var(--rt-select-radius);
|
|
38
41
|
background-color: var(--rt-input-color-bg);
|
|
39
42
|
color: var(--rt-input-color-text);
|
|
40
43
|
cursor: pointer;
|
|
@@ -207,6 +210,7 @@
|
|
|
207
210
|
--rt-select-check-display: var(--rt-overlay-select-check-display);
|
|
208
211
|
--rt-select-option-min-height: var(--rt-overlay-select-option-min-height);
|
|
209
212
|
--rt-select-panel-border-width: var(--rt-overlay-select-panel-border-width);
|
|
213
|
+
--rt-select-tree-indent: var(--rt-space-lg);
|
|
210
214
|
|
|
211
215
|
/* Предел высоты по умолчанию — предел кита: длинный список прокручивается внутри
|
|
212
216
|
панели, а не уходит за нижний край экрана. Вход `panelMaxHeight` ставит свой
|
|
@@ -238,6 +242,9 @@
|
|
|
238
242
|
}
|
|
239
243
|
|
|
240
244
|
&__option {
|
|
245
|
+
/* Уровень строки в дереве ставит разметка на саму строку; ноль — строка верхнего уровня. */
|
|
246
|
+
--rt-select-tree-level: 0;
|
|
247
|
+
|
|
241
248
|
display: flex;
|
|
242
249
|
min-height: var(--rt-select-option-min-height);
|
|
243
250
|
box-sizing: border-box;
|
|
@@ -248,6 +255,7 @@
|
|
|
248
255
|
cursor: pointer;
|
|
249
256
|
font-size: var(--rt-select-option-font-size);
|
|
250
257
|
gap: var(--rt-space-sm);
|
|
258
|
+
padding-inline-start: calc(var(--rt-space-md) + var(--rt-select-tree-indent) * var(--rt-select-tree-level));
|
|
251
259
|
|
|
252
260
|
&:hover,
|
|
253
261
|
&--active {
|
|
@@ -269,6 +277,30 @@
|
|
|
269
277
|
}
|
|
270
278
|
}
|
|
271
279
|
|
|
280
|
+
&__option-label {
|
|
281
|
+
min-width: 0;
|
|
282
|
+
flex: 1 1 auto;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/* Стрелка ветки и пустое место под неё у листа: шаг отступа равен их ширине с зазором,
|
|
286
|
+
и стрелка дочерней строки встаёт под подписью родителя. */
|
|
287
|
+
&__toggle,
|
|
288
|
+
&__toggle-space {
|
|
289
|
+
display: inline-flex;
|
|
290
|
+
flex-shrink: 0;
|
|
291
|
+
block-size: var(--rt-input-icon-size);
|
|
292
|
+
inline-size: var(--rt-input-icon-size);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
&__toggle {
|
|
296
|
+
align-items: center;
|
|
297
|
+
justify-content: center;
|
|
298
|
+
padding: 0;
|
|
299
|
+
border: 0;
|
|
300
|
+
background: transparent;
|
|
301
|
+
cursor: pointer;
|
|
302
|
+
}
|
|
303
|
+
|
|
272
304
|
/* Отметка выбранного пункта — у mat-select первого кита; свой вид её не рисует. */
|
|
273
305
|
&__check {
|
|
274
306
|
display: var(--rt-select-check-display);
|
|
@@ -280,5 +312,8 @@
|
|
|
280
312
|
color: var(--rt-input-color-text-placeholder);
|
|
281
313
|
font-style: italic;
|
|
282
314
|
}
|
|
315
|
+
|
|
316
|
+
/* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
|
|
317
|
+
@include kv.radius-steps('--rt-select-radius');
|
|
283
318
|
}
|
|
284
319
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
# `rt-skeleton`
|
|
2
2
|
|
|
3
3
|
```html
|
|
4
|
-
<rt-skeleton shape="rectangle" size="md" width="240px" height="16px"
|
|
4
|
+
<rt-skeleton shape="rectangle" size="md" width="240px" height="16px" radius="full" [animation]="true" />
|
|
5
5
|
```
|
|
6
6
|
|
|
7
|
-
| вход
|
|
8
|
-
|
|
|
9
|
-
| `shape`
|
|
10
|
-
| `size`
|
|
11
|
-
| `width`
|
|
12
|
-
| `height`
|
|
13
|
-
| `
|
|
14
|
-
| `animation`
|
|
7
|
+
| вход | тип | умолчание |
|
|
8
|
+
| ----------- | ------------------------------------- | ------------------ |
|
|
9
|
+
| `shape` | `'rectangle' \| 'circle' \| 'square'` | `'rectangle'` |
|
|
10
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
|
|
11
|
+
| `width` | `string` (любая CSS-длина) | `'100%'` |
|
|
12
|
+
| `height` | `string` | `'10px'` |
|
|
13
|
+
| `radius` | `TRtRadius \| null` — шаг общей шкалы | `null` (по фигуре) |
|
|
14
|
+
| `animation` | `boolean` | `true` |
|
|
15
15
|
|
|
16
|
-
Шкала размеров: `sm` 10px, `md` 15px, `lg` 20px.
|
|
17
|
-
`lg` 10, `xl` 999px.
|
|
16
|
+
Шкала размеров: `sm` 10px, `md` 15px, `lg` 20px. Скругление — шаг общей шкалы кита, вход `radius`.
|
|
18
17
|
|
|
19
18
|
## Главное, что нужно знать
|
|
20
19
|
|
|
@@ -28,11 +27,10 @@
|
|
|
28
27
|
- **Умолчание высоты — 10px, хотя умолчание размера — `md` (15px).** Расхождение намеренное:
|
|
29
28
|
полоска текста тоньше шага размера. Прямоугольник слушается `height`, круг и квадрат — нет.
|
|
30
29
|
- Круг и квадрат берут сторону из `size` и **игнорируют** `width`/`height`.
|
|
31
|
-
- **`
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- Круг — единственное исключение: он всегда `50%`, потому что круг и есть это скругление.
|
|
30
|
+
- **`radius: null` значит «по фигуре», а не «без скругления»:** прямоугольник и квадрат берут `sm`,
|
|
31
|
+
как в макете. Названный шаг перебивает умолчание у обоих.
|
|
32
|
+
- Круг — единственное исключение: он всегда круглый, и шаг его не меняет — круг и есть это
|
|
33
|
+
скругление.
|
|
36
34
|
- `animation` принимает голый атрибут (`animation` без значения = `true`).
|
|
37
35
|
- Мерцание снимается у пользователей с `prefers-reduced-motion` — правило в SCSS.
|
|
38
36
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-skeleton {
|
|
3
5
|
--rt-skeleton-wave-duration: 2.5s;
|
|
@@ -24,9 +26,13 @@
|
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
&--square {
|
|
27
|
-
border-radius:
|
|
29
|
+
border-radius: var(--rt-skeleton-radius);
|
|
28
30
|
}
|
|
29
31
|
|
|
32
|
+
/* Шаг входа `radius` переназначает скругление прямоугольника и квадрата; круг берёт своё
|
|
33
|
+
свойство и шагом не задевается. */
|
|
34
|
+
@include kv.radius-steps('--rt-skeleton-radius');
|
|
35
|
+
|
|
30
36
|
&--sm {
|
|
31
37
|
min-width: 10px;
|
|
32
38
|
min-height: 10px;
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
<rt-skeleton-wrapper width="240px" height="16px" [isLoading]="!tour()">{{ tour()?.title }}</rt-skeleton-wrapper>
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
| вход
|
|
10
|
-
|
|
|
11
|
-
| `isLoading`
|
|
12
|
-
| `width`
|
|
13
|
-
| `height`
|
|
14
|
-
| `shape` / `size` / `
|
|
9
|
+
| вход | тип | умолчание |
|
|
10
|
+
| ----------------------------------------- | --------------------------------------------- | --------- |
|
|
11
|
+
| `isLoading` | `boolean` | `false` |
|
|
12
|
+
| `width` | `string` | `'100%'` |
|
|
13
|
+
| `height` | `string` | `'15px'` |
|
|
14
|
+
| `shape` / `size` / `radius` / `animation` | как у [`rt-skeleton`](../skeleton/CONTEXT.md) | |
|
|
15
15
|
|
|
16
16
|
## Главное, что нужно знать
|
|
17
17
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-split-button — основной CTA + каретка с меню второстепенных действий.
|
|
3
5
|
ViewEncapsulation.None: селекторы префиксованы `.rt-split-button`. Меню
|
|
@@ -9,6 +11,10 @@
|
|
|
9
11
|
|
|
10
12
|
display: inline-flex;
|
|
11
13
|
|
|
14
|
+
/* Шаг входа `radius` переназначает скругление обеих кнопок контрола: лицо и каретка —
|
|
15
|
+
одна поверхность. */
|
|
16
|
+
@include kv.radius-steps('--rt-btn-radius', '> .rt-split-button__control > .rt-button');
|
|
17
|
+
|
|
12
18
|
/* Контрол — origin popover'а (width="trigger" берёт его ширину) и flex-ряд
|
|
13
19
|
лица + каретки. */
|
|
14
20
|
&__control {
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-stepper — линейный прогресс-степпер в common/ui. ViewEncapsulation.None.
|
|
3
5
|
Хост адресуется по имени элемента, а не по классу блока: класс `.rt-stepper` висит
|
|
@@ -122,5 +124,8 @@
|
|
|
122
124
|
}
|
|
123
125
|
}
|
|
124
126
|
}
|
|
127
|
+
|
|
128
|
+
/* Шаг входа `radius` переназначает скругление точек шагов. */
|
|
129
|
+
@include kv.radius-steps('--rt-stepper-radius', '> .rt-stepper');
|
|
125
130
|
}
|
|
126
131
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-table — common/ui таблица поверх cdk-table. ViewEncapsulation.None:
|
|
3
5
|
классы доступны без scope-attrs, токены --rt-* наследуются. */
|
|
@@ -276,6 +278,13 @@
|
|
|
276
278
|
flex-direction: column;
|
|
277
279
|
gap: var(--rt-space-sm);
|
|
278
280
|
}
|
|
281
|
+
|
|
282
|
+
/* Фон у каждой карточки свой, а хост без фона: иначе скруглённый угол карточки
|
|
283
|
+
стоит на белом квадрате хоста, и на странице другого цвета угол видно. Пустая
|
|
284
|
+
таблица карточек не рисует и держит свою панель заглушки. */
|
|
285
|
+
&:not(.rt-table--empty) {
|
|
286
|
+
background: transparent;
|
|
287
|
+
}
|
|
279
288
|
}
|
|
280
289
|
|
|
281
290
|
&__card {
|
|
@@ -334,6 +343,9 @@
|
|
|
334
343
|
width: 80%;
|
|
335
344
|
}
|
|
336
345
|
}
|
|
346
|
+
|
|
347
|
+
/* Шаг входа `radius` переназначает скругление карточки узкого вида; у широкого вида углов нет. */
|
|
348
|
+
@include kv.radius-steps('--rt-table-card-radius');
|
|
337
349
|
}
|
|
338
350
|
|
|
339
351
|
/* В тёмной теме таблица сливается с фоном контента (bg-page), а не поднимается
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
# `rt-tag`
|
|
2
2
|
|
|
3
3
|
```html
|
|
4
|
-
<rt-tag value="Активен" severity="success"
|
|
4
|
+
<rt-tag value="Активен" severity="success" appearance="solid" icon="check" [closable]="true" (closed)="onClosed($event)" />
|
|
5
5
|
```
|
|
6
6
|
|
|
7
|
-
| вход | тип | умолчание
|
|
8
|
-
| ------------------ | -------------------------------------------------------------------------- |
|
|
9
|
-
| `value` | `string` | **обязателен**
|
|
10
|
-
| `severity` | `'info' \| 'success' \| 'warning' \| 'danger' \| 'secondary' \| 'neutral'` | `'neutral'`
|
|
11
|
-
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'`
|
|
12
|
-
| `
|
|
13
|
-
| `
|
|
14
|
-
| `
|
|
15
|
-
| `
|
|
16
|
-
| `closable` | `boolean` | `false` |
|
|
7
|
+
| вход | тип | умолчание |
|
|
8
|
+
| ------------------ | -------------------------------------------------------------------------- | --------------- |
|
|
9
|
+
| `value` | `string` | **обязателен** |
|
|
10
|
+
| `severity` | `'info' \| 'success' \| 'warning' \| 'danger' \| 'secondary' \| 'neutral'` | `'neutral'` |
|
|
11
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` |
|
|
12
|
+
| `appearance` | `'solid' \| 'outlined'` | `'solid'` |
|
|
13
|
+
| `radius` | `TRtRadius \| null` — шаг общей шкалы | `null` → `full` |
|
|
14
|
+
| `icon` / `iconEnd` | `IRtIcon.Name \| null` | `null` |
|
|
15
|
+
| `closable` | `boolean` | `false` |
|
|
17
16
|
|
|
18
17
|
| выход | тип |
|
|
19
18
|
| -------- | ------------ |
|
|
@@ -37,8 +36,8 @@
|
|
|
37
36
|
12 пикселей, `md` — 16, `lg` — 20. Кегль, названный отдельно, оставил бы отступы от другой
|
|
38
37
|
ступени, и ряд пилюль перестал бы выстраиваться.
|
|
39
38
|
|
|
40
|
-
- `radius`
|
|
41
|
-
|
|
39
|
+
- `radius` — шаг общей шкалы кита, он ложится на хост атрибутом. Без него пилюля скруглена
|
|
40
|
+
полностью.
|
|
42
41
|
- Палитра дублируется атрибутом `data-severity` — по нему тег находят проверки и внешние стили,
|
|
43
42
|
не завязываясь на BEM-класс.
|
|
44
43
|
- Подпись крестика для скринридера берётся из словаря кита (`uiRemove`). Без
|
|
@@ -48,8 +47,8 @@
|
|
|
48
47
|
|
|
49
48
|
- `value` — обязательный вход: тег без текста не бывает. Иконка без текста — это
|
|
50
49
|
[`rt-icon-button`](../icon-button/CONTEXT.md), а не тег.
|
|
51
|
-
- Модификаторы выводятся BEM-директивами: `rt-tag--severity--success`, `
|
|
52
|
-
|
|
50
|
+
- Модификаторы выводятся BEM-директивами: `rt-tag--severity--success`, булев `closable` даёт
|
|
51
|
+
`rt-tag--closable` без значения.
|
|
53
52
|
|
|
54
53
|
## Рядом
|
|
55
54
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-tag — status pill в common/ui. ViewEncapsulation.None.
|
|
3
5
|
Хост адресуется по имени элемента, а не по классу блока: класс `.rt-tag` висит
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
max-width: 100%;
|
|
14
16
|
|
|
15
17
|
.rt-tag {
|
|
16
|
-
--rt-tag-radius: var(--rt-radius-
|
|
18
|
+
--rt-tag-radius: var(--rt-radius-full);
|
|
17
19
|
--rt-tag-border-width: var(--rt-border-width-thin);
|
|
18
20
|
|
|
19
21
|
display: inline-flex;
|
|
@@ -48,35 +50,6 @@
|
|
|
48
50
|
gap: var(--rt-space-2);
|
|
49
51
|
}
|
|
50
52
|
|
|
51
|
-
&--shape--pill {
|
|
52
|
-
--rt-tag-radius: var(--rt-radius-full);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
&--shape--square {
|
|
56
|
-
--rt-tag-radius: var(--rt-radius-sm);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/* Явный radius переопределяет shape — правила идут позже по порядку. */
|
|
60
|
-
&--radius--none {
|
|
61
|
-
--rt-tag-radius: var(--rt-radius-none);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
&--radius--sm {
|
|
65
|
-
--rt-tag-radius: var(--rt-radius-sm);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
&--radius--md {
|
|
69
|
-
--rt-tag-radius: var(--rt-radius-md);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
&--radius--lg {
|
|
73
|
-
--rt-tag-radius: var(--rt-radius-lg);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
&--radius--full {
|
|
77
|
-
--rt-tag-radius: var(--rt-radius-full);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
53
|
&--severity--info {
|
|
81
54
|
background: var(--rt-color-state-info-bg);
|
|
82
55
|
color: var(--rt-color-state-info);
|
|
@@ -137,5 +110,8 @@
|
|
|
137
110
|
margin-inline-start: var(--rt-space-0-5);
|
|
138
111
|
}
|
|
139
112
|
}
|
|
113
|
+
|
|
114
|
+
/* Шаг входа `radius` переназначает собственное свойство пилюли. */
|
|
115
|
+
@include kv.radius-steps('--rt-tag-radius', '> .rt-tag');
|
|
140
116
|
}
|
|
141
117
|
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-textarea {
|
|
5
|
+
--rt-textarea-radius: var(--rt-input-radius);
|
|
6
|
+
|
|
3
7
|
display: block;
|
|
4
8
|
width: 100%;
|
|
5
9
|
|
|
@@ -16,7 +20,7 @@
|
|
|
16
20
|
box-sizing: border-box;
|
|
17
21
|
padding: var(--rt-textarea-padding-y) var(--rt-input-padding-x);
|
|
18
22
|
border: var(--rt-input-border-width) solid var(--rt-input-color-border);
|
|
19
|
-
border-radius: var(--rt-
|
|
23
|
+
border-radius: var(--rt-textarea-radius);
|
|
20
24
|
background-color: var(--rt-input-color-bg);
|
|
21
25
|
color: var(--rt-input-color-text);
|
|
22
26
|
|
|
@@ -76,5 +80,8 @@
|
|
|
76
80
|
color: var(--rt-field-value-empty-color);
|
|
77
81
|
}
|
|
78
82
|
}
|
|
83
|
+
|
|
84
|
+
/* Шаг входа `radius` переназначает скругление поля; панель в оверлее держит своё. */
|
|
85
|
+
@include kv.radius-steps('--rt-textarea-radius');
|
|
79
86
|
}
|
|
80
87
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
.rt-thread-list {
|
|
3
5
|
--rt-thread-list-border-width: var(--rt-border-width-thin);
|
|
@@ -253,5 +255,8 @@
|
|
|
253
255
|
inline-size: 48px;
|
|
254
256
|
}
|
|
255
257
|
}
|
|
258
|
+
|
|
259
|
+
/* Шаг входа `radius` переназначает скругление карточки беседы. */
|
|
260
|
+
@include kv.radius-steps('--rt-thread-list-card-radius');
|
|
256
261
|
}
|
|
257
262
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
@use '../../../styles/mixins' as kv;
|
|
2
|
+
|
|
1
3
|
@layer rt-kit.components {
|
|
2
4
|
/* rt-toggle-button-group — segmented control. ViewEncapsulation.None.
|
|
3
5
|
Хост адресуется по имени элемента, а не по классу блока: класс
|
|
@@ -26,9 +28,9 @@
|
|
|
26
28
|
--rt-toggle-button-group-transition-duration: var(--rt-duration-fast);
|
|
27
29
|
--rt-toggle-button-group-focus-shadow: var(--rt-shadow-focus-ring);
|
|
28
30
|
--rt-toggle-button-group-track-padding: 4px;
|
|
29
|
-
--rt-toggle-button-group-track-radius:
|
|
31
|
+
--rt-toggle-button-group-track-radius: var(--rt-radius-md);
|
|
30
32
|
--rt-toggle-button-group-btn-padding: 0 8px;
|
|
31
|
-
--rt-toggle-button-group-btn-radius:
|
|
33
|
+
--rt-toggle-button-group-btn-radius: var(--rt-radius-ms);
|
|
32
34
|
--rt-toggle-button-group-btn-gap: 4px;
|
|
33
35
|
--rt-toggle-button-group-btn-font-size: 12px;
|
|
34
36
|
--rt-toggle-button-group-btn-line-height: 14px;
|
|
@@ -98,9 +100,7 @@
|
|
|
98
100
|
/* Размерные тиры — общая высота совпадает с rt-button (sm/md/lg). */
|
|
99
101
|
&--md {
|
|
100
102
|
--rt-toggle-button-group-height: 40px;
|
|
101
|
-
--rt-toggle-button-group-track-radius: 10px;
|
|
102
103
|
--rt-toggle-button-group-btn-padding: 0 14px;
|
|
103
|
-
--rt-toggle-button-group-btn-radius: 10px;
|
|
104
104
|
--rt-toggle-button-group-btn-gap: 6px;
|
|
105
105
|
--rt-toggle-button-group-btn-font-size: 14px;
|
|
106
106
|
--rt-toggle-button-group-btn-line-height: 16px;
|
|
@@ -108,9 +108,7 @@
|
|
|
108
108
|
|
|
109
109
|
&--lg {
|
|
110
110
|
--rt-toggle-button-group-height: 50px;
|
|
111
|
-
--rt-toggle-button-group-track-radius: 12px;
|
|
112
111
|
--rt-toggle-button-group-btn-padding: 0 20px;
|
|
113
|
-
--rt-toggle-button-group-btn-radius: 12px;
|
|
114
112
|
--rt-toggle-button-group-btn-gap: 8px;
|
|
115
113
|
--rt-toggle-button-group-btn-font-size: 16px;
|
|
116
114
|
--rt-toggle-button-group-btn-line-height: 18px;
|
|
@@ -120,6 +118,9 @@
|
|
|
120
118
|
opacity: 0.5;
|
|
121
119
|
}
|
|
122
120
|
}
|
|
121
|
+
|
|
122
|
+
/* Шаг входа `radius` переназначает скругление дорожки; сегменты держат своё. */
|
|
123
|
+
@include kv.radius-steps('--rt-toggle-button-group-track-radius', '> .rt-toggle-button-group');
|
|
123
124
|
}
|
|
124
125
|
|
|
125
126
|
/* full-width: группа растягивается на контейнер, опции делят ширину поровну. */
|