@rt-tools/ui-kit-v2 0.34.2 → 0.34.4
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/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-action-bar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-aside.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-copy-value.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-counter.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +4 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs +4 -0
- package/fesm2022/rt-tools-ui-kit-v2-data-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +4 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-dialog.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-file-card.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs +103 -6
- package/fesm2022/rt-tools-ui-kit-v2-icon-button.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-image-upload.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-inline-edit.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-input-number.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs +6 -1
- package/fesm2022/rt-tools-ui-kit-v2-input.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-message.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-pagination.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-pdf-viewer.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-pdf-viewer.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-photo-viewer.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +10 -0
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +6 -0
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-speed-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs +8 -0
- package/fesm2022/rt-tools-ui-kit-v2-table.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-theme-toggle.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-thread-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-toast.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs +14 -2
- package/fesm2022/rt-tools-ui-kit-v2-tooltip.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +2 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/components/icon-button/CONTEXT.md +32 -16
- package/src/lib/components/icon-button/rt-icon-button.component.scss +17 -9
- package/src/lib/components/input/CONTEXT.md +6 -0
- package/src/lib/components/tooltip/CONTEXT.md +3 -0
- package/src/styles/_form.scss +14 -1
- package/styles/tokens.css +13 -1
- package/types/rt-tools-ui-kit-v2-icon-button.d.ts +38 -2
- package/types/rt-tools-ui-kit-v2-input.d.ts +2 -0
- package/types/rt-tools-ui-kit-v2-tooltip.d.ts +6 -1
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
display: inline-flex;
|
|
48
48
|
width: var(--rt-icon-button-size, var(--rt-icon-button-size-step));
|
|
49
49
|
height: var(--rt-icon-button-size, var(--rt-icon-button-size-step));
|
|
50
|
+
box-sizing: border-box;
|
|
50
51
|
align-items: center;
|
|
51
52
|
justify-content: center;
|
|
52
53
|
padding: 0;
|
|
@@ -56,6 +57,7 @@
|
|
|
56
57
|
box-shadow: var(--rt-icon-button-shadow);
|
|
57
58
|
color: var(--rt-icon-button-color);
|
|
58
59
|
cursor: pointer;
|
|
60
|
+
text-decoration: none;
|
|
59
61
|
transition:
|
|
60
62
|
background-color var(--rt-icon-button-transition-duration) ease,
|
|
61
63
|
box-shadow var(--rt-icon-button-transition-duration) ease;
|
|
@@ -92,14 +94,14 @@
|
|
|
92
94
|
|
|
93
95
|
/* Подъём под указателем — ручка для потребителя, как тень покоя; по умолчанию равен
|
|
94
96
|
тени покоя, и кнопка без подъёма под указателем не меняется. */
|
|
95
|
-
&:hover:not(:disabled) {
|
|
97
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
96
98
|
box-shadow: var(--rt-icon-button-shadow-hover);
|
|
97
99
|
}
|
|
98
100
|
|
|
99
101
|
/* Заливка под указателем читается под ручкой `--rt-icon-button-bg-hover`; без неё каждый
|
|
100
102
|
вид берёт свою, как прежде. */
|
|
101
103
|
&--ghost {
|
|
102
|
-
&:hover:not(:disabled) {
|
|
104
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
103
105
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));
|
|
104
106
|
color: var(--rt-icon-button-color-hover);
|
|
105
107
|
}
|
|
@@ -114,7 +116,7 @@
|
|
|
114
116
|
|
|
115
117
|
color: var(--rt-color-action-on-primary);
|
|
116
118
|
|
|
117
|
-
&:hover:not(:disabled) {
|
|
119
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
118
120
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-color-action-primary-hover));
|
|
119
121
|
}
|
|
120
122
|
}
|
|
@@ -124,7 +126,7 @@
|
|
|
124
126
|
|
|
125
127
|
color: var(--rt-color-text-primary);
|
|
126
128
|
|
|
127
|
-
&:hover:not(:disabled) {
|
|
129
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
128
130
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));
|
|
129
131
|
}
|
|
130
132
|
}
|
|
@@ -132,7 +134,7 @@
|
|
|
132
134
|
&--danger {
|
|
133
135
|
color: var(--rt-color-state-danger);
|
|
134
136
|
|
|
135
|
-
&:hover:not(:disabled) {
|
|
137
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
136
138
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));
|
|
137
139
|
}
|
|
138
140
|
|
|
@@ -144,7 +146,7 @@
|
|
|
144
146
|
&--success {
|
|
145
147
|
color: var(--rt-color-state-success);
|
|
146
148
|
|
|
147
|
-
&:hover:not(:disabled) {
|
|
149
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
148
150
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));
|
|
149
151
|
}
|
|
150
152
|
|
|
@@ -156,7 +158,7 @@
|
|
|
156
158
|
&--warning {
|
|
157
159
|
color: var(--rt-color-state-warning);
|
|
158
160
|
|
|
159
|
-
&:hover:not(:disabled) {
|
|
161
|
+
&:hover:not(:disabled, [aria-disabled='true']) {
|
|
160
162
|
background-color: var(--rt-icon-button-bg-hover, var(--rt-icon-button-color-bg-hover));
|
|
161
163
|
}
|
|
162
164
|
|
|
@@ -168,8 +170,9 @@
|
|
|
168
170
|
/* Цвет неактивной кнопки ставится рисунку значка: по умолчанию `currentcolor`, то есть цвет
|
|
169
171
|
значка, и свой вид остаётся прежним. Не самому значку — переданный цвет он ставит себе
|
|
170
172
|
встроенным стилем, и правилом его не перебить. Заливка остаётся долей заливки покоя: по умолчанию
|
|
171
|
-
вся, и свой вид прежний. */
|
|
172
|
-
&:disabled
|
|
173
|
+
вся, и свой вид прежний. У ссылки нет `:disabled`: недоступную отмечает `aria-disabled`. */
|
|
174
|
+
&:disabled,
|
|
175
|
+
&[aria-disabled='true'] {
|
|
173
176
|
background-color: color-mix(
|
|
174
177
|
in srgb,
|
|
175
178
|
var(--rt-icon-button-bg, var(--rt-icon-button-bg-variant)) var(--rt-icon-button-disabled-fill),
|
|
@@ -183,6 +186,11 @@
|
|
|
183
186
|
}
|
|
184
187
|
}
|
|
185
188
|
|
|
189
|
+
/* Кнопка, спрятанная под ссылкой: `display` блока сильнее `[hidden]` браузера. */
|
|
190
|
+
&[hidden] {
|
|
191
|
+
display: none;
|
|
192
|
+
}
|
|
193
|
+
|
|
186
194
|
/* Фокус от мыши и касания кольца не рисует, как у Material: браузер ставит `:focus-visible` и
|
|
187
195
|
на фокус из кода после нажатия мышью — окно открылось кликом и перевело фокус на кнопку. */
|
|
188
196
|
&:focus-visible:not(.cdk-mouse-focused, .cdk-touch-focused) {
|
|
@@ -28,6 +28,10 @@
|
|
|
28
28
|
| `iconLeftClick` / `iconRightClick` | `MouseEvent` |
|
|
29
29
|
| `cleared` | `void` |
|
|
30
30
|
|
|
31
|
+
| метод | что делает |
|
|
32
|
+
| ----------------- | ---------------------------- |
|
|
33
|
+
| `focus(options?)` | фокусирует поле ввода внутри |
|
|
34
|
+
|
|
31
35
|
Значение — `string`. `maxlength` уходит атрибутом на поле: браузер не даёт набрать больше, а
|
|
32
36
|
значение из кода не режет, поэтому проверка формы остаётся за приложением.
|
|
33
37
|
|
|
@@ -59,6 +63,8 @@
|
|
|
59
63
|
строки руками означал бы своё поле ввода времени рядом с китом.
|
|
60
64
|
- Клик по рамке (падинги принадлежат host-у, а не `<input>`) переводит фокус в поле — кроме
|
|
61
65
|
кликов по самому полю и по интерактивному постфиксу.
|
|
66
|
+
- `focus()` фокусирует поле из кода приложения — например, поиск, когда открылась его панель.
|
|
67
|
+
Искать `input` внутри компонента не нужно.
|
|
62
68
|
- Режим плоского чтения включает **вмещающий [`rt-field`](../field/CONTEXT.md)**, а не вход
|
|
63
69
|
компонента: `[readonly]` стоит на поле-обёртке. Пустое значение в этом режиме рисуется прочерком.
|
|
64
70
|
- Подсветка ошибки (`rt-input--invalid`) включается сама после касания — см. основу полей.
|
|
@@ -30,6 +30,9 @@ no-op, а не пустая панель под курсором. Поэтому
|
|
|
30
30
|
|
|
31
31
|
- Показывают и наведение, и фокус с клавиатуры; прячут уход курсора, потеря фокуса и **клик**
|
|
32
32
|
(панель мешала бы смотреть на результат нажатия).
|
|
33
|
+
- **Escape** прячет открытую подсказку и гасится на хосте; фокус остаётся на хосте, следующее
|
|
34
|
+
наведение или фокус с клавиатуры показывают её снова. При закрытой подсказке Escape идёт дальше,
|
|
35
|
+
и диалог или панель выше по дереву закрываются, как раньше.
|
|
33
36
|
- У переключателя ставят `rtTooltipHideOnClick="false"`: клик оставляет подсказку, а новый текст
|
|
34
37
|
`[rtTooltip]` («Включить» → «Выключить») появляется в открытой панели на месте. Отложенный показ клик
|
|
35
38
|
снимает при любом значении, поэтому касание на тач-экране подсказку не показывает.
|
package/src/styles/_form.scss
CHANGED
|
@@ -60,10 +60,13 @@
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
/* Строка контрола: один ряд колонки. Поле занимает строку целиком — иначе каждый
|
|
63
|
-
потребитель дописывает ширину сам. Зазор строки разводит элементы в ряду.
|
|
63
|
+
потребитель дописывает ширину сам. Зазор строки разводит элементы в ряду. Строка
|
|
64
|
+
переносит элементы: две кнопки с длинными подписями на узкой панели иначе не встают
|
|
65
|
+
в ряд, и вторая выходит за край. */
|
|
64
66
|
&__control-item {
|
|
65
67
|
display: flex;
|
|
66
68
|
width: 100%;
|
|
69
|
+
flex-wrap: wrap;
|
|
67
70
|
align-items: center;
|
|
68
71
|
justify-content: flex-start;
|
|
69
72
|
gap: var(--rt-space-xl);
|
|
@@ -237,4 +240,14 @@
|
|
|
237
240
|
gap: var(--rt-space-md);
|
|
238
241
|
}
|
|
239
242
|
}
|
|
243
|
+
|
|
244
|
+
/* На узком экране строка из одних кнопок встаёт столбиком, кнопки во всю ширину, порядок
|
|
245
|
+
прежний. Порог ниже порога панели: на 768 точках кнопки ещё стоят в ряд. Строка с полем
|
|
246
|
+
рядом с кнопкой сюда не попадает и переносится общим правилом. */
|
|
247
|
+
@media (width <= #{bp.$rt-bp-sm}) {
|
|
248
|
+
.rt-form__control-item:has(> .rt-button):not(:has(> :not(.rt-button))) {
|
|
249
|
+
flex-direction: column;
|
|
250
|
+
align-items: stretch;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
240
253
|
}
|
package/styles/tokens.css
CHANGED
|
@@ -7454,11 +7454,14 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
7454
7454
|
}
|
|
7455
7455
|
.rt-form {
|
|
7456
7456
|
/* Строка контрола: один ряд колонки. Поле занимает строку целиком — иначе каждый
|
|
7457
|
-
потребитель дописывает ширину сам. Зазор строки разводит элементы в ряду.
|
|
7457
|
+
потребитель дописывает ширину сам. Зазор строки разводит элементы в ряду. Строка
|
|
7458
|
+
переносит элементы: две кнопки с длинными подписями на узкой панели иначе не встают
|
|
7459
|
+
в ряд, и вторая выходит за край. */
|
|
7458
7460
|
}
|
|
7459
7461
|
.rt-form__control-item {
|
|
7460
7462
|
display: flex;
|
|
7461
7463
|
width: 100%;
|
|
7464
|
+
flex-wrap: wrap;
|
|
7462
7465
|
align-items: center;
|
|
7463
7466
|
justify-content: flex-start;
|
|
7464
7467
|
gap: var(--rt-space-xl);
|
|
@@ -7644,6 +7647,15 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
7644
7647
|
gap: var(--rt-space-md);
|
|
7645
7648
|
}
|
|
7646
7649
|
}
|
|
7650
|
+
/* На узком экране строка из одних кнопок встаёт столбиком, кнопки во всю ширину, порядок
|
|
7651
|
+
прежний. Порог ниже порога панели: на 768 точках кнопки ещё стоят в ряд. Строка с полем
|
|
7652
|
+
рядом с кнопкой сюда не попадает и переносится общим правилом. */
|
|
7653
|
+
@media (width <= 480px) {
|
|
7654
|
+
.rt-form__control-item:has(> .rt-button):not(:has(> :not(.rt-button))) {
|
|
7655
|
+
flex-direction: column;
|
|
7656
|
+
align-items: stretch;
|
|
7657
|
+
}
|
|
7658
|
+
}
|
|
7647
7659
|
}
|
|
7648
7660
|
@layer rt-kit.components {
|
|
7649
7661
|
.rt-button {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BooleanInput, NumberInput } from "@angular/cdk/coercion";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
-
import { InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal } from "@angular/core";
|
|
3
|
+
import { ElementRef, InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal } from "@angular/core";
|
|
4
|
+
import { RouterLink } from "@angular/router";
|
|
4
5
|
import { IRtIcon } from "@rt-tools/ui-kit-v2/core";
|
|
5
6
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
6
7
|
/**
|
|
@@ -19,11 +20,14 @@ export declare namespace IRtIconButton {
|
|
|
19
20
|
type Size = '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
20
21
|
/** HTML-тип нативного `<button>`. */
|
|
21
22
|
type Type = 'button' | 'submit';
|
|
23
|
+
/** Какую панель открывает кнопка — значения `aria-haspopup`. */
|
|
24
|
+
type HasPopup = 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';
|
|
22
25
|
}
|
|
23
26
|
/**
|
|
24
27
|
* Универсальная icon-only кнопка кита.
|
|
25
28
|
*
|
|
26
|
-
* Рендерит свой собственный `<button type="...">` внутри template (НЕ host-button)
|
|
29
|
+
* Рендерит свой собственный `<button type="...">` внутри template (НЕ host-button), а с входом
|
|
30
|
+
* `link` — ссылку `<a>` с тем же видом: её можно открыть в новой вкладке, и скринридер называет её ссылкой.
|
|
27
31
|
* Все цвета и размеры — через семантические `--rt-*` токены; геометрия квадрата
|
|
28
32
|
* берётся из `--rt-icon-button-size`, а без него — из шага `size`. Свойство, заданное на теге
|
|
29
33
|
* `<rt-icon-button>` или выше, доходит до кнопки; так же и `--rt-icon-button-bg`.
|
|
@@ -44,6 +48,14 @@ export declare class RtIconButtonComponent {
|
|
|
44
48
|
* должна остаться большой — в неё целятся пальцем.
|
|
45
49
|
*/
|
|
46
50
|
protected readonly resolvedIconSize: Signal<IRtIcon.Size>;
|
|
51
|
+
protected readonly buttonEl: Signal<ElementRef<HTMLButtonElement> | undefined>;
|
|
52
|
+
protected readonly linkEl: Signal<ElementRef<HTMLAnchorElement> | undefined>;
|
|
53
|
+
/** Компонент рисует ссылку: задан `link`. */
|
|
54
|
+
protected readonly isLink: Signal<boolean>;
|
|
55
|
+
/** Адрес ссылки: у недоступной или загружающейся его нет, и ссылка никуда не ведёт. */
|
|
56
|
+
protected readonly linkTarget: Signal<RouterLink['routerLink']>;
|
|
57
|
+
/** Недоступная ссылка выпадает из порядка Tab, как отключённая кнопка. */
|
|
58
|
+
protected readonly linkTabIndex: Signal<number>;
|
|
47
59
|
/** Кнопка отключена, если установлен disabled ИЛИ loading. */
|
|
48
60
|
protected readonly isDisabled: Signal<boolean>;
|
|
49
61
|
/**
|
|
@@ -110,10 +122,24 @@ export declare class RtIconButtonComponent {
|
|
|
110
122
|
* кнопка ничего не раскрывает, и атрибута нет.
|
|
111
123
|
*/
|
|
112
124
|
readonly expanded: InputSignal<boolean | null>;
|
|
125
|
+
/**
|
|
126
|
+
* Какую панель открывает кнопка — превращается в `aria-haspopup`: `'menu'` у кнопки, которая
|
|
127
|
+
* раскрывает меню. `null` — атрибута нет.
|
|
128
|
+
*/
|
|
129
|
+
readonly ariaHaspopup: InputSignal<IRtIconButton.HasPopup | null>;
|
|
130
|
+
/**
|
|
131
|
+
* Команды маршрута приложения, как у `routerLink`. Задан — компонент рисует ссылку `<a href>` с тем
|
|
132
|
+
* же видом, подсказкой и рябью: Ctrl/Cmd-click, Shift-click, средняя кнопка и контекстное меню
|
|
133
|
+
* браузера открывают её в новой вкладке или окне. `type`, `active` и `aria-pressed` у ссылки не
|
|
134
|
+
* пишутся. `null` — обычная кнопка.
|
|
135
|
+
*/
|
|
136
|
+
readonly link: InputSignal<RouterLink['routerLink']>;
|
|
113
137
|
/** Бейдж-индикатор (dot top-right через BEM-модификатор). */
|
|
114
138
|
readonly indicator: InputSignalWithTransform<boolean, BooleanInput>;
|
|
115
139
|
/** Эмиттит MouseEvent при клике (только когда не disabled и не loading). */
|
|
116
140
|
readonly clicked: OutputEmitterRef<MouseEvent>;
|
|
141
|
+
/** Фокусирует кнопку или ссылку внутри — например, когда закрылось меню, которое она открыла. */
|
|
142
|
+
focus(options?: FocusOptions): void;
|
|
117
143
|
protected onClick(event: MouseEvent): void;
|
|
118
144
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtIconButtonComponent, never>;
|
|
119
145
|
static ɵcmp: i0.ɵɵComponentDeclaration<RtIconButtonComponent, "rt-icon-button", never, {
|
|
@@ -197,6 +223,16 @@ export declare class RtIconButtonComponent {
|
|
|
197
223
|
"required": false;
|
|
198
224
|
"isSignal": true;
|
|
199
225
|
};
|
|
226
|
+
"ariaHaspopup": {
|
|
227
|
+
"alias": "ariaHaspopup";
|
|
228
|
+
"required": false;
|
|
229
|
+
"isSignal": true;
|
|
230
|
+
};
|
|
231
|
+
"link": {
|
|
232
|
+
"alias": "link";
|
|
233
|
+
"required": false;
|
|
234
|
+
"isSignal": true;
|
|
235
|
+
};
|
|
200
236
|
"indicator": {
|
|
201
237
|
"alias": "indicator";
|
|
202
238
|
"required": false;
|
|
@@ -84,6 +84,8 @@ export declare class RtInputComponent extends RtFormControlBase<string> {
|
|
|
84
84
|
* Поэтому расхождение с полем пишется в него сразу.
|
|
85
85
|
*/
|
|
86
86
|
writeValue(value: string | null): void;
|
|
87
|
+
/** Фокусирует поле ввода внутри — например, поиск, когда открылась его панель. */
|
|
88
|
+
focus(options?: FocusOptions): void;
|
|
87
89
|
protected getEmptyValue(): string;
|
|
88
90
|
protected focusAfterClear(): void;
|
|
89
91
|
/**
|
|
@@ -32,7 +32,7 @@ export declare namespace IRtTooltip {
|
|
|
32
32
|
* режется `overflow: hidden` предками (таблицы, aside, карточки).
|
|
33
33
|
*
|
|
34
34
|
* Триггеры: `mouseenter` и фокус с клавиатуры показывают (с задержкой `SHOW_DELAY_MS`),
|
|
35
|
-
* `mouseleave`/`focusout`/`click
|
|
35
|
+
* `mouseleave`/`focusout`/`click`/Escape прячут. Фокус, поставленный мышью или кодом, подсказку не
|
|
36
36
|
* показывает, как у Material: меню возвращает фокус кнопке после выбора пункта мышью, и
|
|
37
37
|
* подсказка кнопки всплывала поверх того, что пункт открыл. Пустой текст → no-op (директива
|
|
38
38
|
* выключена), поэтому её можно безусловно вешать на icon-кнопки и включать
|
|
@@ -82,6 +82,11 @@ export declare class RtTooltipDirective implements OnDestroy {
|
|
|
82
82
|
protected show(): void;
|
|
83
83
|
protected hide(): void;
|
|
84
84
|
protected onClick(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Escape прячет подсказку и снимает отложенный показ, фокус остаётся на хосте. Событие гасится,
|
|
87
|
+
* только когда панель была открыта: при закрытой Escape доходит до диалога или панели выше.
|
|
88
|
+
*/
|
|
89
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
85
90
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtTooltipDirective, never>;
|
|
86
91
|
static ɵdir: i0.ɵɵDirectiveDeclaration<RtTooltipDirective, "[rtTooltip]", ["rtTooltip"], {
|
|
87
92
|
"text": {
|