@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,8 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-file-list — ViewEncapsulation.None, плоский `.rt-file-list`.
|
|
3
|
+
Host-класс ставится через @Component host:{class}. */
|
|
4
|
+
.rt-file-list {
|
|
5
|
+
display: flex;
|
|
6
|
+
width: 100%;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--rt-space-sm);
|
|
9
|
+
}
|
|
8
10
|
}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
.rt-filter-control {
|
|
3
|
+
display: inline-flex;
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
// узкий экран: контрол — компактный select с капом --rt-input-max-width
|
|
6
|
+
// (как строка поиска). В ряду тулбара (768–1080px) ширина по контенту.
|
|
7
|
+
@media (width <= 1080px) {
|
|
8
|
+
display: block;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
.rt-select {
|
|
11
|
+
inline-size: 100%;
|
|
12
|
+
max-inline-size: var(--rt-input-max-width);
|
|
13
|
+
}
|
|
12
14
|
}
|
|
13
|
-
}
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
// стекнутый тулбар (≤768px): host занимает всю ширину столбца, select
|
|
17
|
+
// вытягивается ровно как строка поиска (width:100% до --rt-input-max-width).
|
|
18
|
+
@media (width <= 768px) {
|
|
19
|
+
inline-size: 100%;
|
|
20
|
+
}
|
|
19
21
|
}
|
|
20
22
|
}
|
|
@@ -1,67 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
border-bottom-left-radius: var(--rt-radius-lg);
|
|
7
|
-
border-bottom-right-radius: var(--rt-radius-lg);
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
.rt-header {
|
|
3
|
+
--rt-header-radius: var(--rt-radius-lg);
|
|
4
|
+
--rt-header-shadow: var(--rt-shadow-card-soft);
|
|
5
|
+
--rt-header-back-transition-duration: var(--rt-duration-base);
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
display: block;
|
|
8
|
+
height: 45px;
|
|
9
|
+
padding: 0 var(--rt-space-5);
|
|
10
|
+
background: var(--rt-color-bg-surface);
|
|
11
|
+
border-bottom-left-radius: var(--rt-header-radius);
|
|
12
|
+
border-bottom-right-radius: var(--rt-header-radius);
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
// Мягкая тень (тот же токен, что у карточек) отделяет хедер от контента —
|
|
15
|
+
// в тёмной теме фон хедера и страницы почти совпадают и сливались.
|
|
16
|
+
box-shadow: var(--rt-header-shadow);
|
|
17
|
+
color: var(--rt-color-text-primary);
|
|
18
|
+
|
|
19
|
+
&__content {
|
|
20
|
+
display: flex;
|
|
21
|
+
width: 100%;
|
|
22
|
+
max-width: var(--rt-header-content-max-width, 100%);
|
|
23
|
+
height: 100%;
|
|
24
|
+
align-items: center;
|
|
25
|
+
margin: 0 auto;
|
|
26
|
+
gap: 0;
|
|
27
|
+
}
|
|
23
28
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
&__back {
|
|
30
|
+
display: inline-flex;
|
|
31
|
+
overflow: hidden;
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
/* Hidden state по умолчанию — slot полностью схлопнут (нулевая ширина),
|
|
34
|
+
Контент скрыт через opacity + сдвиг влево; pointer-events:none снимает hit-target. */
|
|
35
|
+
width: 0;
|
|
36
|
+
height: 45px;
|
|
37
|
+
align-items: center;
|
|
38
|
+
justify-content: flex-start;
|
|
39
|
+
opacity: 0;
|
|
40
|
+
pointer-events: none;
|
|
41
|
+
transform: translateX(-8px);
|
|
42
|
+
transition:
|
|
43
|
+
width var(--rt-header-back-transition-duration) cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
44
|
+
opacity var(--rt-header-back-transition-duration) ease-out,
|
|
45
|
+
transform var(--rt-header-back-transition-duration) cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
41
46
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
+
&--visible {
|
|
48
|
+
width: 35px;
|
|
49
|
+
opacity: 1;
|
|
50
|
+
pointer-events: auto;
|
|
51
|
+
transform: translateX(0);
|
|
52
|
+
}
|
|
47
53
|
}
|
|
48
|
-
}
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
&__logo {
|
|
56
|
+
display: flex;
|
|
57
|
+
min-width: 0;
|
|
58
|
+
flex: 1 0 0;
|
|
59
|
+
align-items: center;
|
|
60
|
+
}
|
|
55
61
|
}
|
|
56
|
-
}
|
|
57
62
|
|
|
58
|
-
/* dark override:
|
|
59
|
-
[data-theme='dark'] .rt-header {
|
|
60
|
-
|
|
61
|
-
}
|
|
63
|
+
/* dark override: подложка обвязки — своё назначение, а не ступень шкалы. */
|
|
64
|
+
[data-theme='dark'] .rt-header {
|
|
65
|
+
background: var(--rt-color-bg-nav);
|
|
66
|
+
}
|
|
62
67
|
|
|
63
|
-
@media (prefers-reduced-motion: reduce) {
|
|
64
|
-
|
|
65
|
-
|
|
68
|
+
@media (prefers-reduced-motion: reduce) {
|
|
69
|
+
.rt-header__back {
|
|
70
|
+
transition: none;
|
|
71
|
+
}
|
|
66
72
|
}
|
|
67
73
|
}
|
|
@@ -16,12 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
## Главное, что нужно знать
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
внутри
|
|
21
|
-
|
|
19
|
+
**Значок едет по требованию.** Компонент рисует `<use href="#rt-icon-<name>">` — ссылку на
|
|
20
|
+
symbol внутри спрайта — и тем же движением просит имя у `RtIconRegistry`. Реестр ходит за файлом
|
|
21
|
+
один раз на страницу и дописывает символ в спрайт; страница платит ровно за те значки, которые
|
|
22
|
+
нарисовала, а не за весь набор.
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
`provideRtIcons()` называет адрес набора и сам не грузит ничего. Без него реестр берёт умолчание
|
|
25
|
+
`/icons`; приложение обязано опубликовать туда набор из `assets/icons` пакета, иначе разметка
|
|
26
|
+
верна, а на экране пусто.
|
|
25
27
|
|
|
26
28
|
## Как этим пользоваться
|
|
27
29
|
|
|
@@ -34,11 +36,15 @@
|
|
|
34
36
|
|
|
35
37
|
## Края
|
|
36
38
|
|
|
37
|
-
- **Имя без файла
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
-
|
|
39
|
+
- **Имя без файла гасит только свой значок.** Отказ остаётся внутри реестра, соседние значки
|
|
40
|
+
приезжают своими потоками, и на месте промаха остаётся пустое место размера значка. Второй раз
|
|
41
|
+
за отказавшим именем реестр не ходит. Добавляя имя в `rt-icon-names.ts`, положи SVG рядом:
|
|
42
|
+
иначе промах виден только глазами.
|
|
43
|
+
- **Значок появляется после первой отрисовки.** Место под него занято сразу — размер задан на
|
|
44
|
+
хосте, — поэтому приход символа соседей не двигает.
|
|
45
|
+
- Символ, уже лежащий в спрайте страницы, запроса не даёт: так витрина не ходит за одним и тем
|
|
46
|
+
же между историями, а приложение вправе положить свой спрайт до старта.
|
|
47
|
+
- На сервере (SSR) реестр молчит: относительных HTTP-запросов к статике там нет, значки
|
|
42
48
|
дорисуются после гидрации.
|
|
43
49
|
|
|
44
50
|
## Рядом
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-icon — правила компонента (ViewEncapsulation.None).
|
|
3
|
+
Селектор bare `.rt-icon` (класс на host) — им же адресуются и программные
|
|
4
|
+
потребители sprite'а, рисующие иконку без компонента. */
|
|
5
|
+
.rt-icon {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
flex-shrink: 0;
|
|
8
|
+
line-height: 0;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
svg {
|
|
11
|
+
display: block;
|
|
12
|
+
width: 100%;
|
|
13
|
+
height: 100%;
|
|
14
|
+
fill: currentcolor;
|
|
15
|
+
}
|
|
14
16
|
}
|
|
15
17
|
}
|
|
@@ -30,8 +30,10 @@
|
|
|
30
30
|
**Кнопку компонент рисует внутри себя**, host остаётся обычным элементом. Диаметр держит
|
|
31
31
|
свойство `--rt-icon-button-size`, и объявляет его модификатор размера на самой кнопке —
|
|
32
32
|
поэтому ни класс на host-е, ни инлайн-стиль на нём диаметра не меняют: собственное
|
|
33
|
-
объявление элемента бьёт унаследованное.
|
|
34
|
-
|
|
33
|
+
объявление элемента бьёт унаследованное. Диаметр берётся из общей шкалы высот контролов, а не
|
|
34
|
+
своим рядом: иконочная кнопка стоит в строке рядом с кнопкой и полем и обязана совпадать с ними
|
|
35
|
+
по высоте. Ступени — `sm`, `md`, `lg`, `xl`, `2xl`; значения держит шкала, и здесь они не
|
|
36
|
+
повторяются.
|
|
35
37
|
|
|
36
38
|
## Как этим пользоваться
|
|
37
39
|
|
|
@@ -1,152 +1,168 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
@layer rt-kit.components {
|
|
2
|
+
/* rt-icon-button — иконочная кнопка в common/ui. ViewEncapsulation.None.
|
|
3
|
+
Хост адресуется по имени элемента, а не по классу блока: класс `.rt-icon-button` висит
|
|
4
|
+
и на `<rt-icon-button>`, и на корне шаблона, поэтому правила блока вложены в хост —
|
|
5
|
+
так они достаются только корню шаблона. */
|
|
5
6
|
|
|
6
|
-
rt-icon-button {
|
|
7
|
-
display: inline-flex;
|
|
8
|
-
|
|
9
|
-
/* Дефолт = md; перезаписывается модификаторами sm/lg ниже либо inline стилем потребителя */
|
|
10
|
-
--rt-icon-button-size: 36px;
|
|
11
|
-
|
|
12
|
-
.rt-icon-button {
|
|
13
|
-
position: relative;
|
|
7
|
+
rt-icon-button {
|
|
14
8
|
display: inline-flex;
|
|
15
|
-
width: var(--rt-icon-button-size);
|
|
16
|
-
height: var(--rt-icon-button-size);
|
|
17
|
-
align-items: center;
|
|
18
|
-
justify-content: center;
|
|
19
|
-
padding: 0;
|
|
20
|
-
border: 0;
|
|
21
|
-
background: transparent;
|
|
22
|
-
color: var(--rt-icon-button-color, var(--rt-color-text-primary));
|
|
23
|
-
cursor: pointer;
|
|
24
|
-
transition: background-color var(--rt-duration-fast) ease;
|
|
25
|
-
|
|
26
|
-
&--sm {
|
|
27
|
-
--rt-icon-button-size: 28px;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
&--md {
|
|
31
|
-
--rt-icon-button-size: 36px;
|
|
32
|
-
}
|
|
33
9
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
10
|
+
/* Дефолт = md; перезаписывается модификаторами sm/lg ниже либо inline стилем потребителя.
|
|
11
|
+
Ряд берётся из общей шкалы высот контролов: иконочная кнопка стоит в строке
|
|
12
|
+
рядом с кнопкой и полем и обязана совпадать с ними по высоте. */
|
|
13
|
+
--rt-icon-button-size: var(--rt-control-height-md);
|
|
14
|
+
|
|
15
|
+
/* Цвет иконки объявлен здесь, а не приходил бы запасным значением на месте
|
|
16
|
+
обращения: запасное переживает смену темы — переопределять нечего. Своё
|
|
17
|
+
свойство блока перебивает тот, кому нужен другой цвет: так делает просмотр
|
|
18
|
+
фотографии, где кнопка стоит на снимке. */
|
|
19
|
+
--rt-icon-button-color: var(--rt-color-text-primary);
|
|
20
|
+
|
|
21
|
+
.rt-icon-button {
|
|
22
|
+
--rt-icon-button-circle-radius: var(--rt-radius-full);
|
|
23
|
+
--rt-icon-button-square-radius: var(--rt-radius-md);
|
|
24
|
+
--rt-icon-button-indicator-radius: var(--rt-radius-full);
|
|
25
|
+
--rt-icon-button-focus-shadow: var(--rt-shadow-focus-ring);
|
|
26
|
+
--rt-icon-button-transition-duration: var(--rt-duration-fast);
|
|
27
|
+
|
|
28
|
+
position: relative;
|
|
29
|
+
display: inline-flex;
|
|
30
|
+
width: var(--rt-icon-button-size);
|
|
31
|
+
height: var(--rt-icon-button-size);
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
padding: 0;
|
|
35
|
+
border: 0;
|
|
36
|
+
background: transparent;
|
|
37
|
+
color: var(--rt-icon-button-color);
|
|
38
|
+
cursor: pointer;
|
|
39
|
+
transition: background-color var(--rt-icon-button-transition-duration) ease;
|
|
40
|
+
|
|
41
|
+
&--sm {
|
|
42
|
+
--rt-icon-button-size: var(--rt-control-height-sm);
|
|
43
|
+
}
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
45
|
+
&--md {
|
|
46
|
+
--rt-icon-button-size: var(--rt-control-height-md);
|
|
47
|
+
}
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
&--lg {
|
|
50
|
+
--rt-icon-button-size: var(--rt-control-height-lg);
|
|
51
|
+
}
|
|
45
52
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
53
|
+
&--xl {
|
|
54
|
+
--rt-icon-button-size: var(--rt-control-height-xl);
|
|
55
|
+
}
|
|
49
56
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
57
|
+
&--2xl {
|
|
58
|
+
--rt-icon-button-size: var(--rt-control-height-2xl);
|
|
59
|
+
}
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
background-color: var(--rt-icon-button-color-bg-hover);
|
|
61
|
+
&--circle {
|
|
62
|
+
border-radius: var(--rt-icon-button-circle-radius);
|
|
57
63
|
}
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
&--square {
|
|
66
|
+
border-radius: var(--rt-icon-button-square-radius);
|
|
61
67
|
}
|
|
62
|
-
}
|
|
63
68
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
69
|
+
&--ghost {
|
|
70
|
+
&:hover:not(:disabled) {
|
|
71
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
72
|
+
}
|
|
67
73
|
|
|
68
|
-
|
|
69
|
-
|
|
74
|
+
&.rt-icon-button--active {
|
|
75
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
76
|
+
}
|
|
70
77
|
}
|
|
71
|
-
}
|
|
72
78
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
&--primary {
|
|
80
|
+
background-color: var(--rt-color-action-primary);
|
|
81
|
+
color: var(--rt-color-action-on-primary);
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
&:hover:not(:disabled) {
|
|
84
|
+
background-color: var(--rt-color-action-primary-hover);
|
|
85
|
+
}
|
|
79
86
|
}
|
|
80
|
-
}
|
|
81
87
|
|
|
82
|
-
|
|
83
|
-
|
|
88
|
+
&--secondary {
|
|
89
|
+
background-color: var(--rt-color-bg-surface-subtle);
|
|
90
|
+
color: var(--rt-color-text-primary);
|
|
84
91
|
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
&:hover:not(:disabled) {
|
|
93
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
94
|
+
}
|
|
87
95
|
}
|
|
88
96
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}
|
|
97
|
+
&--danger {
|
|
98
|
+
color: var(--rt-color-state-danger);
|
|
93
99
|
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
&:hover:not(:disabled) {
|
|
101
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
102
|
+
}
|
|
96
103
|
|
|
97
|
-
|
|
98
|
-
|
|
104
|
+
&.rt-icon-button--active {
|
|
105
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
106
|
+
}
|
|
99
107
|
}
|
|
100
108
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
}
|
|
109
|
+
&--success {
|
|
110
|
+
color: var(--rt-color-state-success);
|
|
105
111
|
|
|
106
|
-
|
|
107
|
-
|
|
112
|
+
&:hover:not(:disabled) {
|
|
113
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
114
|
+
}
|
|
108
115
|
|
|
109
|
-
|
|
110
|
-
|
|
116
|
+
&.rt-icon-button--active {
|
|
117
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
118
|
+
}
|
|
111
119
|
}
|
|
112
120
|
|
|
113
|
-
|
|
114
|
-
|
|
121
|
+
&--warning {
|
|
122
|
+
color: var(--rt-color-state-warning);
|
|
123
|
+
|
|
124
|
+
&:hover:not(:disabled) {
|
|
125
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
&.rt-icon-button--active {
|
|
129
|
+
background-color: var(--rt-icon-button-color-bg-hover);
|
|
130
|
+
}
|
|
115
131
|
}
|
|
116
|
-
}
|
|
117
132
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
133
|
+
&:disabled {
|
|
134
|
+
cursor: not-allowed;
|
|
135
|
+
opacity: 0.5;
|
|
136
|
+
}
|
|
122
137
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
138
|
+
&:focus-visible {
|
|
139
|
+
box-shadow: var(--rt-icon-button-focus-shadow);
|
|
140
|
+
outline: 2px solid transparent;
|
|
141
|
+
outline-offset: 2px;
|
|
142
|
+
}
|
|
128
143
|
|
|
129
|
-
|
|
130
|
-
|
|
144
|
+
&__spinner {
|
|
145
|
+
--rt-icon-button-spin-duration: 1s;
|
|
131
146
|
|
|
132
|
-
|
|
133
|
-
|
|
147
|
+
animation: rt-icon-button-spin var(--rt-icon-button-spin-duration) linear infinite;
|
|
148
|
+
}
|
|
134
149
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
150
|
+
&__indicator {
|
|
151
|
+
position: absolute;
|
|
152
|
+
width: 8px;
|
|
153
|
+
height: 8px;
|
|
154
|
+
border-radius: var(--rt-icon-button-indicator-radius);
|
|
155
|
+
background: var(--rt-color-state-danger);
|
|
156
|
+
inset-block-start: -2px;
|
|
157
|
+
inset-inline-end: -2px;
|
|
158
|
+
pointer-events: none;
|
|
159
|
+
}
|
|
144
160
|
}
|
|
145
161
|
}
|
|
146
|
-
}
|
|
147
162
|
|
|
148
|
-
@keyframes rt-icon-button-spin {
|
|
149
|
-
|
|
150
|
-
|
|
163
|
+
@keyframes rt-icon-button-spin {
|
|
164
|
+
to {
|
|
165
|
+
transform: rotate(360deg);
|
|
166
|
+
}
|
|
151
167
|
}
|
|
152
168
|
}
|
|
@@ -1,46 +1,48 @@
|
|
|
1
1
|
@use '../../../styles/mixins' as kv;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
@layer rt-kit.components {
|
|
4
|
+
.rt-info-item {
|
|
5
|
+
@include kv.surface-card;
|
|
5
6
|
|
|
6
|
-
display: flex;
|
|
7
|
-
min-width: 0;
|
|
8
|
-
flex-direction: column;
|
|
9
|
-
margin: 0;
|
|
10
|
-
gap: var(--rt-space-0-5);
|
|
11
|
-
|
|
12
|
-
&--grow {
|
|
13
|
-
flex: 1 0 0;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
&__label {
|
|
17
|
-
margin: 0;
|
|
18
|
-
color: var(--rt-color-text-primary);
|
|
19
|
-
font-size: var(--rt-text-xs);
|
|
20
|
-
font-weight: var(--rt-font-weight-regular);
|
|
21
|
-
letter-spacing: var(--rt-letter-spacing-wide);
|
|
22
|
-
line-height: var(--rt-leading-snug);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
&__value {
|
|
26
7
|
display: flex;
|
|
27
|
-
|
|
28
|
-
|
|
8
|
+
min-width: 0;
|
|
9
|
+
flex-direction: column;
|
|
29
10
|
margin: 0;
|
|
30
|
-
color: var(--rt-color-text-primary);
|
|
31
|
-
font-size: var(--rt-text-sm);
|
|
32
|
-
font-weight: var(--rt-font-weight-bold);
|
|
33
11
|
gap: var(--rt-space-0-5);
|
|
34
|
-
letter-spacing: var(--rt-letter-spacing-wide);
|
|
35
|
-
line-height: var(--rt-leading-snug);
|
|
36
|
-
overflow-wrap: anywhere;
|
|
37
|
-
}
|
|
38
12
|
|
|
39
|
-
|
|
40
|
-
|
|
13
|
+
&--grow {
|
|
14
|
+
flex: 1 0 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
&__label {
|
|
18
|
+
margin: 0;
|
|
19
|
+
color: var(--rt-color-text-primary);
|
|
20
|
+
font-size: var(--rt-text-xs);
|
|
21
|
+
font-weight: var(--rt-font-weight-regular);
|
|
22
|
+
letter-spacing: var(--rt-letter-spacing-wide);
|
|
23
|
+
line-height: var(--rt-leading-snug);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&__value {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-wrap: wrap;
|
|
29
|
+
align-items: baseline;
|
|
30
|
+
margin: 0;
|
|
31
|
+
color: var(--rt-color-text-primary);
|
|
32
|
+
font-size: var(--rt-text-sm);
|
|
33
|
+
font-weight: var(--rt-font-weight-bold);
|
|
34
|
+
gap: var(--rt-space-0-5);
|
|
35
|
+
letter-spacing: var(--rt-letter-spacing-wide);
|
|
36
|
+
line-height: var(--rt-leading-snug);
|
|
37
|
+
overflow-wrap: anywhere;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
&__value-skeleton {
|
|
41
|
+
display: block;
|
|
42
|
+
}
|
|
41
43
|
}
|
|
42
|
-
}
|
|
43
44
|
|
|
44
|
-
[data-theme='dark'] .rt-info-item {
|
|
45
|
-
|
|
45
|
+
[data-theme='dark'] .rt-info-item {
|
|
46
|
+
@include kv.surface-card-dark;
|
|
47
|
+
}
|
|
46
48
|
}
|