@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,40 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-copy-cell — ячейка с копированием в буфер.
|
|
3
|
+
ViewEncapsulation.None: классы глобальны, токены --rt-* наследуются.
|
|
4
|
+
Кнопка скрыта по умолчанию и проявляется при наведении/фокусе — чтобы не
|
|
5
|
+
зашумлять плотные таблицы. */
|
|
5
6
|
|
|
6
|
-
.rt-copy-cell {
|
|
7
|
-
|
|
8
|
-
min-width: 0;
|
|
9
|
-
align-items: center;
|
|
10
|
-
gap: var(--rt-space-xs);
|
|
7
|
+
.rt-copy-cell {
|
|
8
|
+
--rt-copy-cell-transition-duration: var(--rt-duration-fast);
|
|
11
9
|
|
|
12
|
-
|
|
10
|
+
display: inline-flex;
|
|
13
11
|
min-width: 0;
|
|
14
|
-
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: var(--rt-space-xs);
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
transition: opacity var(--rt-duration-fast) ease;
|
|
20
|
-
}
|
|
15
|
+
&__content {
|
|
16
|
+
min-width: 0;
|
|
17
|
+
}
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
&__button {
|
|
20
|
+
flex: 0 0 auto;
|
|
21
|
+
opacity: 0;
|
|
22
|
+
transition: opacity var(--rt-copy-cell-transition-duration) ease;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* Reveal при наведении/клавиатурном фокусе внутри самой ячейки — работает
|
|
26
|
+
и вне таблицы (карточки, асайды). */
|
|
27
|
+
&:hover &__button,
|
|
28
|
+
&:focus-within &__button {
|
|
29
|
+
opacity: 1;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/* revealOnHover=false — кнопка всегда видима (модалки/карточки без hover-строки). */
|
|
33
|
+
&--static &__button {
|
|
34
|
+
opacity: 1;
|
|
35
|
+
}
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
/*
|
|
30
|
-
|
|
38
|
+
/* Reveal при наведении/фокусе на всю строку rt-table — привычное поведение
|
|
39
|
+
таблиц: кнопка появляется, как только курсор над строкой. */
|
|
40
|
+
.rt-table tbody tr:hover .rt-copy-cell__button,
|
|
41
|
+
.rt-table tbody tr:focus-within .rt-copy-cell__button {
|
|
31
42
|
opacity: 1;
|
|
32
43
|
}
|
|
33
44
|
}
|
|
34
|
-
|
|
35
|
-
/* Reveal при наведении/фокусе на всю строку rt-table — привычное поведение
|
|
36
|
-
таблиц: кнопка появляется, как только курсор над строкой. */
|
|
37
|
-
.rt-table tbody tr:hover .rt-copy-cell__button,
|
|
38
|
-
.rt-table tbody tr:focus-within .rt-copy-cell__button {
|
|
39
|
-
opacity: 1;
|
|
40
|
-
}
|
|
@@ -1,312 +1,320 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
.rt-table {
|
|
5
|
-
position: relative;
|
|
6
|
-
display: table;
|
|
7
|
-
width: 100%;
|
|
8
|
-
background: var(--rt-color-bg-surface);
|
|
9
|
-
border-collapse: collapse;
|
|
10
|
-
color: var(--rt-color-text-primary);
|
|
11
|
-
|
|
12
|
-
.cdk-header-cell,
|
|
13
|
-
.cdk-cell,
|
|
14
|
-
&__skeleton-cell {
|
|
15
|
-
position: relative;
|
|
16
|
-
height: 50px;
|
|
17
|
-
padding: var(--rt-space-2) var(--rt-space-5);
|
|
18
|
-
border-bottom: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
|
|
19
|
-
|
|
20
|
-
/* Single-owner границы: каждую линию сетки рисует РОВНО одна ячейка —
|
|
21
|
-
вертикаль только левой гранью, горизонталь только нижней. Внутренние
|
|
22
|
-
линии не удваиваются, правого периметра нет вовсе, а левый гасим у
|
|
23
|
-
первой колонки ниже. Таблица упирается в края контейнера — боковые
|
|
24
|
-
рамки не нужны. */
|
|
25
|
-
border-left: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
|
|
26
|
-
font-size: var(--rt-text-sm);
|
|
27
|
-
font-weight: var(--rt-font-weight-medium);
|
|
28
|
-
text-align: start;
|
|
29
|
-
vertical-align: middle;
|
|
30
|
-
|
|
31
|
-
&[data-align='right'] {
|
|
32
|
-
text-align: right;
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-table — common/ui таблица поверх cdk-table. ViewEncapsulation.None:
|
|
3
|
+
классы доступны без scope-attrs, токены --rt-* наследуются. */
|
|
33
4
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
}
|
|
5
|
+
.rt-table {
|
|
6
|
+
--rt-table-border-width: var(--rt-border-width-thin);
|
|
7
|
+
--rt-table-card-radius: var(--rt-radius-md);
|
|
39
8
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
&__skeleton-cell:first-child {
|
|
44
|
-
border-left: none;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.cdk-header-cell {
|
|
48
|
-
/* Верхняя грань таблицы — только у шапки (низ даёт border-bottom строк). */
|
|
49
|
-
border-top: var(--rt-border-width-thin) solid var(--rt-color-border-subtle);
|
|
9
|
+
position: relative;
|
|
10
|
+
display: table;
|
|
11
|
+
width: 100%;
|
|
50
12
|
background: var(--rt-color-bg-surface);
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.cdk-cell {
|
|
13
|
+
border-collapse: collapse;
|
|
55
14
|
color: var(--rt-color-text-primary);
|
|
56
|
-
overflow-wrap: anywhere;
|
|
57
|
-
}
|
|
58
15
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
16
|
+
.cdk-header-cell,
|
|
17
|
+
.cdk-cell,
|
|
18
|
+
&__skeleton-cell {
|
|
19
|
+
position: relative;
|
|
20
|
+
height: 50px;
|
|
21
|
+
padding: var(--rt-space-2) var(--rt-space-5);
|
|
22
|
+
border-bottom: var(--rt-table-border-width) solid var(--rt-color-border-subtle);
|
|
23
|
+
|
|
24
|
+
/* Single-owner границы: каждую линию сетки рисует РОВНО одна ячейка —
|
|
25
|
+
вертикаль только левой гранью, горизонталь только нижней. Внутренние
|
|
26
|
+
линии не удваиваются, правого периметра нет вовсе, а левый гасим у
|
|
27
|
+
первой колонки ниже. Таблица упирается в края контейнера — боковые
|
|
28
|
+
рамки не нужны. */
|
|
29
|
+
border-left: var(--rt-table-border-width) solid var(--rt-color-border-subtle);
|
|
30
|
+
font-size: var(--rt-text-sm);
|
|
31
|
+
font-weight: var(--rt-font-weight-medium);
|
|
32
|
+
text-align: start;
|
|
33
|
+
vertical-align: middle;
|
|
34
|
+
|
|
35
|
+
&[data-align='right'] {
|
|
36
|
+
text-align: right;
|
|
69
37
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
padding: 0;
|
|
76
|
-
border: none;
|
|
77
|
-
background: transparent;
|
|
78
|
-
}
|
|
38
|
+
input {
|
|
39
|
+
text-align: right;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
79
43
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
44
|
+
/* Левый периметр не рисуем — первая колонка без левой грани. */
|
|
45
|
+
.cdk-header-cell:first-child,
|
|
46
|
+
.cdk-cell:first-child,
|
|
47
|
+
&__skeleton-cell:first-child {
|
|
48
|
+
border-left: none;
|
|
49
|
+
}
|
|
86
50
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
51
|
+
.cdk-header-cell {
|
|
52
|
+
/* Верхняя грань таблицы — только у шапки (низ даёт border-bottom строк). */
|
|
53
|
+
border-top: var(--rt-table-border-width) solid var(--rt-color-border-subtle);
|
|
54
|
+
background: var(--rt-color-bg-surface);
|
|
55
|
+
color: var(--rt-color-text-muted);
|
|
56
|
+
}
|
|
91
57
|
|
|
92
|
-
|
|
93
|
-
|
|
58
|
+
.cdk-cell {
|
|
59
|
+
color: var(--rt-color-text-primary);
|
|
60
|
+
overflow-wrap: anywhere;
|
|
61
|
+
}
|
|
94
62
|
|
|
95
|
-
|
|
96
|
-
|
|
63
|
+
/* «…»-действия строки ([showRowActions]) — НЕ отдельная видимая колонка.
|
|
64
|
+
Ячейка нулевой ширины, sticky к правому краю scroll-контейнера
|
|
65
|
+
(rtElem="table-scroll", overflow-x), без border/padding. Плавающая кнопка
|
|
66
|
+
не занимает места в раскладке — поэтому горизонтальный скролл не уводит её
|
|
67
|
+
из вьюпорта. Компаунд с .cdk-cell держит специфичность выше базовой ячейки. */
|
|
68
|
+
&__actions-header.cdk-header-cell {
|
|
69
|
+
width: 0;
|
|
70
|
+
padding: 0;
|
|
71
|
+
border: none;
|
|
97
72
|
}
|
|
98
|
-
}
|
|
99
73
|
|
|
100
|
-
/* Hover-reveal: по умолчанию кнопка скрыта, появляется при наведении/фокусе
|
|
101
|
-
строки или пока её меню открыто (:has(.rt-menu--open) — переживает уход
|
|
102
|
-
hover'а на overlay-панель). Скрытие — только на hover-устройствах: на тач
|
|
103
|
-
(hover: none) правило не применяется и кнопка видна всегда. */
|
|
104
|
-
@media (hover: hover) {
|
|
105
74
|
&__actions-cell.cdk-cell {
|
|
106
|
-
|
|
75
|
+
position: sticky;
|
|
76
|
+
z-index: 1;
|
|
77
|
+
right: 0;
|
|
78
|
+
width: 0;
|
|
79
|
+
padding: 0;
|
|
80
|
+
border: none;
|
|
81
|
+
background: transparent;
|
|
107
82
|
}
|
|
108
83
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
84
|
+
&__actions-float {
|
|
85
|
+
position: absolute;
|
|
86
|
+
display: flex;
|
|
87
|
+
height: 100%;
|
|
88
|
+
align-items: center;
|
|
89
|
+
padding: 0 var(--rt-space-2) 0 var(--rt-space-8);
|
|
90
|
+
|
|
91
|
+
/* Содержимое последней ячейки «утопает» под кнопкой; кнопка видна только
|
|
92
|
+
на hover строки, поэтому фон градиента — hover-цвет строки. */
|
|
93
|
+
background: linear-gradient(to right, transparent 0%, var(--rt-color-bg-hover) 45%);
|
|
94
|
+
inset: 0 0 0 auto;
|
|
95
|
+
|
|
96
|
+
/* Прозрачная зона пропускает клики на строку; интерактивна только кнопка. */
|
|
97
|
+
pointer-events: none;
|
|
115
98
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
99
|
+
.rt-menu {
|
|
100
|
+
pointer-events: auto;
|
|
101
|
+
}
|
|
119
102
|
}
|
|
120
103
|
|
|
121
|
-
/*
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
104
|
+
/* Hover-reveal: по умолчанию кнопка скрыта, появляется при наведении/фокусе
|
|
105
|
+
строки или пока её меню открыто (:has(.rt-menu--open) — переживает уход
|
|
106
|
+
hover'а на overlay-панель). Скрытие — только на hover-устройствах: на тач
|
|
107
|
+
(hover: none) правило не применяется и кнопка видна всегда. */
|
|
108
|
+
@media (hover: hover) {
|
|
109
|
+
&__actions-cell.cdk-cell {
|
|
110
|
+
visibility: hidden;
|
|
111
|
+
}
|
|
126
112
|
|
|
127
|
-
|
|
128
|
-
|
|
113
|
+
.cdk-row:hover &__actions-cell.cdk-cell,
|
|
114
|
+
.cdk-row:focus-within &__actions-cell.cdk-cell,
|
|
115
|
+
&__actions-cell.cdk-cell:has(.rt-menu--open) {
|
|
116
|
+
visibility: visible;
|
|
129
117
|
}
|
|
130
118
|
}
|
|
131
|
-
}
|
|
132
119
|
|
|
133
|
-
/* Строки-ссылки: курсор + focus-ring. Активацию (click/Enter/Space) и
|
|
134
|
-
table-семантику обеспечивает директива rtTableRow на самой строке. */
|
|
135
|
-
&--clickable {
|
|
136
120
|
.cdk-row {
|
|
137
|
-
|
|
121
|
+
&:hover {
|
|
122
|
+
background: var(--rt-color-bg-hover);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Опт-ин подсветка проблемной строки (просрочка и т.п.): потребитель
|
|
126
|
+
вешает класс `rt-table__row--danger` на строку. Составной селектор с
|
|
127
|
+
`.cdk-row` нужен, чтобы danger-фон держался и при :hover. */
|
|
128
|
+
&.rt-table__row--danger {
|
|
129
|
+
background: var(--rt-color-state-danger-bg);
|
|
138
130
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
131
|
+
&:hover {
|
|
132
|
+
background: var(--rt-color-state-danger-bg);
|
|
133
|
+
}
|
|
142
134
|
}
|
|
143
135
|
}
|
|
144
|
-
}
|
|
145
136
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
137
|
+
/* Строки-ссылки: курсор + focus-ring. Активацию (click/Enter/Space) и
|
|
138
|
+
table-семантику обеспечивает директива rtTableRow на самой строке. */
|
|
139
|
+
&--clickable {
|
|
140
|
+
.cdk-row {
|
|
141
|
+
cursor: pointer;
|
|
149
142
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
padding: var(--rt-space-xs) var(--rt-space-sm);
|
|
143
|
+
&:focus-visible {
|
|
144
|
+
outline: 2px solid var(--rt-color-action-primary);
|
|
145
|
+
outline-offset: -2px;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
156
148
|
}
|
|
157
|
-
}
|
|
158
149
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
height: 14px;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
&__empty-row {
|
|
166
|
-
display: table-row;
|
|
167
|
-
}
|
|
150
|
+
a {
|
|
151
|
+
text-decoration: none;
|
|
152
|
+
}
|
|
168
153
|
|
|
169
|
-
|
|
170
|
-
|
|
154
|
+
&--density--compact {
|
|
155
|
+
.cdk-header-cell,
|
|
156
|
+
.cdk-cell,
|
|
157
|
+
.rt-table__skeleton-cell {
|
|
158
|
+
height: 36px;
|
|
159
|
+
padding: var(--rt-space-xs) var(--rt-space-sm);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
171
162
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
text-align: center;
|
|
178
|
-
}
|
|
163
|
+
&__skeleton-bar {
|
|
164
|
+
display: block;
|
|
165
|
+
width: 80%;
|
|
166
|
+
height: 14px;
|
|
167
|
+
}
|
|
179
168
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
}
|
|
169
|
+
&__empty-row {
|
|
170
|
+
display: table-row;
|
|
171
|
+
}
|
|
184
172
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
z-index: 1;
|
|
188
|
-
display: grid;
|
|
189
|
-
min-height: 100%;
|
|
190
|
-
inset: 0;
|
|
191
|
-
place-items: center;
|
|
192
|
-
pointer-events: none;
|
|
193
|
-
}
|
|
173
|
+
&__empty {
|
|
174
|
+
padding: var(--rt-space-6) var(--rt-space-5);
|
|
194
175
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
176
|
+
/* Только нижняя грань — как у строк: верхнюю даёт border-bottom шапки
|
|
177
|
+
(иначе двойная линия), боковые не рисуем (нет периметра). */
|
|
178
|
+
border-bottom: var(--rt-table-border-width) solid var(--rt-color-border-subtle);
|
|
179
|
+
background: var(--rt-color-bg-surface);
|
|
180
|
+
color: var(--rt-color-text-muted);
|
|
181
|
+
text-align: center;
|
|
182
|
+
}
|
|
201
183
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
display: flex;
|
|
207
|
-
align-items: center;
|
|
208
|
-
justify-content: center;
|
|
209
|
-
transform: translateY(-50%);
|
|
210
|
-
}
|
|
184
|
+
&__empty-message {
|
|
185
|
+
margin: 0;
|
|
186
|
+
font-size: var(--rt-text-sm);
|
|
187
|
+
}
|
|
211
188
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
189
|
+
&__overlay {
|
|
190
|
+
position: absolute;
|
|
191
|
+
z-index: 1;
|
|
192
|
+
display: grid;
|
|
193
|
+
min-height: 100%;
|
|
194
|
+
inset: 0;
|
|
195
|
+
place-items: center;
|
|
196
|
+
pointer-events: none;
|
|
197
|
+
}
|
|
218
198
|
|
|
219
|
-
|
|
220
|
-
|
|
199
|
+
&__overlay-backdrop {
|
|
200
|
+
position: absolute;
|
|
201
|
+
background: var(--rt-color-bg-surface);
|
|
202
|
+
inset: 0;
|
|
203
|
+
opacity: 0.72;
|
|
204
|
+
}
|
|
221
205
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
206
|
+
&__overlay-spinner {
|
|
207
|
+
position: sticky;
|
|
208
|
+
z-index: 1;
|
|
209
|
+
top: 50%;
|
|
210
|
+
display: flex;
|
|
211
|
+
align-items: center;
|
|
212
|
+
justify-content: center;
|
|
213
|
+
transform: translateY(-50%);
|
|
214
|
+
}
|
|
228
215
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
216
|
+
/* Мобильный card-режим (≤1080px, host-модификатор --cards): хост перестаёт
|
|
217
|
+
быть таблицей, CDK-строки скрываются, вместо них — вертикальный список
|
|
218
|
+
карточек. Карточки в DOM только при narrow (гейт @if в шаблоне). */
|
|
219
|
+
&__cards {
|
|
233
220
|
display: none;
|
|
234
221
|
}
|
|
235
222
|
|
|
236
|
-
|
|
223
|
+
&--cards {
|
|
224
|
+
display: block;
|
|
225
|
+
|
|
226
|
+
/* Потребители часто форсят ширину таблицы под горизонтальный скролл
|
|
227
|
+
(`min-width: max-content` на элементе таблицы). В карточном виде это уводит
|
|
228
|
+
карточки за вьюпорт, и раньше кит настаивал на своём восклицательным знаком.
|
|
229
|
+
Теперь последнее слово за приложением: слой каскада отдаёт победу его
|
|
230
|
+
правилу, и правило кита, спорящее с ним важностью, этому противоречит.
|
|
231
|
+
Приложению, которому нужен и горизонтальный скролл, и карточный вид,
|
|
232
|
+
остаётся сузить свой селектор до широкого экрана. */
|
|
233
|
+
min-width: 0;
|
|
234
|
+
max-width: 100%;
|
|
235
|
+
|
|
236
|
+
.cdk-header-row,
|
|
237
|
+
.cdk-row,
|
|
238
|
+
.rt-table__skeleton-row,
|
|
239
|
+
.rt-table__empty-row {
|
|
240
|
+
display: none;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.rt-table__cards {
|
|
244
|
+
display: flex;
|
|
245
|
+
flex-direction: column;
|
|
246
|
+
gap: var(--rt-space-sm);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
&__card {
|
|
237
251
|
display: flex;
|
|
238
252
|
flex-direction: column;
|
|
239
|
-
|
|
253
|
+
padding: var(--rt-space-md);
|
|
254
|
+
border: var(--rt-table-border-width) solid var(--rt-color-border-default);
|
|
255
|
+
border-radius: var(--rt-table-card-radius);
|
|
256
|
+
background: var(--rt-color-bg-surface);
|
|
257
|
+
gap: var(--rt-space-xs);
|
|
240
258
|
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
&__card {
|
|
244
|
-
display: flex;
|
|
245
|
-
flex-direction: column;
|
|
246
|
-
padding: var(--rt-space-md);
|
|
247
|
-
border: var(--rt-border-width-thin) solid var(--rt-color-border-default);
|
|
248
|
-
border-radius: var(--rt-radius-md);
|
|
249
|
-
background: var(--rt-color-bg-surface);
|
|
250
|
-
gap: var(--rt-space-xs);
|
|
251
|
-
}
|
|
252
259
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
260
|
+
&__card-field {
|
|
261
|
+
display: flex;
|
|
262
|
+
align-items: baseline;
|
|
263
|
+
justify-content: space-between;
|
|
264
|
+
gap: var(--rt-space-md);
|
|
265
|
+
}
|
|
259
266
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
267
|
+
&__card-label {
|
|
268
|
+
flex: 0 0 auto;
|
|
269
|
+
color: var(--rt-color-text-muted);
|
|
270
|
+
font-size: var(--rt-text-sm);
|
|
271
|
+
}
|
|
265
272
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
273
|
+
&__card-value {
|
|
274
|
+
min-width: 0;
|
|
275
|
+
overflow-wrap: anywhere;
|
|
276
|
+
text-align: right;
|
|
270
277
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
278
|
+
/* Cell-шаблон колонки — это `<td cdk-cell>` целиком; вне таблицы он тащит
|
|
279
|
+
табличные стили (height 50px, border, padding, inline min-width под
|
|
280
|
+
горизонтальный скролл). Гасим их, чтобы значение вело себя как inline-текст. */
|
|
281
|
+
.cdk-cell {
|
|
282
|
+
display: inline;
|
|
283
|
+
height: auto;
|
|
284
|
+
padding: 0;
|
|
285
|
+
border: none;
|
|
286
|
+
font: inherit;
|
|
287
|
+
min-inline-size: 0;
|
|
288
|
+
text-align: inherit;
|
|
289
|
+
}
|
|
282
290
|
}
|
|
283
|
-
}
|
|
284
291
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
292
|
+
&__card-actions {
|
|
293
|
+
display: flex;
|
|
294
|
+
justify-content: flex-end;
|
|
295
|
+
}
|
|
289
296
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
297
|
+
&__card-skeleton-bar {
|
|
298
|
+
display: block;
|
|
299
|
+
width: 60%;
|
|
300
|
+
height: 14px;
|
|
294
301
|
|
|
295
|
-
|
|
296
|
-
|
|
302
|
+
&:first-child {
|
|
303
|
+
width: 80%;
|
|
304
|
+
}
|
|
297
305
|
}
|
|
298
306
|
}
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
/* В тёмной теме таблица сливается с фоном контента (bg-page), а не поднимается
|
|
302
|
-
на bg-surface — иначе список выпирает более светлой плитой над страницей. */
|
|
303
|
-
:root[data-theme='dark'] .rt-table,
|
|
304
|
-
html.rt-theme-dark .rt-table {
|
|
305
|
-
background: var(--rt-color-bg-page);
|
|
306
307
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
.rt-
|
|
308
|
+
/* В тёмной теме таблица сливается с фоном контента (bg-page), а не поднимается
|
|
309
|
+
на bg-surface — иначе список выпирает более светлой плитой над страницей. */
|
|
310
|
+
:root[data-theme='dark'] .rt-table,
|
|
311
|
+
html.rt-theme-dark .rt-table {
|
|
310
312
|
background: var(--rt-color-bg-page);
|
|
313
|
+
|
|
314
|
+
.cdk-header-cell,
|
|
315
|
+
.rt-table__empty,
|
|
316
|
+
.rt-table__overlay-backdrop {
|
|
317
|
+
background: var(--rt-color-bg-page);
|
|
318
|
+
}
|
|
311
319
|
}
|
|
312
320
|
}
|