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