@rt-tools/ui-kit 0.6.1 → 0.7.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.
- package/fesm2022/rt-tools-ui-kit.mjs +240 -10
- package/fesm2022/rt-tools-ui-kit.mjs.map +1 -1
- package/package.json +1 -1
- package/rt-tools-ui-kit-0.7.1.tgz +0 -0
- package/src/lib/ui-kit/side-menu/menu/rtui-side-menu.component.scss +24 -3
- package/src/lib/ui-kit/side-menu/menu-sub-item/rtui-side-menu-sub-item.component.scss +19 -0
- package/types/rt-tools-ui-kit.d.ts +30 -7
- package/rt-tools-ui-kit-0.6.1.tgz +0 -0
package/package.json
CHANGED
|
Binary file
|
|
@@ -369,8 +369,23 @@ $side-menu: (
|
|
|
369
369
|
// справа от значка и четыре у самого префикса. В узкой панели это половина
|
|
370
370
|
// строки запроса, поэтому зазор сведён к одной ступени. Ручки под него у поля
|
|
371
371
|
// формы нет: правится сам отступ значка.
|
|
372
|
+
// Слева отступ равен тому, с каким стоит крестик очистки у правого края поля:
|
|
373
|
+
// измерено в витрине, у крестика 9,59 пикселя — своей геометрией кнопки, а не
|
|
374
|
+
// ступенью. Ближайшая ступень — десять; расхождение в 0,41 пикселя глазом не
|
|
375
|
+
// видно, а прежние двенадцать читались как перекос лупы внутрь поля.
|
|
376
|
+
// Отступ отмеряется от края поля, а не от того, что останется после обёртки:
|
|
377
|
+
// боковой отступ обёртки готового поля зависит от набора, который взял кит, и в
|
|
378
|
+
// приложении-потребителе он двенадцать пикселей при нуле в витрине. Правка
|
|
379
|
+
// одного значка сходилась поэтому только здесь, а у потребителя лупа стояла в
|
|
380
|
+
// двадцати двух пикселях против 9,6 у крестика. Обнулено — и отступ значка
|
|
381
|
+
// становится всем отступом лупы, где бы кит ни стоял.
|
|
382
|
+
&::ng-deep .mat-mdc-text-field-wrapper,
|
|
383
|
+
&::ng-deep .mat-mdc-form-field-icon-prefix {
|
|
384
|
+
padding-left: 0;
|
|
385
|
+
}
|
|
386
|
+
|
|
372
387
|
&::ng-deep .mat-mdc-form-field-icon-prefix > .mat-icon {
|
|
373
|
-
padding: 0 var(--rt-spacing-4) 0 var(--rt-spacing-
|
|
388
|
+
padding: 0 var(--rt-spacing-4) 0 var(--rt-spacing-10);
|
|
374
389
|
}
|
|
375
390
|
}
|
|
376
391
|
|
|
@@ -392,9 +407,15 @@ $side-menu: (
|
|
|
392
407
|
--mat-form-field-container-vertical-padding: var(--rt-spacing-8);
|
|
393
408
|
|
|
394
409
|
// Зазор между значком и запросом сведён к ступени по той же причине, что и на широком
|
|
395
|
-
// экране: готовое поле разводит их на шестнадцать пикселей.
|
|
410
|
+
// экране: готовое поле разводит их на шестнадцать пикселей. Отступ слева и обнуление
|
|
411
|
+
// отступа обёртки — те же, что и там: поле одно и то же, и разъезжаться им незачем.
|
|
412
|
+
&::ng-deep .mat-mdc-text-field-wrapper,
|
|
413
|
+
&::ng-deep .mat-mdc-form-field-icon-prefix {
|
|
414
|
+
padding-left: 0;
|
|
415
|
+
}
|
|
416
|
+
|
|
396
417
|
&::ng-deep .mat-mdc-form-field-icon-prefix > .mat-icon {
|
|
397
|
-
padding: 0 var(--rt-spacing-4) 0 var(--rt-spacing-
|
|
418
|
+
padding: 0 var(--rt-spacing-4) 0 var(--rt-spacing-10);
|
|
398
419
|
}
|
|
399
420
|
}
|
|
400
421
|
|
|
@@ -42,6 +42,17 @@
|
|
|
42
42
|
min-width: min(var(--rt-side-menu-sub-menu-item-width), 100%);
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
// Пункт под подсветкой клавиатуры. Отмечен рамкой, а не заливкой: заливка здесь уже занята
|
|
46
|
+
// активным адресом, и два разных смысла одним видом читались бы как один.
|
|
47
|
+
// Толщина стоит числом: у этого кита набор токенов разводит только цвета рамок, шкалы
|
|
48
|
+
// толщин в нём нет вовсе — взятый оттуда токен приходит пустым, и рамка не рисуется вовсе.
|
|
49
|
+
// Так и вышло: первый кадр показал список без единой отметки.
|
|
50
|
+
&--highlighted {
|
|
51
|
+
border-radius: var(--rt-radius-xl);
|
|
52
|
+
outline: 2px solid var(--rt-border-focus);
|
|
53
|
+
outline-offset: -2px;
|
|
54
|
+
}
|
|
55
|
+
|
|
45
56
|
.rtui-side-menu-sub-item-title {
|
|
46
57
|
display: flex;
|
|
47
58
|
align-items: center;
|
|
@@ -109,6 +120,14 @@
|
|
|
109
120
|
background-color: var(--mat-list-active-indicator-color);
|
|
110
121
|
}
|
|
111
122
|
|
|
123
|
+
// Отметка подсветки — та же, что у пункта со ссылкой: заголовок папки попадает под
|
|
124
|
+
// ходьбу стрелками наравне с ним.
|
|
125
|
+
&--highlighted {
|
|
126
|
+
border-radius: var(--rt-radius-xl);
|
|
127
|
+
outline: 2px solid var(--rt-border-focus);
|
|
128
|
+
outline-offset: -2px;
|
|
129
|
+
}
|
|
130
|
+
|
|
112
131
|
&__icon {
|
|
113
132
|
color: var(--mdc-list-list-item-leading-icon-color);
|
|
114
133
|
margin-inline: var(--mat-list-list-item-leading-icon-start-space) var(--mat-list-list-item-leading-icon-end-space);
|
|
@@ -164,11 +164,18 @@ declare class RtuiScrollableContainerComponent {
|
|
|
164
164
|
* Меню, в котором стоит подпункт. Токен вместо самого компонента: подпункт брал его классом, а
|
|
165
165
|
* меню объявляет подпункт в своих импортах — получался круг «меню → подпункт → меню».
|
|
166
166
|
*
|
|
167
|
-
* Подпункту нужно от меню
|
|
168
|
-
*
|
|
167
|
+
* Подпункту нужно от меню три значения: какие пункты сейчас отмечены активными, какие папки стоят
|
|
168
|
+
* раскрытыми и что набрано в поиске — последнее затем, чтобы отметить в подписи то, чем она совпала.
|
|
169
|
+
*
|
|
170
|
+
* Активность и раскрытость разошлись, когда поиск научился спускаться внутрь папок: активным
|
|
171
|
+
* остаётся адрес, на котором человек стоит, а раскрытой — всякая папка, в которой нашлось
|
|
172
|
+
* совпадение. Одно значение на двоих раскрывало бы только папку текущего адреса, то есть прятало бы
|
|
173
|
+
* ровно то, что человек искал.
|
|
169
174
|
*/
|
|
170
175
|
interface IRtuiSideMenuHost {
|
|
171
176
|
readonly activeMenuIds: Signal<Array<string | number>>;
|
|
177
|
+
readonly expandedMenuIds: Signal<Array<string | number>>;
|
|
178
|
+
readonly highlightedMenuId: Signal<string | number | null>;
|
|
172
179
|
readonly subMenuQuery: Signal<string>;
|
|
173
180
|
}
|
|
174
181
|
declare const RTUI_SIDE_MENU: InjectionToken<IRtuiSideMenuHost>;
|
|
@@ -266,11 +273,9 @@ declare class RtuiSideMenuFooterDirective {
|
|
|
266
273
|
declare class RtuiSideMenuComponent {
|
|
267
274
|
#private;
|
|
268
275
|
/**
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
|
|
272
|
-
/**
|
|
273
|
-
* Натянутая ширина панели. Кладётся своим свойством, а не тем, каким ширину задаёт
|
|
276
|
+
* Натянутая ширина панели. Своего выбора нет — переменная не ставится вовсе, и ширину берёт
|
|
277
|
+
* набор токенов: своё число здесь подменило бы его молча.
|
|
278
|
+
* Кладётся своим свойством, а не тем, каким ширину задаёт
|
|
274
279
|
* потребитель: панель берёт наибольшее из двух, и заданная оформлением ширина остаётся нижним
|
|
275
280
|
* пределом сама по себе. Числом в ките этот предел назвать нечем — ширину знает потребитель.
|
|
276
281
|
*/
|
|
@@ -297,6 +302,18 @@ declare class RtuiSideMenuComponent {
|
|
|
297
302
|
protected readonly subMenuOpened: Signal<boolean>;
|
|
298
303
|
/** Что видно в подменю: отобранные пункты того набора, который его сейчас наполняет. */
|
|
299
304
|
protected readonly visibleSubMenuItems: Signal<ISideMenu.Item[]>;
|
|
305
|
+
/**
|
|
306
|
+
* Какие папки подменю стоят раскрытыми. Публично: подпункт берёт раскрытость отсюда — своей у
|
|
307
|
+
* него нет, а его собственная разметка вложена в него же на любую глубину.
|
|
308
|
+
*
|
|
309
|
+
* Пустой запрос отдаёт прежнюю раскрытость, ту, что была до набора: раскрытым остаётся только
|
|
310
|
+
* раздел текущего адреса. Непустой добавляет к ней все папки, в которых нашлось совпадение, —
|
|
311
|
+
* иначе результат поиска лежит за закрытым заголовком и человеку нужно нажать ещё раз, чтобы
|
|
312
|
+
* увидеть то, что он уже нашёл.
|
|
313
|
+
*/
|
|
314
|
+
readonly expandedMenuIds: Signal<Array<string | number>>;
|
|
315
|
+
/** Пункт под подсветкой клавиатуры. Публично: отмечает его подпункт, своего состояния у него нет. */
|
|
316
|
+
readonly highlightedMenuId: Signal<string | number | null>;
|
|
300
317
|
readonly headerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>>;
|
|
301
318
|
readonly footerTpl: Signal<TNullable<TemplateRef<Type<unknown>>>>;
|
|
302
319
|
/** Что набрано в поиске. Публично: подпункт берёт запрос отсюда, чтобы отметить совпавшее. */
|
|
@@ -358,6 +375,12 @@ declare class RtuiSideMenuComponent {
|
|
|
358
375
|
*/
|
|
359
376
|
onResizeStart(event: MouseEvent): void;
|
|
360
377
|
onSubMenuSearch(query: string): void;
|
|
378
|
+
/**
|
|
379
|
+
* Нажата клавиша в поле поиска. Поле фокуса не теряет и раздаёт клавиши списку: иначе набор
|
|
380
|
+
* запроса прерывался бы на первой же стрелке. Умолчание отменяется только у съеденной клавиши —
|
|
381
|
+
* буквы уходят полю нетронутыми.
|
|
382
|
+
*/
|
|
383
|
+
onSearchKeydown(event: KeyboardEvent): void;
|
|
361
384
|
closeMobileMenu(): void;
|
|
362
385
|
clickSubMenuAdditional({ data, event }: {
|
|
363
386
|
data: ISideMenu.ItemData;
|
|
Binary file
|