@rt-tools/ui-kit-v2 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -0
- package/fesm2022/rt-tools-ui-kit-v2.mjs +166 -166
- package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-v2-0.6.0.tgz +0 -0
- package/src/lib/components/aside/_rt-aside-overlay.scss +73 -71
- package/src/lib/components/aside/footer/rt-aside-footer.component.scss +20 -16
- package/src/lib/components/aside/header/rt-aside-header.component.scss +72 -70
- package/src/lib/components/aside/rt-aside.component.scss +107 -105
- package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +33 -31
- package/src/lib/components/aside-section/rt-aside-section.component.scss +27 -23
- package/src/lib/components/autocomplete/rt-autocomplete.component.scss +124 -118
- package/src/lib/components/bar-list/rt-bar-list.component.scss +85 -81
- package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +64 -57
- package/src/lib/components/button/rt-button.directive.scss +319 -280
- package/src/lib/components/calendar/rt-calendar.component.scss +106 -102
- package/src/lib/components/card/rt-card.component.scss +53 -45
- package/src/lib/components/chat/rt-chat.component.scss +312 -306
- package/src/lib/components/checkbox/rt-checkbox.component.scss +61 -54
- package/src/lib/components/collapsible-text/rt-collapsible-text.component.scss +36 -34
- package/src/lib/components/confirm-popover/rt-confirm-popover.component.scss +36 -30
- package/src/lib/components/container/rt-container.component.scss +91 -87
- package/src/lib/components/counter/rt-counter.component.scss +14 -12
- package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
- package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
- package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
- package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
- package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
- package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
- package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
- package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
- package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
- package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
- package/src/lib/components/field/rt-field.component.scss +63 -61
- package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
- package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
- package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
- package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
- package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
- package/src/lib/components/header/rt-header.component.scss +61 -55
- package/src/lib/components/icon/rt-icon.component.scss +14 -12
- package/src/lib/components/icon-button/CONTEXT.md +4 -2
- package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
- package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
- package/src/lib/components/input/rt-input.component.scss +102 -98
- package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
- package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
- package/src/lib/components/logo/rt-logo.component.scss +54 -52
- package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
- package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
- package/src/lib/components/menu/rt-menu.component.scss +23 -15
- package/src/lib/components/message/rt-message.component.scss +53 -49
- package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
- package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
- package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
- package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
- package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
- package/src/lib/components/note/rt-note.component.scss +15 -11
- package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
- package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
- package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
- package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
- package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
- package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
- package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
- package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
- package/src/lib/components/select/rt-select.component.scss +146 -138
- package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
- package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
- package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
- package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
- package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
- package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
- package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
- package/src/lib/components/table/rt-table.component.scss +260 -252
- package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
- package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
- package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
- package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
- package/src/lib/components/tag/rt-tag.component.scss +97 -92
- package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
- package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
- package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
- package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
- package/src/lib/components/toast/rt-toast.component.scss +169 -160
- package/src/lib/components/toast/rt-toaster.component.scss +37 -35
- package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
- package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
- package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
- package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
- package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
- package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
- package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
- package/src/styles/_index.scss +4 -0
- package/src/styles/_layers.scss +22 -0
- package/src/styles/_login.scss +87 -85
- package/src/styles/_mixins.scss +1 -1
- package/src/styles/_primitives.scss +126 -67
- package/src/styles/_scrollbar.scss +21 -19
- package/src/styles/_semantic.scss +140 -56
- package/src/styles/_theme-dark.scss +60 -27
- package/styles/tokens.css +628 -408
- package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
|
@@ -1,66 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-checkbox — чекбокс в common/ui. ViewEncapsulation.None.
|
|
3
|
+
Хост адресуется по имени элемента, а не по классу блока: класс `.rt-checkbox` висит
|
|
4
|
+
и на `<rt-checkbox>`, и на корне шаблона, поэтому правила блока вложены в хост —
|
|
5
|
+
так они достаются только корню шаблона. */
|
|
5
6
|
|
|
6
|
-
rt-checkbox {
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
rt-checkbox .rt-checkbox {
|
|
11
|
-
display: inline-flex;
|
|
12
|
-
align-items: center;
|
|
13
|
-
padding: 0;
|
|
14
|
-
border: none;
|
|
15
|
-
background: none;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
gap: var(--rt-space-sm);
|
|
18
|
-
text-align: start;
|
|
19
|
-
|
|
20
|
-
&:focus-visible {
|
|
21
|
-
border-radius: var(--rt-radius-sm);
|
|
22
|
-
box-shadow: var(--rt-shadow-focus-ring);
|
|
23
|
-
outline: 2px solid transparent;
|
|
24
|
-
outline-offset: 2px;
|
|
7
|
+
rt-checkbox {
|
|
8
|
+
display: inline-block;
|
|
25
9
|
}
|
|
26
10
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
11
|
+
rt-checkbox .rt-checkbox {
|
|
12
|
+
--rt-checkbox-focus-radius: var(--rt-radius-sm);
|
|
13
|
+
--rt-checkbox-focus-shadow: var(--rt-shadow-focus-ring);
|
|
14
|
+
--rt-checkbox-box-radius: var(--rt-radius-sm);
|
|
15
|
+
--rt-checkbox-transition-duration: var(--rt-duration-fast);
|
|
31
16
|
|
|
32
|
-
&__box {
|
|
33
17
|
display: inline-flex;
|
|
34
|
-
width: 18px;
|
|
35
|
-
height: 18px;
|
|
36
|
-
flex-shrink: 0;
|
|
37
18
|
align-items: center;
|
|
38
|
-
|
|
39
|
-
border:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
border-color var(--rt-duration-fast) ease;
|
|
45
|
-
}
|
|
19
|
+
padding: 0;
|
|
20
|
+
border: none;
|
|
21
|
+
background: none;
|
|
22
|
+
cursor: pointer;
|
|
23
|
+
gap: var(--rt-space-sm);
|
|
24
|
+
text-align: start;
|
|
46
25
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
26
|
+
&:focus-visible {
|
|
27
|
+
border-radius: var(--rt-checkbox-focus-radius);
|
|
28
|
+
box-shadow: var(--rt-checkbox-focus-shadow);
|
|
29
|
+
outline: 2px solid transparent;
|
|
30
|
+
outline-offset: 2px;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&--disabled {
|
|
34
|
+
cursor: not-allowed;
|
|
35
|
+
opacity: 0.5;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
&__box {
|
|
39
|
+
display: inline-flex;
|
|
40
|
+
width: 18px;
|
|
41
|
+
height: 18px;
|
|
42
|
+
flex-shrink: 0;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
border: var(--rt-input-border-width) solid var(--rt-color-border-strong);
|
|
46
|
+
border-radius: var(--rt-checkbox-box-radius);
|
|
47
|
+
background: var(--rt-color-bg-surface);
|
|
48
|
+
transition:
|
|
49
|
+
background var(--rt-checkbox-transition-duration) ease,
|
|
50
|
+
border-color var(--rt-checkbox-transition-duration) ease;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Элемент адресуется классом, а не вторым `&`: родитель здесь составной
|
|
54
|
+
(`rt-checkbox .rt-checkbox`), и второй `&` развернулся бы в него целиком —
|
|
55
|
+
`… .rt-checkbox--checked rt-checkbox .rt-checkbox__box`, то есть в селектор,
|
|
56
|
+
требующий вложенного чекбокса. Заливка отмеченного из-за этого не применялась. */
|
|
57
|
+
&--checked .rt-checkbox__box,
|
|
58
|
+
&--indeterminate .rt-checkbox__box {
|
|
59
|
+
border-color: var(--rt-color-action-primary);
|
|
60
|
+
background: var(--rt-color-action-primary);
|
|
61
|
+
}
|
|
56
62
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
&__label {
|
|
64
|
+
color: var(--rt-color-text-primary);
|
|
65
|
+
font-size: var(--rt-text-sm);
|
|
66
|
+
user-select: none;
|
|
61
67
|
|
|
62
|
-
|
|
63
|
-
|
|
68
|
+
&:empty {
|
|
69
|
+
display: none;
|
|
70
|
+
}
|
|
64
71
|
}
|
|
65
72
|
}
|
|
66
73
|
}
|
|
@@ -1,43 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
.rt-collapsible-text {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
gap: var(--rt-space-sm);
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
&__text {
|
|
8
|
+
display: block;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
&--clamped {
|
|
11
|
+
display: -webkit-box;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
-webkit-box-orient: vertical;
|
|
14
|
+
}
|
|
13
15
|
}
|
|
14
|
-
}
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
&__paragraph {
|
|
18
|
+
margin: 0;
|
|
19
|
+
color: var(--rt-color-text-primary);
|
|
20
|
+
font-family: var(--rt-font-family-sans);
|
|
21
|
+
font-size: var(--rt-text-xs);
|
|
22
|
+
font-weight: var(--rt-font-weight-regular);
|
|
23
|
+
letter-spacing: var(--rt-letter-spacing-wide);
|
|
24
|
+
line-height: var(--rt-leading-snug);
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
& + & {
|
|
27
|
+
margin-top: var(--rt-space-sm);
|
|
28
|
+
}
|
|
27
29
|
}
|
|
28
|
-
}
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
31
|
+
&__toggle {
|
|
32
|
+
align-self: flex-start;
|
|
33
|
+
padding: 0;
|
|
34
|
+
border: 0;
|
|
35
|
+
background: transparent;
|
|
36
|
+
color: var(--rt-color-text-link);
|
|
37
|
+
cursor: pointer;
|
|
38
|
+
font-family: var(--rt-font-family-sans);
|
|
39
|
+
font-size: var(--rt-text-xs);
|
|
40
|
+
font-weight: var(--rt-font-weight-medium);
|
|
41
|
+
letter-spacing: var(--rt-letter-spacing-wide);
|
|
42
|
+
line-height: var(--rt-leading-snug);
|
|
43
|
+
}
|
|
42
44
|
}
|
|
43
45
|
}
|
|
@@ -1,36 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-confirm-popover — панель подтверждения в CDK Overlay. ViewEncapsulation.None.
|
|
3
|
+
Селекторы префиксованы `.rt-confirm-popover`. */
|
|
3
4
|
|
|
4
|
-
.rt-confirm-popover {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
flex-direction: column;
|
|
9
|
-
padding: var(--rt-space-md);
|
|
10
|
-
border: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
|
|
11
|
-
border-radius: var(--rt-radius-md);
|
|
12
|
-
background: var(--rt-color-bg-surface);
|
|
13
|
-
box-shadow: var(--rt-shadow-lg);
|
|
14
|
-
gap: var(--rt-space-sm);
|
|
5
|
+
.rt-confirm-popover {
|
|
6
|
+
--rt-confirm-popover-radius: var(--rt-radius-md);
|
|
7
|
+
--rt-confirm-popover-border-width: var(--rt-border-width-thin);
|
|
8
|
+
--rt-confirm-popover-shadow: var(--rt-shadow-lg);
|
|
15
9
|
|
|
16
|
-
&__title {
|
|
17
|
-
margin: 0;
|
|
18
|
-
color: var(--rt-color-text-primary);
|
|
19
|
-
font-size: var(--rt-text-sm);
|
|
20
|
-
font-weight: var(--rt-font-weight-semibold);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
&__message {
|
|
24
|
-
margin: 0;
|
|
25
|
-
color: var(--rt-color-text-primary);
|
|
26
|
-
font-size: var(--rt-text-sm);
|
|
27
|
-
line-height: var(--rt-leading-normal);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
&__actions {
|
|
31
10
|
display: flex;
|
|
32
|
-
|
|
11
|
+
width: 280px;
|
|
12
|
+
max-width: 280px;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
padding: var(--rt-space-md);
|
|
15
|
+
border: var(--rt-confirm-popover-border-width) solid var(--rt-color-border-subtle);
|
|
16
|
+
border-radius: var(--rt-confirm-popover-radius);
|
|
17
|
+
background: var(--rt-color-bg-surface);
|
|
18
|
+
box-shadow: var(--rt-confirm-popover-shadow);
|
|
33
19
|
gap: var(--rt-space-sm);
|
|
34
|
-
|
|
20
|
+
|
|
21
|
+
&__title {
|
|
22
|
+
margin: 0;
|
|
23
|
+
color: var(--rt-color-text-primary);
|
|
24
|
+
font-size: var(--rt-text-sm);
|
|
25
|
+
font-weight: var(--rt-font-weight-semibold);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
&__message {
|
|
29
|
+
margin: 0;
|
|
30
|
+
color: var(--rt-color-text-primary);
|
|
31
|
+
font-size: var(--rt-text-sm);
|
|
32
|
+
line-height: var(--rt-leading-normal);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&__actions {
|
|
36
|
+
display: flex;
|
|
37
|
+
justify-content: space-between;
|
|
38
|
+
gap: var(--rt-space-sm);
|
|
39
|
+
margin-block-start: var(--rt-space-xs);
|
|
40
|
+
}
|
|
35
41
|
}
|
|
36
42
|
}
|
|
@@ -3,109 +3,113 @@
|
|
|
3
3
|
взял ни один маршрут, а панель контейнер держит в persistent-режиме. */
|
|
4
4
|
@use '../aside/rt-aside-overlay';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
flex: 1 1 auto;
|
|
10
|
-
background-color: var(--rt-color-bg-page, #f5f5f5);
|
|
11
|
-
color: var(--rt-color-text-primary, #222);
|
|
12
|
-
grid-template: 'header header' auto 'left-sidenav toolbar' auto 'left-sidenav content' 1fr / auto 1fr;
|
|
6
|
+
@layer rt-kit.components {
|
|
7
|
+
.rt-container {
|
|
8
|
+
--rt-container-border-width: var(--rt-border-width-thin);
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
position: sticky;
|
|
21
|
-
z-index: 1;
|
|
22
|
-
top: 0;
|
|
23
|
-
display: block;
|
|
24
|
-
grid-area: header;
|
|
10
|
+
display: grid;
|
|
11
|
+
min-height: 100%;
|
|
12
|
+
flex: 1 1 auto;
|
|
13
|
+
background-color: var(--rt-color-bg-page);
|
|
14
|
+
color: var(--rt-color-text-primary);
|
|
15
|
+
grid-template: 'header header' auto 'left-sidenav toolbar' auto 'left-sidenav content' 1fr / auto 1fr;
|
|
25
16
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
&__toolbar {
|
|
40
|
-
display: flex;
|
|
41
|
-
align-items: center;
|
|
42
|
-
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
43
|
-
border-bottom: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
|
|
44
|
-
background-color: var(--rt-color-bg-surface, #fff);
|
|
45
|
-
grid-area: toolbar;
|
|
17
|
+
&__header {
|
|
18
|
+
// Хедер закреплён вверху: при скролле документа (высота контейнера не
|
|
19
|
+
// ограничена вьюпортом) grid-строка header уезжала бы вверх. sticky top:0
|
|
20
|
+
// держит её на месте. z-index:1 — выше later-DOM контента, но ниже CDK
|
|
21
|
+
// overlay асайдов (1000). Работает благодаря `html { overflow-x: clip }`
|
|
22
|
+
// (clip, в отличие от hidden, не создаёт scroll-контейнер и не ломает sticky).
|
|
23
|
+
position: sticky;
|
|
24
|
+
z-index: 1;
|
|
25
|
+
top: 0;
|
|
26
|
+
display: block;
|
|
27
|
+
grid-area: header;
|
|
46
28
|
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
// Обёртка прозрачна: спроецированный хедер даёт собственный фон. Свой
|
|
30
|
+
// bg-surface здесь протекал бы за скруглёнными нижними углами хедера —
|
|
31
|
+
// в тёмной теме это давало серые «уголки» (surface ≠ фон хедера).
|
|
49
32
|
}
|
|
50
33
|
|
|
51
|
-
|
|
52
|
-
|
|
34
|
+
&__left-sidenav {
|
|
35
|
+
display: block;
|
|
36
|
+
padding: var(--rt-space-md);
|
|
37
|
+
border-right: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
|
|
38
|
+
background-color: var(--rt-color-bg-surface);
|
|
39
|
+
grid-area: left-sidenav;
|
|
53
40
|
}
|
|
54
41
|
|
|
55
|
-
|
|
56
|
-
|
|
42
|
+
&__toolbar {
|
|
43
|
+
display: flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
padding: var(--rt-space-sm) var(--rt-space-md);
|
|
46
|
+
border-bottom: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
|
|
47
|
+
background-color: var(--rt-color-bg-surface);
|
|
48
|
+
grid-area: toolbar;
|
|
49
|
+
|
|
50
|
+
&--slot--left {
|
|
51
|
+
justify-content: flex-start;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
&--slot--center {
|
|
55
|
+
justify-content: center;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&--slot--right {
|
|
59
|
+
justify-content: flex-end;
|
|
60
|
+
}
|
|
57
61
|
}
|
|
58
|
-
}
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
&__content {
|
|
64
|
+
display: flex;
|
|
65
|
+
overflow: auto;
|
|
66
|
+
min-height: 0;
|
|
67
|
+
flex-direction: column;
|
|
68
|
+
grid-area: content;
|
|
69
|
+
}
|
|
66
70
|
}
|
|
67
|
-
}
|
|
68
71
|
|
|
69
|
-
/* App-shell раскладка (opt-in `height="viewport"`): контейнер жёстко равен
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
.rt-container--viewport {
|
|
77
|
-
|
|
78
|
-
|
|
72
|
+
/* App-shell раскладка (opt-in `height="viewport"`): контейнер жёстко равен
|
|
73
|
+
вьюпорту, документ не скроллится вовсе — скроллятся зоны внутри, каждая сама.
|
|
74
|
+
В дефолтном `auto` контейнер не ограничен вьюпортом (растёт под контент), из-за
|
|
75
|
+
чего `&__content { overflow: auto }` никогда не переполняется: скролл забирает
|
|
76
|
+
документ и утаскивает нав-рейл вместе со списком и лентой чата одним движением.
|
|
77
|
+
`min-block-size` сбрасываем — иначе `min-height: 100%` спорит с фиксированной
|
|
78
|
+
высотой, если родитель окажется выше вьюпорта. */
|
|
79
|
+
.rt-container--viewport {
|
|
80
|
+
block-size: 100dvh;
|
|
81
|
+
min-block-size: 0;
|
|
79
82
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
/* Content перестаёт быть скролл-владельцем: он клипает, а скроллит то, что
|
|
84
|
+
внутри (список диалогов, лента чата) — у каждой зоны свой overflow. */
|
|
85
|
+
.rt-container__content {
|
|
86
|
+
overflow: hidden;
|
|
87
|
+
}
|
|
85
88
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
89
|
+
/* Нав-рейлу высоты вьюпорта хватает, скролла на нём быть не должно. `auto`,
|
|
90
|
+
а не `hidden`: в низком окне пункты меню иначе стали бы недостижимы. */
|
|
91
|
+
.rt-container__left-sidenav {
|
|
92
|
+
overflow: auto;
|
|
93
|
+
}
|
|
90
94
|
}
|
|
91
|
-
}
|
|
92
95
|
|
|
93
|
-
@media (width <= 768px) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
@media (width <= 768px) {
|
|
97
|
+
// Opt-in: левый sidenav сворачивается в нижний ряд grid'а (таб-бар).
|
|
98
|
+
// Контент занимает всю ширину и скроллится в своём `1fr` над баром —
|
|
99
|
+
// бар остаётся видимым без position:fixed и без привязки к его высоте.
|
|
100
|
+
.rt-container--mobile-left-bottom {
|
|
101
|
+
grid-template:
|
|
102
|
+
'header' auto
|
|
103
|
+
'toolbar' auto
|
|
104
|
+
'content' 1fr
|
|
105
|
+
'left-sidenav' auto
|
|
106
|
+
/ 1fr;
|
|
104
107
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
.rt-container__left-sidenav {
|
|
109
|
+
padding: 0;
|
|
110
|
+
border-top: var(--rt-container-border-width) solid var(--rt-color-border-subtle);
|
|
111
|
+
border-right: none;
|
|
112
|
+
}
|
|
109
113
|
}
|
|
110
114
|
}
|
|
111
115
|
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-counter — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
3
|
+
`.rt-counter` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
3
4
|
|
|
4
|
-
.rt-counter {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
.rt-counter {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: var(--rt-counter-gap);
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
&__value {
|
|
11
|
+
min-width: var(--rt-counter-value-min-width);
|
|
12
|
+
color: var(--rt-counter-value-color);
|
|
13
|
+
font-size: var(--rt-counter-value-font-size);
|
|
14
|
+
font-variant-numeric: tabular-nums;
|
|
15
|
+
text-align: center;
|
|
16
|
+
}
|
|
15
17
|
}
|
|
16
18
|
}
|
|
@@ -1,34 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-counter-row — ViewEncapsulation.None: правила таргетируют BEM-класс блока.
|
|
3
|
+
`.rt-counter-row` — сам хост (шаблон начинается с ng-container, класс ставит host). */
|
|
3
4
|
|
|
4
|
-
.rt-counter-row {
|
|
5
|
-
|
|
6
|
-
align-items: center;
|
|
7
|
-
justify-content: space-between;
|
|
8
|
-
padding: var(--rt-counter-row-padding-y) 0;
|
|
9
|
-
gap: var(--rt-counter-row-gap);
|
|
5
|
+
.rt-counter-row {
|
|
6
|
+
--rt-counter-row-border-width: var(--rt-border-width-thin);
|
|
10
7
|
|
|
11
|
-
// Линия разделяет соседние строки, а не обводит каждую: рамка на всех дала бы
|
|
12
|
-
// лишние границы сверху у первой и снизу у последней
|
|
13
|
-
&:not(:first-of-type) {
|
|
14
|
-
border-top: var(--rt-border-width-thin) solid var(--rt-counter-row-color-border);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
&__text {
|
|
18
8
|
display: flex;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
9
|
+
align-items: center;
|
|
10
|
+
justify-content: space-between;
|
|
11
|
+
padding: var(--rt-counter-row-padding-y) 0;
|
|
12
|
+
gap: var(--rt-counter-row-gap);
|
|
23
13
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
// Линия разделяет соседние строки, а не обводит каждую: рамка на всех дала бы
|
|
15
|
+
// лишние границы сверху у первой и снизу у последней
|
|
16
|
+
&:not(:first-of-type) {
|
|
17
|
+
border-top: var(--rt-counter-row-border-width) solid var(--rt-counter-row-color-border);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&__text {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: var(--rt-space-2xs);
|
|
24
|
+
text-align: start;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
&__label {
|
|
28
|
+
color: var(--rt-counter-row-label-color);
|
|
29
|
+
font-size: var(--rt-counter-row-label-font-size);
|
|
30
|
+
font-weight: var(--rt-font-weight-medium);
|
|
31
|
+
}
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
&__hint {
|
|
34
|
+
color: var(--rt-counter-row-hint-color);
|
|
35
|
+
font-size: var(--rt-counter-row-hint-font-size);
|
|
36
|
+
}
|
|
33
37
|
}
|
|
34
38
|
}
|