@rt-tools/ui-kit-v2 0.21.0 → 0.22.1

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.
Files changed (44) hide show
  1. package/fesm2022/rt-tools-ui-kit-v2-core.mjs +2 -0
  2. package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
  3. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +2 -2
  4. package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
  5. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +4 -2
  6. package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
  7. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs +1 -0
  8. package/fesm2022/rt-tools-ui-kit-v2-icon.mjs.map +1 -1
  9. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +6 -3
  10. package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
  11. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +18 -6
  12. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
  13. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs +11 -0
  14. package/fesm2022/rt-tools-ui-kit-v2-scroll-area.mjs.map +1 -1
  15. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +172 -26
  16. package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
  17. package/fesm2022/rt-tools-ui-kit-v2-table.mjs +1 -1
  18. package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
  19. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +2 -2
  20. package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
  21. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +11 -6
  22. package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
  23. package/package.json +1 -1
  24. package/rt-tools-ui-kit-v2-0.22.1.tgz +0 -0
  25. package/src/assets/icons-material/folder.fill.svg +5 -0
  26. package/src/assets/icons-material/folder.svg +5 -0
  27. package/src/lib/components/dynamic-selector/CONTEXT.md +2 -1
  28. package/src/lib/components/menu/CONTEXT.md +7 -6
  29. package/src/lib/components/scroll-area/CONTEXT.md +5 -1
  30. package/src/lib/components/side-menu/CONTEXT.md +17 -1
  31. package/src/lib/components/side-menu/favorites/rt-side-menu-favorites.component.scss +9 -0
  32. package/src/lib/components/side-menu/rt-side-menu.component.scss +42 -15
  33. package/src/lib/components/side-menu/stories/component/test-side-menu-cell.component.scss +34 -0
  34. package/src/lib/components/side-menu/sub-item/rt-side-menu-sub-item.component.scss +75 -14
  35. package/src/lib/components/thread-list/CONTEXT.md +2 -1
  36. package/src/lib/components/thread-list/rt-thread-list.component.scss +4 -1
  37. package/src/lib/components/toast/CONTEXT.md +2 -0
  38. package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +6 -0
  39. package/types/rt-tools-ui-kit-v2-core.d.ts +13 -2
  40. package/types/rt-tools-ui-kit-v2-menu.d.ts +4 -1
  41. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +7 -1
  42. package/types/rt-tools-ui-kit-v2-side-menu.d.ts +60 -8
  43. package/types/rt-tools-ui-kit-v2-toast.d.ts +1 -0
  44. package/rt-tools-ui-kit-v2-0.21.0.tgz +0 -0
@@ -34,7 +34,11 @@
34
34
  **Признак встаёт до первого движения руки.** Событие прокрутки приходит только после того, как
35
35
  кто-то прокрутил, а список не влезает уже на первой отрисовке: за размером тела и подвала следит
36
36
  наблюдатель. Наблюдатели живут, только пока признак включён: без входа область не следит ни за чем
37
- и раскладку не читает.
37
+ и размеров не измеряет.
38
+
39
+ **Содержимое, которое дорастает переходом высоты, перемеряется по концу перехода.** Раскрытая папка
40
+ растёт от нуля, и наблюдатель размера пропускал конец такого роста. Конец перехода или анимации
41
+ всплывает к телу, и область перемеряет признак по вставшей высоте.
38
42
 
39
43
  **Полоса растушёвки доходит до содержимого подвала, а не до края тела.** Разделитель потребитель
40
44
  рисует первой строкой подвала, и подъём полосы область измеряет сама — это высота подвала без его
@@ -23,6 +23,21 @@
23
23
  **Подсказки строк подменю гасит `subMenuTooltipsShown="false"`.** Имена кнопок для чтения экрана
24
24
  остаются.
25
25
 
26
+ **Вид первого кита — входы и свойства, умолчания дают прежний вид.** Без подписей полосы
27
+ (`railTitlesShown="false"`) имя пункта уходит в подсказку справа и в `aria-label`; подсказку гасит тот
28
+ же `subMenuTooltipsShown`. Строка и папка подменю несут номер пункта в `data-item-id`. Цвета пункта
29
+ объявлены и на строке избранного в руке: её CDK выносит из меню. Кнопки строки — «+», звезда,
30
+ «убрать» и ручка — берут скругление, размер, значок и цвет покоя из свойств строки; круг первого
31
+ кита приложение ставит свойством, умолчание — прежний скруглённый квадрат. Входы вида живут в
32
+ `rt-side-menu-look.base.ts`: класс меню иначе не помещался в предел длины файла.
33
+
34
+ **Строка подменю переходит сама, а не ссылкой роутера.** Ссылка роутера переходила раньше любого
35
+ обработчика строки, и приложение не могло взять переход на себя. Строка отдаёт нажатие выходом и
36
+ переходит через роутер, если умолчание не отменено; `href` строит труба `rtSideMenuHref`.
37
+
38
+ **Закрытие наведения откладывает `RtSideMenuCloseTimer`.** Нулевая задержка закрывает сразу, как
39
+ раньше; возврат указателя на панель и пункт с подменю снимают отложенное закрытие.
40
+
26
41
  **Значок вне набора — шаблон `rtSideMenuIcon`.** Имя Material первого кита меню переводит парой
27
42
  из перечня кита, как `rt-menu`. Имя без пары берёт свой шаблон меню, один на все пункты и кнопки строк;
28
43
  контекст — строка (`$implicit`), имя (`icon`) и место (`slot`: `'icon'` или `'iconButton'`). Без
@@ -34,7 +49,8 @@
34
49
  ## Края
35
50
 
36
51
  - Незакреплённая панель стоит над страницей и закрывается уходом указателя. Если человек взялся за
37
- поле поиска, её закрывает только нажатие снаружи.
52
+ поле поиска, её закрывает только нажатие снаружи. Подложка для этого нажатия начинается после
53
+ полосы: наведение на другой пункт полосы переключает подменю и тогда, как у первого кита.
38
54
  - Закреплённая панель стоит в потоке рядом с полосой, у неё есть ручка ширины.
39
55
  - На узком экране закрепления нет: меню рисует один столбец с кнопкой «назад».
40
56
  - Столбец узкого экрана шириной `--rt-side-menu-mobile-width`, 15rem, как меню телефона первого кита:
@@ -88,10 +88,19 @@
88
88
  /* Ручка видна так же, как «убрать»: под наведением и фокусом клавиатуры своей строки, а где
89
89
  указатель не умеет наводиться, — всегда. Прячется прозрачностью: остаётся в порядке Tab. */
90
90
  .rt-side-menu-favorites__handle {
91
+ /* Размер, форма, значок и цвет ручки — свойства строки подменю, как у звезды и «убрать». */
92
+ --rt-icon-button-color: var(--rt-side-menu-sub-item-favorite-color);
93
+ --rt-icon-step-sm: var(--rt-side-menu-sub-item-button-icon-size);
94
+
91
95
  flex-shrink: 0;
92
96
  cursor: grab;
93
97
  opacity: 0;
94
98
 
99
+ > .rt-icon-button {
100
+ --rt-icon-button-size-step: var(--rt-side-menu-sub-item-favorite-size);
101
+ --rt-icon-button-radius: var(--rt-side-menu-sub-item-button-radius);
102
+ }
103
+
95
104
  &:active {
96
105
  cursor: grabbing;
97
106
  }
@@ -3,6 +3,17 @@
3
3
  Host несёт класс блока: полоса пунктов, рядом панель подменю. Незакреплённая панель стоит над
4
4
  страницей, закреплённая — в потоке рядом с полосой и сдвигает страницу. */
5
5
 
6
+ /* Цвета пункта — полосы, строки телефона и строки подменю. Объявлены и на строке избранного в
7
+ руке: её CDK выносит в конец страницы, вне меню. Цвет в покое по умолчанию берётся от меню, как
8
+ раньше брался наследованием. */
9
+ .rt-side-menu,
10
+ .rt-side-menu-favorites__row.cdk-drag-preview {
11
+ --rt-side-menu-item-color: currentcolor;
12
+ --rt-side-menu-item-bg-hover: var(--rt-color-bg-hover);
13
+ --rt-side-menu-item-bg-active: var(--rt-color-action-primary-subtle);
14
+ --rt-side-menu-item-color-active: var(--rt-color-action-primary-on-surface);
15
+ }
16
+
6
17
  .rt-side-menu {
7
18
  --rt-side-menu-rail-width: 5.5rem;
8
19
  --rt-side-menu-panel-width: 15rem;
@@ -14,6 +25,14 @@
14
25
  --rt-side-menu-resizer-border-width: var(--rt-border-width-thick);
15
26
  --rt-side-menu-panel-border-width: var(--rt-border-width-thin);
16
27
  --rt-side-menu-transition-duration: var(--rt-duration-fast);
28
+ --rt-side-menu-rail-icon-size: var(--rt-icon-step-md);
29
+ --rt-side-menu-rail-gap: var(--rt-space-md);
30
+ --rt-side-menu-rail-bg: var(--rt-color-bg-surface);
31
+ --rt-side-menu-rail-border-width: var(--rt-side-menu-panel-border-width);
32
+ --rt-side-menu-panel-bg: var(--rt-color-bg-surface);
33
+ --rt-side-menu-panel-head-padding: var(--rt-space-sm);
34
+ --rt-side-menu-sub-list-padding-inline: var(--rt-space-2);
35
+ --rt-side-menu-empty-padding: var(--rt-space-md);
17
36
 
18
37
  /* Натянутую рукой ширину ставит привязка хоста; без неё панель берёт ширину оформления. */
19
38
  --rt-side-menu-panel-dragged-width: 0px;
@@ -34,8 +53,8 @@
34
53
  height: 100%;
35
54
  box-sizing: border-box;
36
55
  flex: 0 0 var(--rt-side-menu-rail-width);
37
- border-right: var(--rt-side-menu-panel-border-width) solid var(--rt-color-border-default);
38
- background: var(--rt-color-bg-surface);
56
+ border-right: var(--rt-side-menu-rail-border-width) solid var(--rt-color-border-default);
57
+ background: var(--rt-side-menu-rail-bg);
39
58
 
40
59
  /* Отступ области прокрутки оставлял подписи 56 пикселей из 88, и слово рвалось посреди. */
41
60
  .rt-scroll-area__body {
@@ -47,7 +66,7 @@
47
66
  display: flex;
48
67
  flex-direction: column;
49
68
  align-items: center;
50
- gap: var(--rt-space-md);
69
+ gap: var(--rt-side-menu-rail-gap);
51
70
  padding-block: var(--rt-space-sm);
52
71
  }
53
72
 
@@ -59,7 +78,7 @@
59
78
  padding: 0;
60
79
  border: 0;
61
80
  background: transparent;
62
- color: inherit;
81
+ color: var(--rt-side-menu-item-color);
63
82
  cursor: pointer;
64
83
  font: inherit;
65
84
  gap: var(--rt-space-1);
@@ -75,17 +94,22 @@
75
94
 
76
95
  &:hover .rt-side-menu__rail-icon,
77
96
  &:active .rt-side-menu__rail-icon {
78
- background: var(--rt-color-bg-hover);
97
+ background: var(--rt-side-menu-item-bg-hover);
79
98
  }
80
99
 
81
100
  &--active .rt-side-menu__rail-icon,
82
101
  &--active:hover .rt-side-menu__rail-icon {
83
- background: var(--rt-color-action-primary-subtle);
84
- color: var(--rt-color-action-primary-on-surface);
102
+ background: var(--rt-side-menu-item-bg-active);
103
+ color: var(--rt-side-menu-item-color-active);
85
104
  }
86
105
  }
87
106
 
107
+ /* Размер значка полосы переназначает ступень значка внутри коробки. Свойство меню объявлено
108
+ ступенью без запаса: пока приложение не задало ни его, ни ступени, оно пусто, и значок берёт
109
+ свой запасной шаг, как раньше. Круга нет — свойство меню разрешено на корне. */
88
110
  &__rail-icon {
111
+ --rt-icon-step-md: var(--rt-side-menu-rail-icon-size);
112
+
89
113
  display: flex;
90
114
  width: 3.5rem;
91
115
  height: 2rem;
@@ -103,10 +127,13 @@
103
127
  text-align: center;
104
128
  }
105
129
 
130
+ /* Подложка начинается после полосы: наведение на другой пункт полосы переключает подменю и
131
+ тогда, когда его держит поле поиска, как у первого кита. */
106
132
  &__backdrop {
107
133
  position: fixed;
108
134
  z-index: var(--rt-z-dropdown);
109
135
  inset: 0;
136
+ inset-inline-start: var(--rt-side-menu-rail-width);
110
137
  }
111
138
 
112
139
  &__panel {
@@ -121,7 +148,7 @@
121
148
  flex-direction: column;
122
149
  border-radius: 0 var(--rt-side-menu-panel-radius) var(--rt-side-menu-panel-radius) 0;
123
150
  border-left: var(--rt-side-menu-panel-border-width) solid var(--rt-color-border-default);
124
- background: var(--rt-color-bg-surface);
151
+ background: var(--rt-side-menu-panel-bg);
125
152
  box-shadow: var(--rt-side-menu-panel-shadow);
126
153
 
127
154
  &--held {
@@ -141,7 +168,7 @@
141
168
  &__panel-head {
142
169
  display: flex;
143
170
  align-items: center;
144
- padding: var(--rt-space-sm);
171
+ padding: var(--rt-side-menu-panel-head-padding);
145
172
  gap: var(--rt-space-2);
146
173
  }
147
174
 
@@ -163,11 +190,11 @@
163
190
  display: flex;
164
191
  flex-direction: column;
165
192
  padding-block-end: var(--rt-space-sm);
166
- padding-inline: var(--rt-space-2);
193
+ padding-inline: var(--rt-side-menu-sub-list-padding-inline);
167
194
  }
168
195
 
169
196
  &__empty {
170
- padding: var(--rt-space-md);
197
+ padding: var(--rt-side-menu-empty-padding);
171
198
  color: var(--rt-color-text-muted);
172
199
  font-size: var(--rt-text-xs);
173
200
  }
@@ -238,7 +265,7 @@
238
265
  border: 0;
239
266
  border-radius: var(--rt-side-menu-item-radius);
240
267
  background: transparent;
241
- color: inherit;
268
+ color: var(--rt-side-menu-item-color);
242
269
  cursor: pointer;
243
270
  font: inherit;
244
271
  font-size: var(--rt-text-sm);
@@ -251,7 +278,7 @@
251
278
  text-decoration: none;
252
279
 
253
280
  &:hover {
254
- background: var(--rt-color-bg-hover);
281
+ background: var(--rt-side-menu-item-bg-hover);
255
282
  }
256
283
 
257
284
  &:focus-visible {
@@ -260,8 +287,8 @@
260
287
  }
261
288
 
262
289
  &--active {
263
- background: var(--rt-color-action-primary-subtle);
264
- color: var(--rt-color-action-primary-on-surface);
290
+ background: var(--rt-side-menu-item-bg-active);
291
+ color: var(--rt-side-menu-item-color-active);
265
292
  }
266
293
  }
267
294
 
@@ -23,5 +23,39 @@
23
23
  width: 100%;
24
24
  height: 100%;
25
25
  }
26
+
27
+ /* Вид первого кита так, как его задаёт приложение: свойства меню на меню, свойства строки на
28
+ строке, черта под строкой страницы раздела — по номеру пункта на строке. Трекинг строки — ручка без
29
+ объявления в ките: он задан привязкой стиля на коробке и доходит до строк наследованием. */
30
+ &--first-kit {
31
+ .rt-side-menu {
32
+ --rt-side-menu-rail-icon-size: var(--rt-size-6);
33
+ --rt-side-menu-rail-gap: var(--rt-space-sm);
34
+ --rt-side-menu-rail-border-width: 0;
35
+ --rt-side-menu-panel-head-padding: var(--rt-space-sm);
36
+ --rt-side-menu-sub-list-padding-inline: var(--rt-space-md);
37
+ --rt-side-menu-panel-bg: var(--rt-color-bg-subtle);
38
+ --rt-side-menu-item-color-active: var(--rt-color-text-primary);
39
+ }
40
+
41
+ .rt-side-menu-sub-item {
42
+ --rt-side-menu-sub-item-min-height: calc(var(--rt-size-10) + var(--rt-space-1));
43
+ --rt-side-menu-sub-item-font-size: var(--rt-text-md);
44
+ --rt-side-menu-sub-item-padding-end: var(--rt-space-md);
45
+ --rt-side-menu-sub-item-icon-size: var(--rt-size-6);
46
+ --rt-side-menu-sub-item-gap: calc(var(--rt-space-1) * 3);
47
+ --rt-side-menu-sub-item-folder-padding-start: calc(var(--rt-space-1) * 3);
48
+ --rt-side-menu-sub-item-chevron-color: var(--rt-color-text-primary);
49
+ --rt-side-menu-sub-item-button-radius: var(--rt-radius-full);
50
+ --rt-side-menu-sub-item-button-icon-size: var(--rt-size-5);
51
+ --rt-side-menu-sub-item-action-size: calc(var(--rt-size-6) + var(--rt-space-0-5));
52
+ --rt-side-menu-sub-item-favorite-size: var(--rt-size-8);
53
+ --rt-side-menu-sub-item-favorite-color: var(--rt-color-text-muted);
54
+ }
55
+
56
+ .rt-side-menu-sub-item:has(> [data-item-id='2']) {
57
+ border-bottom: 1px solid var(--rt-color-border-subtle);
58
+ }
59
+ }
26
60
  }
27
61
  }
@@ -11,27 +11,59 @@
11
11
  --rt-side-menu-sub-item-match-color: var(--rt-neutral-950);
12
12
  --rt-side-menu-sub-item-match-radius: var(--rt-radius-xs);
13
13
 
14
+ /* Размеры и цвет строки — и строки со ссылкой, и заголовка папки. Отступ начала растёт с
15
+ глубиной вложения. Цвета подложки и выбранной строки — свойства меню `--rt-side-menu-item-*`. */
16
+ --rt-side-menu-sub-item-min-height: var(--rt-control-height-md);
17
+ --rt-side-menu-sub-item-font-size: var(--rt-text-sm);
18
+ --rt-side-menu-sub-item-padding-start: var(--rt-space-md);
19
+ --rt-side-menu-sub-item-padding-end: var(--rt-space-sm);
20
+ --rt-side-menu-sub-item-color: var(--rt-color-text-primary);
21
+ --rt-side-menu-sub-item-gap: var(--rt-space-sm);
22
+
23
+ /* Заголовок папки берёт отступ начала строки, пока приложение не задало свой: у первого кита
24
+ папка стоит ближе к краю, чем её пункты. Растёт с глубиной так же, как у строки. */
25
+ --rt-side-menu-sub-item-folder-padding-start: var(--rt-side-menu-sub-item-padding-start);
26
+ --rt-side-menu-sub-item-chevron-color: var(--rt-color-text-muted);
27
+
28
+ /* Значок строки и папки — ступень sm значка. Без своего шага значок берёт свой запасной
29
+ размер, как раньше: ссылка на необъявленный шаг недействительна. */
30
+ --rt-side-menu-sub-item-icon-size: var(--rt-icon-step-sm);
31
+
32
+ /* Кнопки строки — «+» потребителя, звезда, «убрать» и ручка блока избранного. Умолчания дают
33
+ прежний вид: скруглённый квадрат шага sm, значок ступени sm, цвет текста. Значок — та же
34
+ ступень без своего шага, что и у значка строки. */
35
+ --rt-side-menu-sub-item-button-radius: var(--rt-radius-md);
36
+ --rt-side-menu-sub-item-button-icon-size: var(--rt-icon-step-sm);
37
+ --rt-side-menu-sub-item-action-size: var(--rt-control-height-sm);
38
+ --rt-side-menu-sub-item-favorite-size: var(--rt-control-height-sm);
39
+ --rt-side-menu-sub-item-favorite-color: var(--rt-color-text-primary);
40
+
14
41
  display: block;
15
42
 
43
+ /* Трекинг подписи наследуют и строка, и заголовок папки. Своего умолчания у него нет: без
44
+ свойства строка наследует трекинг от страницы, как раньше. */
45
+ letter-spacing: var(--rt-side-menu-sub-item-letter-spacing, inherit);
46
+
16
47
  &__row {
17
48
  /* Глубину вложения ставит шаблон на саму строку; здесь — значение строки верхнего уровня. */
18
49
  --rt-side-menu-sub-item-depth: 0;
19
50
 
20
51
  display: flex;
21
52
  width: 100%;
22
- min-height: var(--rt-control-height-md);
53
+ min-height: var(--rt-side-menu-sub-item-min-height);
23
54
  box-sizing: border-box;
24
55
  align-items: center;
25
56
  border: 0;
26
57
  border-radius: var(--rt-side-menu-sub-item-radius);
27
58
  background: transparent;
28
- color: var(--rt-color-text-primary);
59
+ color: var(--rt-side-menu-sub-item-color);
29
60
  cursor: pointer;
30
61
  font: inherit;
31
- font-size: var(--rt-text-sm);
32
- gap: var(--rt-space-sm);
62
+ font-size: var(--rt-side-menu-sub-item-font-size);
63
+ gap: var(--rt-side-menu-sub-item-gap);
33
64
  padding-block: var(--rt-space-2);
34
- padding-inline: calc(var(--rt-space-md) * (1 + var(--rt-side-menu-sub-item-depth))) var(--rt-space-sm);
65
+ padding-inline: calc(var(--rt-side-menu-sub-item-padding-start) * (1 + var(--rt-side-menu-sub-item-depth)))
66
+ var(--rt-side-menu-sub-item-padding-end);
35
67
  text-align: start;
36
68
  text-decoration: none;
37
69
  transition: background-color var(--rt-side-menu-sub-item-transition-duration) ease;
@@ -39,7 +71,7 @@
39
71
  &:hover,
40
72
  &:active,
41
73
  &--highlighted {
42
- background: var(--rt-color-bg-hover);
74
+ background: var(--rt-side-menu-item-bg-hover);
43
75
  }
44
76
 
45
77
  &:focus-visible {
@@ -49,12 +81,14 @@
49
81
 
50
82
  /* Активна строка со ссылкой; у папки активность видна по её раскрытым пунктам. */
51
83
  &--active {
52
- background: var(--rt-color-action-primary-subtle);
53
- color: var(--rt-color-action-primary-on-surface);
84
+ background: var(--rt-side-menu-item-bg-active);
85
+ color: var(--rt-side-menu-item-color-active);
54
86
  }
55
87
  }
56
88
 
57
89
  &__icon {
90
+ --rt-icon-step-sm: var(--rt-side-menu-sub-item-icon-size);
91
+
58
92
  flex-shrink: 0;
59
93
  color: inherit;
60
94
  }
@@ -113,6 +147,21 @@
113
147
  &:hover {
114
148
  outline-color: var(--rt-color-border-strong);
115
149
  }
150
+
151
+ > .rt-icon-button {
152
+ --rt-icon-button-size-step: var(--rt-side-menu-sub-item-action-size);
153
+ }
154
+ }
155
+
156
+ /* Форма и значок кнопок строки. Скругление и шаг размера кнопка объявляет на своём корне —
157
+ там они и переназначаются; ступень значка доходит до значка с тега. */
158
+ &__action,
159
+ &__favorite {
160
+ --rt-icon-step-sm: var(--rt-side-menu-sub-item-button-icon-size);
161
+
162
+ > .rt-icon-button {
163
+ --rt-icon-button-radius: var(--rt-side-menu-sub-item-button-radius);
164
+ }
116
165
  }
117
166
 
118
167
  /* Кнопка избранного: звезда у пункта раздела и «убрать» у строки блока. Закрашенная звезда
@@ -120,9 +169,16 @@
120
169
  клавиатуры своей строки, а где указатель не умеет наводиться, — всегда. Прячется
121
170
  прозрачностью: кнопка остаётся на месте и в порядке Tab. */
122
171
  &__favorite {
172
+ /* Цвет покоя — свойство строки: состояния ниже переназначают цвет кнопки и перебивают его. */
173
+ --rt-icon-button-color: var(--rt-side-menu-sub-item-favorite-color);
174
+
123
175
  flex-shrink: 0;
124
176
  opacity: 0;
125
177
 
178
+ > .rt-icon-button {
179
+ --rt-icon-button-size-step: var(--rt-side-menu-sub-item-favorite-size);
180
+ }
181
+
126
182
  &--on {
127
183
  --rt-icon-button-color: var(--rt-color-action-primary);
128
184
 
@@ -159,17 +215,22 @@
159
215
  &__folder.rt-expansion-panel {
160
216
  --rt-expansion-panel-duration: var(--rt-side-menu-sub-item-transition-duration);
161
217
  --rt-expansion-panel-header-radius: var(--rt-side-menu-sub-item-radius);
162
- --rt-expansion-panel-header-min-height: var(--rt-control-height-md);
218
+ --rt-expansion-panel-header-min-height: var(--rt-side-menu-sub-item-min-height);
163
219
  --rt-expansion-panel-header-padding-block: var(--rt-space-2);
164
- --rt-expansion-panel-header-padding-start: calc(var(--rt-space-md) * (1 + var(--rt-side-menu-sub-item-depth)));
165
- --rt-expansion-panel-header-padding-end: var(--rt-space-sm);
166
- --rt-expansion-panel-header-gap: var(--rt-space-sm);
167
- --rt-expansion-panel-header-font-size: var(--rt-text-sm);
220
+ --rt-expansion-panel-header-padding-start: calc(
221
+ var(--rt-side-menu-sub-item-folder-padding-start) * (1 + var(--rt-side-menu-sub-item-depth))
222
+ );
223
+ --rt-expansion-panel-header-padding-end: var(--rt-side-menu-sub-item-padding-end);
224
+ --rt-expansion-panel-header-gap: var(--rt-side-menu-sub-item-gap);
225
+ --rt-expansion-panel-chevron-color: var(--rt-side-menu-sub-item-chevron-color);
226
+ --rt-expansion-panel-header-font-size: var(--rt-side-menu-sub-item-font-size);
227
+ --rt-expansion-panel-header-color: var(--rt-side-menu-sub-item-color);
168
228
  --rt-expansion-panel-header-bg: transparent;
229
+ --rt-expansion-panel-header-hover-bg: var(--rt-side-menu-item-bg-hover);
169
230
  }
170
231
 
171
232
  &__folder--highlighted.rt-expansion-panel {
172
- --rt-expansion-panel-header-bg: var(--rt-color-bg-hover);
233
+ --rt-expansion-panel-header-bg: var(--rt-side-menu-item-bg-hover);
173
234
  }
174
235
 
175
236
  &__children {
@@ -30,7 +30,8 @@
30
30
 
31
31
  Действия строки — `<ng-template let-row [rtThreadListRowActions]="rows()">`: кнопки стоят поверх
32
32
  правого края строки, рядом с её кнопкой, а не внутри: вложенная кнопка в `<button>` недопустима и
33
- забирала бы клик выбора. Видны при наведении и фокусе. Без шаблона строка стоит без обёртки.
33
+ забирала бы клик выбора. Видны при наведении, фокусе и пока открыто `rt-menu` из них (`rt-menu--open`):
34
+ панель меню лежит вне строки, и фокус уходит в неё. Без шаблона строка стоит без обёртки.
34
35
 
35
36
  ## Главное, что нужно знать
36
37
 
@@ -130,8 +130,11 @@
130
130
  &__row-wrap {
131
131
  position: relative;
132
132
 
133
+ // Открытое меню действий держит их видимыми: фокус ушёл в панель поверх страницы, и без
134
+ // этого кнопка меню гасла под своей же панелью, когда указатель покидал строку.
133
135
  &:hover .rt-thread-list__row-actions,
134
- &:focus-within .rt-thread-list__row-actions {
136
+ &:focus-within .rt-thread-list__row-actions,
137
+ &:has(.rt-menu--open) .rt-thread-list__row-actions {
135
138
  opacity: 1;
136
139
  pointer-events: auto;
137
140
  }
@@ -47,6 +47,8 @@ this.#notifications.error('Не удалось сохранить', 'danger', {
47
47
  - `progress: true` рисует полосу срока; она встаёт тем же признаком `rt-toast--paused`, что и таймер.
48
48
  - `icon` у тоста важнее карты `RT_TOAST_SEVERITY_ICONS`; `icon: null` снимает значок.
49
49
  - `mode="replace"` помечает прежние тосты вытесненными, и они уходят той же анимацией, что по крестику.
50
+ - `onDismiss` сообщает один раз, почему тост ушёл без действия: `close`, `timeout` или `replaced`.
51
+ Ушедший по `action` или `secondaryAction` ничего не сообщает — его обработчик уже вызван.
50
52
 
51
53
  ## Края
52
54
 
@@ -47,6 +47,12 @@
47
47
  логики `rt-chat`. Отправка вопроса и выбор беседы прижимают ленту к низу всегда.
48
48
  - Удаление беседы — действие строки `rt-thread-list` (`rtThreadListRowActions`), подтверждение —
49
49
  на приложении.
50
+ - `threadMenu` ставит в действия строки вместо кнопки удаления `rt-menu` «More actions»
51
+ (`ellipsis-v`, `triggerSize="xs"` — размер прежней кнопки удаления). Пункты: «Copy ID» —
52
+ `onCopyThreadId`, CDK `Clipboard`, без состояния «скопировано»: меню закрывается выбором;
53
+ «Delete» — `danger`, отдаёт `deleteThread` без `confirmMessage`, подтверждение на приложении.
54
+ Подписи — `uiMoreActions`, `aiCopyThreadId`, `uiRemove`. Пока панель открыта, действия строки
55
+ видны: правило `:has(.rt-menu--open)` в `rt-thread-list`.
50
56
  - Подсветка совпадений поиска по беседам — `splitSideMenuTitle`.
51
57
  - Строки-превью пустого списка бесед — `emptyPreviewIcons`, по умолчанию `sparkle`, `bot`, `sparkle`:
52
58
  беседы идут с ассистентом, а не с людьми. Вход уходит в `rt-thread-list` как есть.
@@ -461,6 +461,7 @@ declare const RT_KIT_LABELS_EN: {
461
461
  readonly aiBackToChat: "Back to conversation";
462
462
  readonly aiClose: "Close assistant";
463
463
  readonly aiCopyReference: "Copy reference";
464
+ readonly aiCopyThreadId: "Copy ID";
464
465
  readonly aiDeleteThread: "Delete conversation";
465
466
  readonly aiDisclaimer: "AI can make mistakes. Check important information.";
466
467
  readonly aiDislike: "Bad answer";
@@ -909,6 +910,11 @@ declare class MessageBus<E extends IMessageBusEvent> {
909
910
  declare namespace INotification {
910
911
  /** Семантическая палитра уведомления; совпадает по значениям с `rt-message`. */
911
912
  type Severity = 'info' | 'success' | 'warning' | 'danger';
913
+ /**
914
+ * Почему тост ушёл не по действию: крестик, истёкший таймер или вытеснение новым в режиме
915
+ * `replace`. Ушедший по действию причины не сообщает — его обработчик уже вызван.
916
+ */
917
+ type DismissReason = 'close' | 'timeout' | 'replaced';
912
918
  interface Action {
913
919
  readonly label: string;
914
920
  readonly handler: () => void;
@@ -936,8 +942,13 @@ declare namespace INotification {
936
942
  readonly progress?: boolean;
937
943
  /** Свой значок вместо значка severity; `null` — тост без значка. */
938
944
  readonly icon?: IRtIcon.Name | null;
945
+ /**
946
+ * Сообщает один раз, почему тост ушёл без действия. Приложению это нужно, когда тост
947
+ * держит ожидание — вход, подтверждение, — и закрытый крестиком должен его отменить.
948
+ */
949
+ readonly onDismiss?: (reason: DismissReason) => void;
939
950
  }
940
- type Options = Pick<Payload, 'description' | 'meta' | 'action' | 'secondaryAction' | 'filled' | 'duration' | 'progress' | 'icon'>;
951
+ type Options = Pick<Payload, 'description' | 'meta' | 'action' | 'secondaryAction' | 'filled' | 'duration' | 'progress' | 'icon' | 'onDismiss'>;
941
952
  /**
942
953
  * Событие шины уведомлений. `type` — строковый дискриминатор (доменные
943
954
  * action-перечисления вроде «обновление записи успешно»/«ошибка загрузки
@@ -1090,7 +1101,7 @@ declare class RtInfiniteScrollDirective implements OnDestroy {
1090
1101
  /** The name of a styling property the kit declares itself. */
1091
1102
  type TRtDesignTokenName = '--rt-amber-400' | '--rt-border-width-medium' | '--rt-border-width-thick' | '--rt-border-width-thin' | '--rt-bp-lg' | '--rt-bp-md' | '--rt-bp-sm' | '--rt-bp-xl' | '--rt-brand-100' | '--rt-brand-200' | '--rt-brand-300' | '--rt-brand-400' | '--rt-brand-50' | '--rt-brand-500' | '--rt-brand-600' | '--rt-brand-700' | '--rt-brand-800' | '--rt-brand-900' | '--rt-brand-950' | '--rt-btn-tint-active' | '--rt-btn-tint-hover' | '--rt-charcoal-700' | '--rt-charcoal-800' | '--rt-charcoal-900' | '--rt-charcoal-950' | '--rt-charcoal-border' | '--rt-charcoal-border-strong' | '--rt-chat-bubble-date' | '--rt-chat-bubble-in-author' | '--rt-chat-bubble-in-bg' | '--rt-chat-bubble-own-author' | '--rt-chat-bubble-own-bg' | '--rt-chat-status-read' | '--rt-color-action-danger' | '--rt-color-action-danger-active' | '--rt-color-action-danger-hover' | '--rt-color-action-danger-on-surface' | '--rt-color-action-disabled' | '--rt-color-action-info' | '--rt-color-action-info-active' | '--rt-color-action-info-hover' | '--rt-color-action-info-on-surface' | '--rt-color-action-on-danger' | '--rt-color-action-on-disabled' | '--rt-color-action-on-info' | '--rt-color-action-on-primary' | '--rt-color-action-on-secondary' | '--rt-color-action-on-success' | '--rt-color-action-on-warning' | '--rt-color-action-primary' | '--rt-color-action-primary-active' | '--rt-color-action-primary-hover' | '--rt-color-action-primary-on-surface' | '--rt-color-action-primary-soft' | '--rt-color-action-primary-subtle' | '--rt-color-action-secondary' | '--rt-color-action-secondary-active' | '--rt-color-action-secondary-hover' | '--rt-color-action-secondary-on-surface' | '--rt-color-action-success' | '--rt-color-action-success-active' | '--rt-color-action-success-hover' | '--rt-color-action-success-on-surface' | '--rt-color-action-warning' | '--rt-color-action-warning-active' | '--rt-color-action-warning-hover' | '--rt-color-action-warning-on-surface' | '--rt-color-bg-hover' | '--rt-color-bg-inverse' | '--rt-color-bg-nav' | '--rt-color-bg-overlay' | '--rt-color-bg-page' | '--rt-color-bg-page-auth' | '--rt-color-bg-subtle' | '--rt-color-bg-surface' | '--rt-color-bg-surface-auth-card' | '--rt-color-bg-surface-subtle' | '--rt-color-bg-surface-subtle-2' | '--rt-color-border-default' | '--rt-color-border-focus' | '--rt-color-border-strong' | '--rt-color-border-subtle' | '--rt-color-field-fill-underline' | '--rt-color-skeleton-base' | '--rt-color-skeleton-wave' | '--rt-color-state-danger' | '--rt-color-state-danger-bg' | '--rt-color-state-error-text' | '--rt-color-state-info' | '--rt-color-state-info-bg' | '--rt-color-state-success' | '--rt-color-state-success-bg' | '--rt-color-state-success-text' | '--rt-color-state-warning' | '--rt-color-state-warning-bg' | '--rt-color-state-warning-text' | '--rt-color-stepper-current' | '--rt-color-stepper-current-subtle' | '--rt-color-stepper-progress' | '--rt-color-stepper-track' | '--rt-color-table-head-bg' | '--rt-color-text-disabled' | '--rt-color-text-inverse' | '--rt-color-text-link' | '--rt-color-text-link-hover' | '--rt-color-text-muted' | '--rt-color-text-primary' | '--rt-control-height-2xl' | '--rt-control-height-lg' | '--rt-control-height-md' | '--rt-control-height-sm' | '--rt-control-height-xl' | '--rt-control-max-width' | '--rt-control-panel-max-height' | '--rt-control-textarea-min-height-lg' | '--rt-control-textarea-min-height-md' | '--rt-control-textarea-min-height-sm' | '--rt-counter-gap' | '--rt-counter-row-color-border' | '--rt-counter-row-gap' | '--rt-counter-row-hint-color' | '--rt-counter-row-hint-font-size' | '--rt-counter-row-label-color' | '--rt-counter-row-label-font-size' | '--rt-counter-row-padding-y' | '--rt-counter-value-color' | '--rt-counter-value-font-size' | '--rt-counter-value-min-width' | '--rt-danger-50' | '--rt-danger-500' | '--rt-danger-600' | '--rt-danger-700' | '--rt-duration-base' | '--rt-duration-fast' | '--rt-duration-slow' | '--rt-duration-slower' | '--rt-field-error-color' | '--rt-field-error-font-size' | '--rt-field-gap' | '--rt-field-hint-color' | '--rt-field-hint-font-size' | '--rt-field-label-color' | '--rt-field-label-font-size' | '--rt-field-label-font-weight' | '--rt-field-label-help-gap' | '--rt-field-required-color' | '--rt-field-value-color' | '--rt-field-value-empty-color' | '--rt-field-value-font-size' | '--rt-focus-ring-color' | '--rt-focus-ring-color-danger' | '--rt-focus-ring-offset' | '--rt-focus-ring-width' | '--rt-font-family-mono' | '--rt-font-family-sans' | '--rt-font-weight-bold' | '--rt-font-weight-medium' | '--rt-font-weight-regular' | '--rt-font-weight-semibold' | '--rt-gray-350' | '--rt-icon-button-color-bg-hover' | '--rt-icon-button-disabled-color' | '--rt-icon-button-disabled-fill' | '--rt-icon-button-disabled-opacity' | '--rt-info-50' | '--rt-info-500' | '--rt-info-600' | '--rt-info-700' | '--rt-input-border-width' | '--rt-input-color-bg' | '--rt-input-color-bg-disabled' | '--rt-input-color-bg-hover' | '--rt-input-color-border' | '--rt-input-color-border-error' | '--rt-input-color-border-focus' | '--rt-input-color-text' | '--rt-input-color-text-placeholder' | '--rt-input-disabled-opacity' | '--rt-input-focus-outline-offset' | '--rt-input-focus-shadow' | '--rt-input-focus-shadow-error' | '--rt-input-font-size' | '--rt-input-gap' | '--rt-input-height' | '--rt-input-height-lg' | '--rt-input-height-md' | '--rt-input-height-sm' | '--rt-input-icon-color' | '--rt-input-icon-size' | '--rt-input-line-height' | '--rt-input-max-width' | '--rt-input-padding-x' | '--rt-input-padding-y' | '--rt-input-panel-max-height' | '--rt-input-radius' | '--rt-input-transition' | '--rt-leading-none' | '--rt-leading-normal' | '--rt-leading-relaxed' | '--rt-leading-snug' | '--rt-leading-tight' | '--rt-letter-spacing-wide' | '--rt-list-action-color' | '--rt-list-action-color-bg-hover' | '--rt-list-action-color-hover' | '--rt-list-action-divider-height' | '--rt-list-action-gap' | '--rt-list-action-icon-size' | '--rt-list-action-radius' | '--rt-list-action-shadow' | '--rt-list-action-shadow-hover' | '--rt-list-content-padding-bottom' | '--rt-list-copy-button-bg' | '--rt-list-copy-button-bg-hover' | '--rt-list-copy-button-color' | '--rt-list-copy-button-radius' | '--rt-list-copy-button-size' | '--rt-list-empty-icon-size' | '--rt-list-empty-icon-wrap-bg' | '--rt-list-empty-icon-wrap-size' | '--rt-list-empty-title-size' | '--rt-list-empty-title-weight' | '--rt-list-filter-line-height' | '--rt-list-placeholder-grow' | '--rt-list-placeholder-min-height' | '--rt-list-search-color-bg' | '--rt-list-search-color-border' | '--rt-list-search-color-placeholder' | '--rt-list-search-font-size' | '--rt-list-search-gap' | '--rt-list-search-height' | '--rt-list-search-icon-color' | '--rt-list-search-icon-size' | '--rt-list-search-padding-x' | '--rt-list-search-radius' | '--rt-list-search-width' | '--rt-list-selector-label-color' | '--rt-list-settings-icon-color' | '--rt-list-settings-item-bg' | '--rt-list-settings-item-radius' | '--rt-list-table-button-radius' | '--rt-list-table-button-size' | '--rt-list-table-head-divider-color' | '--rt-list-table-icon-color' | '--rt-list-table-icon-size' | '--rt-list-toolbar-gap' | '--rt-list-toolbar-padding-bottom' | '--rt-list-toolbar-padding-top' | '--rt-mat-blue-100' | '--rt-mat-blue-20' | '--rt-mat-blue-40' | '--rt-mat-blue-60' | '--rt-mat-blue-80' | '--rt-mat-blue-active' | '--rt-mat-blue-hover' | '--rt-mat-dark-10' | '--rt-mat-dark-20' | '--rt-mat-dark-30' | '--rt-mat-dark-40' | '--rt-mat-green-10' | '--rt-mat-green-100' | '--rt-mat-green-120' | '--rt-mat-green-20' | '--rt-mat-green-40' | '--rt-mat-green-60' | '--rt-mat-green-80' | '--rt-mat-green-active' | '--rt-mat-green-hover' | '--rt-mat-menu-min-width' | '--rt-mat-menu-sm-icon-size' | '--rt-mat-menu-sm-item-height' | '--rt-mat-navy-100' | '--rt-mat-neutral-0' | '--rt-mat-neutral-10' | '--rt-mat-neutral-100' | '--rt-mat-neutral-15' | '--rt-mat-neutral-20' | '--rt-mat-neutral-25' | '--rt-mat-neutral-30' | '--rt-mat-neutral-35' | '--rt-mat-neutral-40' | '--rt-mat-neutral-5' | '--rt-mat-neutral-60' | '--rt-mat-neutral-80' | '--rt-mat-neutral-active' | '--rt-mat-neutral-hover' | '--rt-mat-orange-10' | '--rt-mat-orange-100' | '--rt-mat-orange-20' | '--rt-mat-orange-40' | '--rt-mat-orange-5' | '--rt-mat-orange-60' | '--rt-mat-orange-70' | '--rt-mat-orange-80' | '--rt-mat-orange-active' | '--rt-mat-orange-hover' | '--rt-mat-overlay-black-32' | '--rt-mat-overlay-black-4' | '--rt-mat-overlay-blue-24' | '--rt-mat-overlay-blue-8' | '--rt-mat-radius-4' | '--rt-mat-radius-5' | '--rt-mat-red-10' | '--rt-mat-red-100' | '--rt-mat-red-20' | '--rt-mat-red-40' | '--rt-mat-red-60' | '--rt-mat-red-80' | '--rt-mat-red-active' | '--rt-mat-red-hover' | '--rt-mat-shadow-fab' | '--rt-mat-shadow-fab-hover' | '--rt-mat-shadow-level-2' | '--rt-nav-caret-size' | '--rt-nav-color-disabled' | '--rt-nav-color-focus' | '--rt-nav-header-color-bg' | '--rt-nav-header-padding' | '--rt-nav-item-color' | '--rt-nav-item-color-bg' | '--rt-nav-item-color-bg-active' | '--rt-nav-item-color-border' | '--rt-nav-item-color-caret' | '--rt-nav-item-color-hover' | '--rt-nav-item-color-pressed' | '--rt-nav-item-content-gap' | '--rt-nav-item-font-size' | '--rt-nav-item-font-weight' | '--rt-nav-item-gap' | '--rt-nav-item-height' | '--rt-nav-item-line-height' | '--rt-nav-item-padding' | '--rt-nav-marker-color' | '--rt-nav-marker-size' | '--rt-nav-panel-color-bg' | '--rt-nav-panel-color-border' | '--rt-nav-panel-column-gap' | '--rt-nav-panel-column-width' | '--rt-nav-panel-columns' | '--rt-nav-panel-group-color' | '--rt-nav-panel-group-content-gap' | '--rt-nav-panel-group-font-size' | '--rt-nav-panel-group-font-weight' | '--rt-nav-panel-group-gap' | '--rt-nav-panel-item-color' | '--rt-nav-panel-item-color-active' | '--rt-nav-panel-item-color-bg-active' | '--rt-nav-panel-item-color-bg-hover' | '--rt-nav-panel-item-content-gap' | '--rt-nav-panel-item-font-size' | '--rt-nav-panel-item-font-weight' | '--rt-nav-panel-item-gap' | '--rt-nav-panel-item-height' | '--rt-nav-panel-item-padding' | '--rt-nav-panel-padding' | '--rt-nav-panel-padding-y' | '--rt-nav-panel-shadow' | '--rt-navy-600' | '--rt-navy-900' | '--rt-neutral-0' | '--rt-neutral-100' | '--rt-neutral-200' | '--rt-neutral-300' | '--rt-neutral-400' | '--rt-neutral-50' | '--rt-neutral-500' | '--rt-neutral-600' | '--rt-neutral-700' | '--rt-neutral-800' | '--rt-neutral-900' | '--rt-neutral-950' | '--rt-opacity-disabled' | '--rt-overlay-amber-16' | '--rt-overlay-black-4' | '--rt-overlay-black-50' | '--rt-overlay-black-8' | '--rt-overlay-brand-24' | '--rt-overlay-brand-8' | '--rt-overlay-danger-16' | '--rt-overlay-menu-bg' | '--rt-overlay-menu-current-bg' | '--rt-overlay-menu-danger-color' | '--rt-overlay-menu-danger-label-color' | '--rt-overlay-menu-item-icon-size' | '--rt-overlay-menu-item-min-height' | '--rt-overlay-menu-item-padding-x' | '--rt-overlay-menu-item-padding-y' | '--rt-overlay-menu-item-weight' | '--rt-overlay-menu-min-width' | '--rt-overlay-menu-padding-y' | '--rt-overlay-menu-radius' | '--rt-overlay-menu-shadow' | '--rt-overlay-menu-sm-item-icon-size' | '--rt-overlay-menu-sm-item-min-height' | '--rt-overlay-navy-70' | '--rt-overlay-select-check-display' | '--rt-overlay-select-option-font-size' | '--rt-overlay-select-option-min-height' | '--rt-overlay-select-panel-border-width' | '--rt-overlay-select-radius' | '--rt-overlay-select-selected-bg' | '--rt-overlay-select-selected-weight' | '--rt-overlay-select-shadow' | '--rt-overlay-tooltip-radius' | '--rt-overlay-tooltip-shadow' | '--rt-overlay-white-25' | '--rt-overlay-white-4' | '--rt-overlay-white-40' | '--rt-overlay-white-50' | '--rt-overlay-white-8' | '--rt-pagination-arrow-color' | '--rt-pagination-arrow-radius' | '--rt-pagination-arrow-shadow' | '--rt-pagination-arrow-size' | '--rt-pagination-box-color-border' | '--rt-pagination-box-color-text' | '--rt-pagination-box-current-color-bg' | '--rt-pagination-box-current-color-border' | '--rt-pagination-box-current-color-text' | '--rt-pagination-box-current-font-weight' | '--rt-pagination-box-radius' | '--rt-pagination-box-size' | '--rt-pagination-field-color-bg' | '--rt-pagination-field-color-border' | '--rt-pagination-field-color-text' | '--rt-pagination-field-height' | '--rt-pagination-field-padding-x' | '--rt-pagination-field-radius' | '--rt-pagination-gap' | '--rt-pagination-justify' | '--rt-pagination-nav-gap' | '--rt-pagination-padding-x' | '--rt-pagination-padding-y' | '--rt-pagination-per-page-gap' | '--rt-pagination-per-page-label-white-space' | '--rt-pagination-range-display' | '--rt-profile-avatar-font-size' | '--rt-profile-avatar-size' | '--rt-profile-item-content-gap' | '--rt-profile-item-font-size' | '--rt-profile-item-font-weight' | '--rt-profile-item-padding-y' | '--rt-profile-item-radius' | '--rt-profile-menu-min-width' | '--rt-profile-menu-padding' | '--rt-profile-menu-shadow' | '--rt-profile-row-inset' | '--rt-profile-theme-icon-padding' | '--rt-radius-2xl' | '--rt-radius-control' | '--rt-radius-full' | '--rt-radius-lg' | '--rt-radius-md' | '--rt-radius-ms' | '--rt-radius-none' | '--rt-radius-sm' | '--rt-radius-xl' | '--rt-radius-xs' | '--rt-shadow-card' | '--rt-shadow-card-soft' | '--rt-shadow-dialog' | '--rt-shadow-focus-ring' | '--rt-shadow-focus-ring-danger' | '--rt-shadow-lg' | '--rt-shadow-md' | '--rt-shadow-nav-panel' | '--rt-shadow-none' | '--rt-shadow-profile-menu' | '--rt-shadow-sm' | '--rt-shadow-status-dot' | '--rt-shadow-step-indicator' | '--rt-shadow-xl' | '--rt-size-1' | '--rt-size-10' | '--rt-size-100' | '--rt-size-12' | '--rt-size-16' | '--rt-size-2' | '--rt-size-20' | '--rt-size-24' | '--rt-size-3' | '--rt-size-30' | '--rt-size-4' | '--rt-size-40' | '--rt-size-5' | '--rt-size-6' | '--rt-size-60' | '--rt-size-64' | '--rt-size-8' | '--rt-slate-300' | '--rt-space-0' | '--rt-space-0-5' | '--rt-space-1' | '--rt-space-10' | '--rt-space-12' | '--rt-space-16' | '--rt-space-2' | '--rt-space-20' | '--rt-space-24' | '--rt-space-2xl' | '--rt-space-2xs' | '--rt-space-3xl' | '--rt-space-4' | '--rt-space-5' | '--rt-space-6' | '--rt-space-8' | '--rt-space-lg' | '--rt-space-md' | '--rt-space-sm' | '--rt-space-xl' | '--rt-space-xs' | '--rt-success-100' | '--rt-success-400' | '--rt-success-50' | '--rt-success-500' | '--rt-success-600' | '--rt-success-700' | '--rt-text-2xl' | '--rt-text-2xs' | '--rt-text-3xl' | '--rt-text-3xs' | '--rt-text-4xl' | '--rt-text-base' | '--rt-text-lg' | '--rt-text-md' | '--rt-text-sm' | '--rt-text-xl' | '--rt-text-xs' | '--rt-textarea-line-height' | '--rt-textarea-min-height' | '--rt-textarea-min-height-lg' | '--rt-textarea-min-height-md' | '--rt-textarea-min-height-sm' | '--rt-textarea-padding-y' | '--rt-toggle-color-border' | '--rt-toggle-color-icon' | '--rt-toggle-color-thumb' | '--rt-toggle-color-track' | '--rt-toggle-color-track-on' | '--rt-toggle-shadow-border' | '--rt-toggle-shadow-thumb' | '--rt-warning-50' | '--rt-warning-500' | '--rt-warning-600' | '--rt-warning-700' | '--rt-yellow-400' | '--rt-z-base' | '--rt-z-dropdown' | '--rt-z-fixed' | '--rt-z-modal' | '--rt-z-modal-backdrop' | '--rt-z-popover' | '--rt-z-sticky' | '--rt-z-tooltip';
1092
1103
  /** The name of a consumer's handle — a property the kit deliberately does not declare. */
1093
- type TRtConsumerHandleName = '--rt-action-bar-action-bg-hover' | '--rt-action-bar-action-color-danger' | '--rt-action-bar-action-focus-shadow' | '--rt-action-bar-action-font-size' | '--rt-action-bar-action-height' | '--rt-action-bar-action-padding-block' | '--rt-action-bar-action-padding-inline' | '--rt-action-bar-action-radius' | '--rt-action-bar-action-weight' | '--rt-action-bar-bg' | '--rt-action-bar-close-icon-size' | '--rt-action-bar-close-size' | '--rt-action-bar-color' | '--rt-action-bar-counter-font-size' | '--rt-action-bar-counter-weight' | '--rt-action-bar-font-size' | '--rt-action-bar-gap' | '--rt-action-bar-holder-bottom' | '--rt-action-bar-holder-enter-duration' | '--rt-action-bar-holder-inline' | '--rt-action-bar-holder-leave-duration' | '--rt-action-bar-icon-gap' | '--rt-action-bar-icon-size' | '--rt-action-bar-menu-bg' | '--rt-action-bar-menu-color' | '--rt-action-bar-menu-gap' | '--rt-action-bar-menu-item-font-size' | '--rt-action-bar-menu-padding' | '--rt-action-bar-menu-radius' | '--rt-action-bar-menu-shadow' | '--rt-action-bar-padding' | '--rt-action-bar-radius' | '--rt-action-bar-shadow' | '--rt-aside-bg' | '--rt-aside-content-inset' | '--rt-aside-error-margin-block' | '--rt-aside-footer-gap' | '--rt-aside-footer-inset' | '--rt-aside-footer-justify' | '--rt-aside-footer-margin' | '--rt-aside-header-back-icon-size' | '--rt-aside-header-back-size' | '--rt-aside-header-gap' | '--rt-aside-header-inset' | '--rt-aside-header-min-height' | '--rt-aside-header-subtitle-size' | '--rt-aside-header-title-leading' | '--rt-aside-header-title-size' | '--rt-aside-header-title-weight' | '--rt-aside-width' | '--rt-data-table-scrollbar-color' | '--rt-data-table-scrollbar-horizontal-height' | '--rt-data-table-scrollbar-vertical-width' | '--rt-data-table-scrollbar-width' | '--rt-dialog-bg' | '--rt-dialog-border' | '--rt-dialog-content-max-height' | '--rt-dialog-content-padding' | '--rt-dialog-footer-border' | '--rt-dialog-footer-padding' | '--rt-dialog-header-border' | '--rt-dialog-header-padding' | '--rt-dialog-title-font-size' | '--rt-dialog-title-transform' | '--rt-dialog-title-weight' | '--rt-dialog-width' | '--rt-dynamic-selector-list-actions-gap' | '--rt-dynamic-selector-list-actions-offset' | '--rt-dynamic-selector-list-actions-padding-end' | '--rt-dynamic-selector-list-add-color' | '--rt-dynamic-selector-list-controls-divider-color' | '--rt-dynamic-selector-list-controls-divider-width' | '--rt-dynamic-selector-list-controls-gap' | '--rt-dynamic-selector-list-handle-padding-end' | '--rt-dynamic-selector-list-handle-padding-start' | '--rt-dynamic-selector-list-row-padding-end' | '--rt-dynamic-selector-list-title-gap' | '--rt-dynamic-selector-popup-bg' | '--rt-dynamic-selector-popup-border-width' | '--rt-dynamic-selector-popup-button-font-size' | '--rt-dynamic-selector-popup-button-height' | '--rt-dynamic-selector-popup-empty-gap' | '--rt-dynamic-selector-popup-empty-icon-size' | '--rt-dynamic-selector-popup-empty-icon-wrap-bg' | '--rt-dynamic-selector-popup-empty-text-color' | '--rt-dynamic-selector-popup-empty-text-size' | '--rt-dynamic-selector-popup-empty-text-weight' | '--rt-dynamic-selector-popup-foot-border-width' | '--rt-dynamic-selector-popup-foot-padding' | '--rt-dynamic-selector-popup-highlight-bg' | '--rt-dynamic-selector-popup-highlight-color' | '--rt-dynamic-selector-popup-highlight-radius' | '--rt-dynamic-selector-popup-highlight-weight' | '--rt-dynamic-selector-popup-max-height' | '--rt-dynamic-selector-popup-min-height' | '--rt-dynamic-selector-popup-nav-color' | '--rt-dynamic-selector-popup-option-line-height' | '--rt-dynamic-selector-popup-option-min-height' | '--rt-dynamic-selector-popup-padding' | '--rt-dynamic-selector-popup-radius' | '--rt-dynamic-selector-popup-shadow' | '--rt-dynamic-selector-popup-width' | '--rt-header-content-max-width' | '--rt-header-height' | '--rt-icon-button-bg' | '--rt-icon-button-bg-hover' | '--rt-icon-button-size' | '--rt-icon-color-danger' | '--rt-icon-color-disabled' | '--rt-icon-color-info' | '--rt-icon-color-inverse' | '--rt-icon-color-muted' | '--rt-icon-color-primary' | '--rt-icon-color-success' | '--rt-icon-color-warning' | '--rt-icon-glyph-font' | '--rt-icon-glyph-grade' | '--rt-icon-glyph-opsz' | '--rt-icon-glyph-weight' | '--rt-icon-step-2xl' | '--rt-icon-step-3xl' | '--rt-icon-step-4xl' | '--rt-icon-step-lg' | '--rt-icon-step-md' | '--rt-icon-step-sm' | '--rt-icon-step-xl' | '--rt-icon-step-xs' | '--rt-logo-tagline' | '--rt-logo-tagline-dark' | '--rt-logo-wordmark' | '--rt-logo-wordmark-dark' | '--rt-page-header-bg' | '--rt-table-actions-bg' | '--rt-tag-color-bg' | '--rt-tag-color-border' | '--rt-tag-color-text' | '--rt-tag-letter-spacing' | '--rt-tag-padding-block' | '--rt-tag-padding-inline' | '--rt-toast-action-color' | '--rt-toast-bg' | '--rt-toast-border-color' | '--rt-toast-close-color' | '--rt-toast-color' | '--rt-toast-filled-danger-bg' | '--rt-toast-filled-danger-border-color' | '--rt-toast-filled-danger-color' | '--rt-toast-filled-info-bg' | '--rt-toast-filled-info-border-color' | '--rt-toast-filled-info-color' | '--rt-toast-filled-success-bg' | '--rt-toast-filled-success-border-color' | '--rt-toast-filled-success-color' | '--rt-toast-filled-warning-bg' | '--rt-toast-filled-warning-border-color' | '--rt-toast-filled-warning-color' | '--rt-toast-icon-color' | '--rt-toast-progress-color' | '--rt-toast-progress-height' | '--rt-workspace-aside-size' | '--rt-workspace-list-size';
1104
+ type TRtConsumerHandleName = '--rt-action-bar-action-bg-hover' | '--rt-action-bar-action-color-danger' | '--rt-action-bar-action-focus-shadow' | '--rt-action-bar-action-font-size' | '--rt-action-bar-action-height' | '--rt-action-bar-action-padding-block' | '--rt-action-bar-action-padding-inline' | '--rt-action-bar-action-radius' | '--rt-action-bar-action-weight' | '--rt-action-bar-bg' | '--rt-action-bar-close-icon-size' | '--rt-action-bar-close-size' | '--rt-action-bar-color' | '--rt-action-bar-counter-font-size' | '--rt-action-bar-counter-weight' | '--rt-action-bar-font-size' | '--rt-action-bar-gap' | '--rt-action-bar-holder-bottom' | '--rt-action-bar-holder-enter-duration' | '--rt-action-bar-holder-inline' | '--rt-action-bar-holder-leave-duration' | '--rt-action-bar-icon-gap' | '--rt-action-bar-icon-size' | '--rt-action-bar-menu-bg' | '--rt-action-bar-menu-color' | '--rt-action-bar-menu-gap' | '--rt-action-bar-menu-item-font-size' | '--rt-action-bar-menu-padding' | '--rt-action-bar-menu-radius' | '--rt-action-bar-menu-shadow' | '--rt-action-bar-padding' | '--rt-action-bar-radius' | '--rt-action-bar-shadow' | '--rt-aside-bg' | '--rt-aside-content-inset' | '--rt-aside-error-margin-block' | '--rt-aside-footer-gap' | '--rt-aside-footer-inset' | '--rt-aside-footer-justify' | '--rt-aside-footer-margin' | '--rt-aside-header-back-icon-size' | '--rt-aside-header-back-size' | '--rt-aside-header-gap' | '--rt-aside-header-inset' | '--rt-aside-header-min-height' | '--rt-aside-header-subtitle-size' | '--rt-aside-header-title-leading' | '--rt-aside-header-title-size' | '--rt-aside-header-title-weight' | '--rt-aside-width' | '--rt-data-table-scrollbar-color' | '--rt-data-table-scrollbar-horizontal-height' | '--rt-data-table-scrollbar-vertical-width' | '--rt-data-table-scrollbar-width' | '--rt-dialog-bg' | '--rt-dialog-border' | '--rt-dialog-content-max-height' | '--rt-dialog-content-padding' | '--rt-dialog-footer-border' | '--rt-dialog-footer-padding' | '--rt-dialog-header-border' | '--rt-dialog-header-padding' | '--rt-dialog-title-font-size' | '--rt-dialog-title-transform' | '--rt-dialog-title-weight' | '--rt-dialog-width' | '--rt-dynamic-selector-list-actions-gap' | '--rt-dynamic-selector-list-actions-offset' | '--rt-dynamic-selector-list-actions-padding-end' | '--rt-dynamic-selector-list-add-color' | '--rt-dynamic-selector-list-controls-divider-color' | '--rt-dynamic-selector-list-controls-divider-width' | '--rt-dynamic-selector-list-controls-gap' | '--rt-dynamic-selector-list-handle-padding-end' | '--rt-dynamic-selector-list-handle-padding-start' | '--rt-dynamic-selector-list-row-padding-end' | '--rt-dynamic-selector-list-title-gap' | '--rt-dynamic-selector-popup-bg' | '--rt-dynamic-selector-popup-border-width' | '--rt-dynamic-selector-popup-button-font-size' | '--rt-dynamic-selector-popup-button-height' | '--rt-dynamic-selector-popup-empty-gap' | '--rt-dynamic-selector-popup-empty-icon-size' | '--rt-dynamic-selector-popup-empty-icon-wrap-bg' | '--rt-dynamic-selector-popup-empty-text-color' | '--rt-dynamic-selector-popup-empty-text-size' | '--rt-dynamic-selector-popup-empty-text-weight' | '--rt-dynamic-selector-popup-foot-border-width' | '--rt-dynamic-selector-popup-foot-padding' | '--rt-dynamic-selector-popup-highlight-bg' | '--rt-dynamic-selector-popup-highlight-color' | '--rt-dynamic-selector-popup-highlight-radius' | '--rt-dynamic-selector-popup-highlight-weight' | '--rt-dynamic-selector-popup-max-height' | '--rt-dynamic-selector-popup-min-height' | '--rt-dynamic-selector-popup-nav-color' | '--rt-dynamic-selector-popup-option-line-height' | '--rt-dynamic-selector-popup-option-min-height' | '--rt-dynamic-selector-popup-padding' | '--rt-dynamic-selector-popup-radius' | '--rt-dynamic-selector-popup-shadow' | '--rt-dynamic-selector-popup-width' | '--rt-header-content-max-width' | '--rt-header-height' | '--rt-icon-button-bg' | '--rt-icon-button-bg-hover' | '--rt-icon-button-size' | '--rt-icon-color-danger' | '--rt-icon-color-disabled' | '--rt-icon-color-info' | '--rt-icon-color-inverse' | '--rt-icon-color-muted' | '--rt-icon-color-primary' | '--rt-icon-color-success' | '--rt-icon-color-warning' | '--rt-icon-glyph-font' | '--rt-icon-glyph-grade' | '--rt-icon-glyph-opsz' | '--rt-icon-glyph-weight' | '--rt-icon-step-2xl' | '--rt-icon-step-3xl' | '--rt-icon-step-4xl' | '--rt-icon-step-lg' | '--rt-icon-step-md' | '--rt-icon-step-sm' | '--rt-icon-step-xl' | '--rt-icon-step-xs' | '--rt-logo-tagline' | '--rt-logo-tagline-dark' | '--rt-logo-wordmark' | '--rt-logo-wordmark-dark' | '--rt-page-header-bg' | '--rt-side-menu-sub-item-letter-spacing' | '--rt-table-actions-bg' | '--rt-tag-color-bg' | '--rt-tag-color-border' | '--rt-tag-color-text' | '--rt-tag-letter-spacing' | '--rt-tag-padding-block' | '--rt-tag-padding-inline' | '--rt-toast-action-color' | '--rt-toast-bg' | '--rt-toast-border-color' | '--rt-toast-close-color' | '--rt-toast-color' | '--rt-toast-filled-danger-bg' | '--rt-toast-filled-danger-border-color' | '--rt-toast-filled-danger-color' | '--rt-toast-filled-info-bg' | '--rt-toast-filled-info-border-color' | '--rt-toast-filled-info-color' | '--rt-toast-filled-success-bg' | '--rt-toast-filled-success-border-color' | '--rt-toast-filled-success-color' | '--rt-toast-filled-warning-bg' | '--rt-toast-filled-warning-border-color' | '--rt-toast-filled-warning-color' | '--rt-toast-icon-color' | '--rt-toast-progress-color' | '--rt-toast-progress-height' | '--rt-workspace-aside-size' | '--rt-workspace-list-size';
1094
1105
  /** All the styling properties declared by the kit. */
1095
1106
  declare const RT_DESIGN_TOKEN_NAMES: readonly TRtDesignTokenName[];
1096
1107
  /** All the consumer's handles: the value comes from the application, until then the fallback works. */
@@ -6,6 +6,7 @@ import { IRtIcon } from '@rt-tools/ui-kit-v2/core';
6
6
  import * as i1 from '@rt-tools/ui-kit-v2/tooltip';
7
7
  import * as i2 from '@rt-tools/ui-kit-v2/radius';
8
8
  import { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
9
+ import { IRtIconButton } from '@rt-tools/ui-kit-v2/icon-button';
9
10
 
10
11
  /**
11
12
  * Помечает `<ng-template>` своего значка пункта меню. Кит ставит содержимое на место значка
@@ -193,6 +194,8 @@ declare class RtMenuComponent {
193
194
  * не доходят: семья, нарисованная своим набором, отдаёт его панели этим входом.
194
195
  */
195
196
  readonly panelClass: InputSignal<string | string[]>;
197
+ /** Размер кнопки-триггера: мельче `md` — в плотной строке рядом с другими действиями строки. */
198
+ readonly triggerSize: InputSignal<IRtIconButton.Size>;
196
199
  /** Размер панели: компактная — у меню действий строки таблицы. */
197
200
  readonly size: InputSignal<IRtMenu.Size>;
198
201
  /** Триггер отключён — меню не открыть. */
@@ -211,7 +214,7 @@ declare class RtMenuComponent {
211
214
  protected onSelect(): void;
212
215
  protected onKeydown(event: KeyboardEvent): void;
213
216
  static ɵfac: i0.ɵɵFactoryDeclaration<RtMenuComponent, never>;
214
- static ɵcmp: i0.ɵɵComponentDeclaration<RtMenuComponent, "rt-menu", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "openedChange": "openedChange"; }, never, ["*"], true, never>;
217
+ static ɵcmp: i0.ɵɵComponentDeclaration<RtMenuComponent, "rt-menu", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; "triggerSize": { "alias": "triggerSize"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "openedChange": "openedChange"; }, never, ["*"], true, never>;
215
218
  }
216
219
 
217
220
  export { IRtMenu, RT_MENU_SELECT_EVENT, RtMenuComponent, RtMenuItemComponent, RtMenuItemIconDirective };