@rt-tools/ui-kit-v2 0.29.1 → 0.31.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/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs +23 -29
- package/fesm2022/rt-tools-ui-kit-v2-autocomplete.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +223 -3
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-data-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs +1 -2
- package/fesm2022/rt-tools-ui-kit-v2-draggable-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-list.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs +277 -904
- package/fesm2022/rt-tools-ui-kit-v2-dynamic-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-filter-control.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-hybrid-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs +35 -48
- package/fesm2022/rt-tools-ui-kit-v2-multiselect.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-pdf-viewer.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-pdf-viewer.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +4 -4
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs +37 -181
- package/fesm2022/rt-tools-ui-kit-v2-select.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-service-block.mjs +131 -0
- package/fesm2022/rt-tools-ui-kit-v2-service-block.mjs.map +1 -0
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs +5 -36
- package/fesm2022/rt-tools-ui-kit-v2-side-menu.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs +2 -3
- package/fesm2022/rt-tools-ui-kit-v2-tag.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-toolbar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs +8 -13
- package/fesm2022/rt-tools-ui-kit-v2-tree-selector.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs +12 -7
- package/fesm2022/rt-tools-ui-kit-v2-tree.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2.mjs +1 -0
- package/package.json +5 -1
- package/src/lib/components/dynamic-selector/stories/component/test-dynamic-selector-popup-frame.component.scss +6 -0
- package/src/lib/components/page-header/rt-page-header.component.scss +4 -2
- package/src/lib/components/service-block/CONTEXT.md +37 -0
- package/src/lib/components/service-block/rt-service-block.component.scss +61 -0
- package/src/lib/components/tree/CONTEXT.md +1 -1
- package/src/rich-editor/lib/components/ai-chat/CONTEXT.md +1 -1
- package/src/styles/_breakpoints.scss +37 -4
- package/src/styles/_index.scss +0 -4
- package/styles/tokens.css +0 -8
- package/types/rt-tools-ui-kit-v2-autocomplete.d.ts +4 -3
- package/types/rt-tools-ui-kit-v2-core.d.ts +155 -1
- package/types/rt-tools-ui-kit-v2-dynamic-selector.d.ts +51 -269
- package/types/rt-tools-ui-kit-v2-multiselect.d.ts +4 -3
- package/types/rt-tools-ui-kit-v2-select.d.ts +12 -74
- package/types/rt-tools-ui-kit-v2-service-block.d.ts +34 -0
- package/types/rt-tools-ui-kit-v2-side-menu.d.ts +5 -20
- package/types/rt-tools-ui-kit-v2-tag.d.ts +2 -3
- package/types/rt-tools-ui-kit-v2-tree-selector.d.ts +0 -2
- package/types/rt-tools-ui-kit-v2-tree.d.ts +7 -9
- package/types/rt-tools-ui-kit-v2.d.ts +1 -0
- package/src/styles/_place.scss +0 -7
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
## Главное, что нужно знать
|
|
29
29
|
|
|
30
30
|
**Дерево считает тот же модуль, что дерево вариантов у `rt-select` и `rt-multiselect`.** Строки,
|
|
31
|
-
листья, отметки ветвей, отбор по слову и боковые стрелки — функции `rt-
|
|
31
|
+
листья, отметки ветвей, отбор по слову и боковые стрелки — функции `rt-option-tree.ts` в ядре кита. Свою копию
|
|
32
32
|
логики дерево не держит: две копии разошлись бы на первой правке.
|
|
33
33
|
|
|
34
34
|
**Узлы не меняются никогда.** Выбор живёт в `value`, каждый клик даёт новый массив. В каскаде
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
- `--rt-ai-chat-content-max-width` (по умолчанию `100%`) становится боковым отступом `feed`,
|
|
57
57
|
`composer` и `disclaimer`: колонка стоит по центру беседы, полоса прокрутки ленты остаётся у её
|
|
58
58
|
края. `max-inline-size` на самой ленте увёл бы полосу прокрутки внутрь колонки.
|
|
59
|
-
- Подсветка совпадений поиска по беседам — `
|
|
59
|
+
- Подсветка совпадений поиска по беседам — `rtMatchParts` из ядра кита.
|
|
60
60
|
- Строки-превью пустого списка бесед — `emptyPreviewIcons`, по умолчанию `sparkle`, `bot`, `sparkle`:
|
|
61
61
|
беседы идут с ассистентом, а не с людьми. Вход уходит в `rt-thread-list` как есть.
|
|
62
62
|
- Ответ рисует внутренний `rt-ai-chat-answer` (папка `answer/`): без него шаблон организма
|
|
@@ -6,16 +6,30 @@ $rt-bp-md: 768px !default;
|
|
|
6
6
|
$rt-bp-lg: 1080px !default;
|
|
7
7
|
$rt-bp-xl: 1380px !default;
|
|
8
8
|
|
|
9
|
-
// Место страницы — контейнер с именем `rt-place
|
|
10
|
-
//
|
|
11
|
-
//
|
|
9
|
+
// Место страницы — контейнер с именем `rt-place`, его объявляет `rt-container`. Компонент внутри
|
|
10
|
+
// каркаса считает порог от его ширины. На странице без каркаса порог считается от окна: запасной
|
|
11
|
+
// `@media` стоит под предком `html:not(:has(.rt-container))`. Условие стоит предком, а не на самом
|
|
12
|
+
// узле, чтобы вложенные `&__элемент` в `@content` строились как раньше. Корень документа местом не
|
|
13
|
+
// объявляется: контейнер на корне или на `body` не даёт фону `body` растечься на всё окно. Имя
|
|
14
|
+
// записано буквами: линтер стилей не читает имя из переменной.
|
|
15
|
+
|
|
16
|
+
// Страница без каркаса: `:where` не добавляет условию специфичности.
|
|
17
|
+
$-no-place: ':where(html:not(:has(.rt-container)))';
|
|
12
18
|
|
|
13
19
|
// Порог по ширине места: `@include bp.place-max(bp.$rt-bp-md) { … }`. Окна и панели поверх
|
|
14
|
-
// экрана сюда не идут: они лежат вне места страницы и остаются на `@media`.
|
|
20
|
+
// экрана сюда не идут: они лежат вне места страницы и остаются на `@media`. Внутри порога `&`
|
|
21
|
+
// встречается в селекторе один раз: каждое `&` несёт запасное условие, и второе повторяет его
|
|
22
|
+
// внутри первого узла, где оно не совпадает никогда.
|
|
15
23
|
@mixin place-max($width) {
|
|
16
24
|
@container rt-place (width <= #{$width}) {
|
|
17
25
|
@content;
|
|
18
26
|
}
|
|
27
|
+
|
|
28
|
+
@media (width <= #{$width}) {
|
|
29
|
+
@include -on-page-without-place {
|
|
30
|
+
@content;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
19
33
|
}
|
|
20
34
|
|
|
21
35
|
// Шире порога по месту — пара к `place-max`.
|
|
@@ -23,4 +37,23 @@ $rt-bp-xl: 1380px !default;
|
|
|
23
37
|
@container rt-place (width > #{$width}) {
|
|
24
38
|
@content;
|
|
25
39
|
}
|
|
40
|
+
|
|
41
|
+
@media (width > #{$width}) {
|
|
42
|
+
@include -on-page-without-place {
|
|
43
|
+
@content;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Внутри селектора условие встаёт предком родителя, в слое без селектора — предком содержимого.
|
|
49
|
+
@mixin -on-page-without-place {
|
|
50
|
+
@if & {
|
|
51
|
+
#{$-no-place} & {
|
|
52
|
+
@content;
|
|
53
|
+
}
|
|
54
|
+
} @else {
|
|
55
|
+
#{$-no-place} {
|
|
56
|
+
@content;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
26
59
|
}
|
package/src/styles/_index.scss
CHANGED
|
@@ -43,10 +43,6 @@
|
|
|
43
43
|
// раскладку у себя, ради чего словарь и переехал в кит.
|
|
44
44
|
@forward './form';
|
|
45
45
|
|
|
46
|
-
// Запасное место страницы на корне документа: без него порог по месту у компонента вне
|
|
47
|
-
// `rt-container` не нашёл бы контейнера и не сработал.
|
|
48
|
-
@forward './place';
|
|
49
|
-
|
|
50
46
|
// Стили директивы кнопки: своего представления у директивы нет, поэтому её `.scss` не
|
|
51
47
|
// подключён ни одним `styleUrl`. Без этой строки потребитель, взявший `tokens.css` по
|
|
52
48
|
// инструкции README, получает `rtButton`, нарисованный браузерной кнопкой.
|
package/styles/tokens.css
CHANGED
|
@@ -6799,14 +6799,6 @@ html.rt-theme-dark.rt-preset-material {
|
|
|
6799
6799
|
}
|
|
6800
6800
|
}
|
|
6801
6801
|
}
|
|
6802
|
-
/* Корень документа — запасное место страницы. Компонент кита считает пороги от ближайшего
|
|
6803
|
-
места по имени: внутри `rt-container` от его ширины, вне его от корня, а ширина корня равна
|
|
6804
|
-
окну. Так потребитель без контейнера видит пороги окна, как раньше. Объявление стоит вне
|
|
6805
|
-
слоя, как и свойства на корне: потребитель перебивает его порядком. */
|
|
6806
|
-
:root {
|
|
6807
|
-
container: rt-place/inline-size;
|
|
6808
|
-
}
|
|
6809
|
-
|
|
6810
6802
|
@layer rt-kit.components {
|
|
6811
6803
|
.rt-button {
|
|
6812
6804
|
/* Высота приходит общей шкалой контролов, а не своим числом: кнопка, поле и
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BooleanInput } from "@angular/cdk/coercion";
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import { ElementRef, InputSignal, InputSignalWithTransform, OutputEmitterRef, Signal, TemplateRef, WritableSignal } from "@angular/core";
|
|
4
|
-
import { IRtIcon, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
|
|
4
|
+
import { IRtIcon, RtOptionList, TRtKitLabelMap } from "@rt-tools/ui-kit-v2/core";
|
|
5
5
|
import { RtFormControlBase } from "@rt-tools/ui-kit-v2/form-control";
|
|
6
6
|
import { RtPopoverDirective } from "@rt-tools/ui-kit-v2/popover";
|
|
7
7
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
@@ -39,8 +39,10 @@ export declare class RtAutocompleteComponent<TItem> extends RtFormControlBase<TI
|
|
|
39
39
|
protected readonly popover: Signal<RtPopoverDirective>;
|
|
40
40
|
protected readonly fieldEl: Signal<ElementRef<HTMLInputElement> | undefined>;
|
|
41
41
|
protected readonly inputText: WritableSignal<string>;
|
|
42
|
-
protected readonly activeIndex: WritableSignal<number>;
|
|
43
42
|
protected readonly isOpen: Signal<boolean>;
|
|
43
|
+
/** Клавиатура списка: подсветка, клавиши открытия, id для `aria-activedescendant`, прокрутка к опции. */
|
|
44
|
+
protected readonly optionList: RtOptionList;
|
|
45
|
+
protected readonly activeIndex: WritableSignal<number>;
|
|
44
46
|
/** Идентификатор подсвеченной опции — тот же, что уходит в `aria-activedescendant`. */
|
|
45
47
|
protected readonly activeOptionId: Signal<string | null>;
|
|
46
48
|
protected readonly hasValue: Signal<boolean>;
|
|
@@ -57,7 +59,6 @@ export declare class RtAutocompleteComponent<TItem> extends RtFormControlBase<TI
|
|
|
57
59
|
}> | null>;
|
|
58
60
|
readonly complete: OutputEmitterRef<IRtAutocomplete.CompleteEvent>;
|
|
59
61
|
readonly itemSelect: OutputEmitterRef<TItem>;
|
|
60
|
-
constructor();
|
|
61
62
|
writeValue(value: TItem | null): void;
|
|
62
63
|
setDisabledState(disabled: boolean): void;
|
|
63
64
|
protected getEmptyValue(): TItem | null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
|
-
import { EnvironmentProviders, InjectionToken, InputSignal, InputSignalWithTransform, OnDestroy, OutputEmitterRef, PipeTransform, Signal } from "@angular/core";
|
|
2
|
+
import { EnvironmentProviders, InjectionToken, InputSignal, InputSignalWithTransform, OnDestroy, OutputEmitterRef, PipeTransform, Signal, WritableSignal } from "@angular/core";
|
|
3
3
|
import { FormControl } from "@angular/forms";
|
|
4
4
|
import { IFilterModel, ISortModel, TFilterOperatorType } from "@rt-tools/utils";
|
|
5
5
|
import { MonoTypeOperatorFunction, Observable } from "rxjs";
|
|
@@ -864,6 +864,160 @@ export declare class RtKitLabelPipe implements PipeTransform {
|
|
|
864
864
|
static ɵfac: i0.ɵɵFactoryDeclaration<RtKitLabelPipe, never>;
|
|
865
865
|
static ɵpipe: i0.ɵɵPipeDeclaration<RtKitLabelPipe, "rtKitLabel", true>;
|
|
866
866
|
}
|
|
867
|
+
/**
|
|
868
|
+
* Держит подсвеченную клавишами опцию в видимой части панели.
|
|
869
|
+
*
|
|
870
|
+
* Панель списка ограничена по высоте, и длинный список прокручивается внутри неё. Клавиши двигают
|
|
871
|
+
* подсветку, но фокус остаётся на поле: браузер сам панель не прокручивает, и подсветка уходила
|
|
872
|
+
* за нижний край — человек выбирал Enter'ом то, чего не видел. После каждой отрисовки, в которой
|
|
873
|
+
* сменилась подсвеченная опция, она прокручивается ровно настолько, чтобы встать в панель.
|
|
874
|
+
*
|
|
875
|
+
* Панель рисуется в наложении, вне поддерева семьи, поэтому опция ищется в документе по своему
|
|
876
|
+
* идентификатору — тому же, что стоит в `aria-activedescendant`. На сервере отрисовки нет, и
|
|
877
|
+
* эффект не выполняется; среда без `scrollIntoView` пропускается.
|
|
878
|
+
*
|
|
879
|
+
* Зовётся в контексте внедрения — полем или конструктором семьи.
|
|
880
|
+
*
|
|
881
|
+
* @param activeOptionId идентификатор подсвеченной опции; `null` — подсветки нет или панель закрыта
|
|
882
|
+
*/
|
|
883
|
+
export declare function rtScrollActiveOptionIntoView(activeOptionId: () => string | null): void;
|
|
884
|
+
/** Кусок подписи: текст и то, совпал ли он с запросом. */
|
|
885
|
+
export interface IRtMatchPart {
|
|
886
|
+
text: string;
|
|
887
|
+
matched: boolean;
|
|
888
|
+
}
|
|
889
|
+
/**
|
|
890
|
+
* Подпись, разрезанная по словам запроса тем же правилом, что и отбор: совпавшие куски отмечены.
|
|
891
|
+
*
|
|
892
|
+
* Отмечаются все вхождения каждого слова, а пересёкшиеся совпадения сливаются в один кусок. Куски
|
|
893
|
+
* режутся из оригинала — регистр остаётся тем, каким его написал потребитель. Подпись, длина
|
|
894
|
+
* которой меняется от смены регистра, остаётся одним куском без отметки: места совпадений в ней не
|
|
895
|
+
* совпали бы с местами в оригинале.
|
|
896
|
+
*/
|
|
897
|
+
export declare function rtMatchParts(name: string, query: string): IRtMatchPart[];
|
|
898
|
+
/** Что делать по клавише в открытом списке. `none` — клавиша не списка, её не трогают. */
|
|
899
|
+
export type TRtOptionListAction = 'next' | 'previous' | 'first' | 'last' | 'choose' | 'close' | 'side' | 'none';
|
|
900
|
+
/** Чем поле отличается от соседних: число опций, отключённые, клавиши выбора, боковые стрелки. */
|
|
901
|
+
export interface IRtOptionListConfig {
|
|
902
|
+
/** Идентификатор панели: из него собирается id опции для `aria-activedescendant`. */
|
|
903
|
+
readonly panelId: () => string;
|
|
904
|
+
readonly isOpen: () => boolean;
|
|
905
|
+
readonly count: () => number;
|
|
906
|
+
/** Отключённую опцию стрелки проходят. Без функции отключённых нет. */
|
|
907
|
+
readonly isDisabled?: (index: number) => boolean;
|
|
908
|
+
/** Клавиши выбора подсвеченной опции. Пробел выбирает там, где он не печатает. */
|
|
909
|
+
readonly chooseKeys: ReadonlySet<string>;
|
|
910
|
+
/** Работают ли боковые стрелки: у дерева вариантов да. */
|
|
911
|
+
readonly sideKeys: boolean;
|
|
912
|
+
/** Ведут ли Home и End к краям списка. В текстовом поле они остаются у курсора. */
|
|
913
|
+
readonly edgeKeys: boolean;
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* Клавиатура списка вариантов — общая для выбора из списка, множественного выбора и
|
|
917
|
+
* автодополнения. Фокус остаётся на поле, клавиши двигают подсветку, а читалка экрана узнаёт её
|
|
918
|
+
* по `aria-activedescendant`.
|
|
919
|
+
*
|
|
920
|
+
* Создаётся в контексте внедрения — полем семьи: прокрутка к подсвеченной опции живёт эффектом
|
|
921
|
+
* отрисовки. Что делать по выбору, закрытию и боковой стрелке, решает семья.
|
|
922
|
+
*/
|
|
923
|
+
export declare class RtOptionList {
|
|
924
|
+
#private;
|
|
925
|
+
/** Подсвеченная опция; `-1` — подсветки нет. */
|
|
926
|
+
readonly activeIndex: WritableSignal<number>;
|
|
927
|
+
/** Идентификатор подсвеченной опции — тот же, что уходит в `aria-activedescendant`. */
|
|
928
|
+
readonly activeOptionId: Signal<string | null>;
|
|
929
|
+
constructor(config: IRtOptionListConfig);
|
|
930
|
+
/** Открывает ли клавиша закрытый список. */
|
|
931
|
+
opensBy(key: string): boolean;
|
|
932
|
+
/** Что делать по клавише в открытом списке. */
|
|
933
|
+
actionOf(key: string): TRtOptionListAction;
|
|
934
|
+
/** Ведёт подсветку на шаг вперёд или назад по кругу, мимо отключённых опций. */
|
|
935
|
+
move(delta: number): void;
|
|
936
|
+
/** Ведёт подсветку на первую опцию, мимо отключённых. */
|
|
937
|
+
first(): void;
|
|
938
|
+
/** Ведёт подсветку на последнюю опцию, мимо отключённых. */
|
|
939
|
+
last(): void;
|
|
940
|
+
/** Снимает подсветку: список закрыт или набор опций сменился. */
|
|
941
|
+
reset(): void;
|
|
942
|
+
}
|
|
943
|
+
/**
|
|
944
|
+
* Дерево вариантов выбора: общий вид опции и видимой строки для всех семей, что раскладывают
|
|
945
|
+
* варианты деревом. Generic-параметр `TValue` повторяет тип значения, который сидит в опциях.
|
|
946
|
+
*/
|
|
947
|
+
export declare namespace IRtOptionTree {
|
|
948
|
+
/** Одна опция. */
|
|
949
|
+
interface Option<TValue> {
|
|
950
|
+
label: string;
|
|
951
|
+
value: TValue;
|
|
952
|
+
disabled?: boolean;
|
|
953
|
+
/** Дети опции того же вида. Хотя бы одна опция с детьми делает список деревом. */
|
|
954
|
+
children?: ReadonlyArray<Option<TValue>>;
|
|
955
|
+
}
|
|
956
|
+
/** Видимая строка дерева: опция, её уровень и то, ветка ли она и раскрыта ли. */
|
|
957
|
+
interface Row<TValue> {
|
|
958
|
+
readonly option: Option<TValue>;
|
|
959
|
+
readonly level: number;
|
|
960
|
+
readonly branch: boolean;
|
|
961
|
+
readonly open: boolean;
|
|
962
|
+
readonly parent: TValue | null;
|
|
963
|
+
}
|
|
964
|
+
/** Сколько включённых листьев ветки выбрано: все, часть или ни одного. */
|
|
965
|
+
type TBranchState = 'all' | 'some' | 'none';
|
|
966
|
+
/** Что делать по боковой стрелке: какую ветку переключить и куда увести подсветку. */
|
|
967
|
+
interface SideKeyAnswer<TValue> {
|
|
968
|
+
readonly toggle: TValue | null;
|
|
969
|
+
readonly index: number;
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
/**
|
|
973
|
+
* Дерево вариантов — общее для выбора из списка, множественного выбора и деревьев кита.
|
|
974
|
+
*
|
|
975
|
+
* Все они раскладывают, ищут и считают дерево одинаково, поэтому это чистые функции в одном
|
|
976
|
+
* месте: копии разошлись бы на первой правке. Состояние — какие ветки раскрыты — живёт в семье,
|
|
977
|
+
* здесь только расчёт по нему.
|
|
978
|
+
*/
|
|
979
|
+
type TOption<TValue> = IRtOptionTree.Option<TValue>;
|
|
980
|
+
type TRow<TValue> = IRtOptionTree.Row<TValue>;
|
|
981
|
+
/** Список — дерево, если хоть у одной опции есть дети. Плоский список рисуется как прежде. */
|
|
982
|
+
export declare function rtTreeIsTree<TValue>(options: ReadonlyArray<TOption<TValue>>): boolean;
|
|
983
|
+
/** Опция по значению на любой глубине. */
|
|
984
|
+
export declare function rtTreeFind<TValue>(options: ReadonlyArray<TOption<TValue>>, value: TValue): TOption<TValue> | undefined;
|
|
985
|
+
/**
|
|
986
|
+
* Включённые листья под опцией; у самого листа — он сам. Отключённая ветка не отдаёт никого: её
|
|
987
|
+
* листья выбрать нельзя, как и её саму.
|
|
988
|
+
*/
|
|
989
|
+
export declare function rtTreeLeaves<TValue>(option: TOption<TValue>): ReadonlyArray<TValue>;
|
|
990
|
+
/** Сколько включённых листьев ветки выбрано. Флажок ветки выводится из этого, а не хранится. */
|
|
991
|
+
export declare function rtTreeBranchState<TValue>(option: TOption<TValue>, chosen: ReadonlyArray<TValue>): IRtOptionTree.TBranchState;
|
|
992
|
+
/** Ветки, под которыми лежит выбранное значение: они раскрыты, когда список открывается. */
|
|
993
|
+
export declare function rtTreeOpenFor<TValue>(options: ReadonlyArray<TOption<TValue>>, chosen: ReadonlyArray<TValue>): ReadonlySet<TValue>;
|
|
994
|
+
/**
|
|
995
|
+
* Видимые строки по уровням. Без поискового слова раскрыты ветки из `open`. Со словом строка
|
|
996
|
+
* остаётся, если совпала она сама или кто-то под ней, и путь к совпадению показан раскрытым.
|
|
997
|
+
* Ветка, совпавшая сама, держит детей такими, какими они были.
|
|
998
|
+
*/
|
|
999
|
+
export declare function rtTreeRows<TValue>(options: ReadonlyArray<TOption<TValue>>, open: ReadonlySet<TValue>, rawTerm?: string): ReadonlyArray<TRow<TValue>>;
|
|
1000
|
+
/**
|
|
1001
|
+
* Ответ на боковую стрелку. Вправо: свёрнутая ветка раскрывается, раскрытая уводит подсветку на
|
|
1002
|
+
* первого ребёнка. Влево: раскрытая ветка сворачивается, иначе подсветка уходит на родителя.
|
|
1003
|
+
*/
|
|
1004
|
+
export declare function rtTreeSideKey<TValue>(rows: ReadonlyArray<TRow<TValue>>, index: number, key: string): IRtOptionTree.SideKeyAnswer<TValue>;
|
|
1005
|
+
/** Набор раскрытых веток с переключённой одной. */
|
|
1006
|
+
export declare function rtTreeToggle<TValue>(open: ReadonlySet<TValue>, value: TValue): ReadonlySet<TValue>;
|
|
1007
|
+
/**
|
|
1008
|
+
* Правило совпадения поиска — одно на весь кит: каждое слово запроса должно найтись в тексте, в любом
|
|
1009
|
+
* порядке, без учёта регистра, а «ё» равна «е». По нему отбирают строки боковое меню, обход дерева,
|
|
1010
|
+
* динамический выбор и выбор из дерева, и по нему же подсветка режет подпись.
|
|
1011
|
+
*/
|
|
1012
|
+
/**
|
|
1013
|
+
* Текст в том виде, в каком его сравнивает поиск: нижний регистр и «е» на месте «ё». Замена буквы
|
|
1014
|
+
* длину не меняет, поэтому места совпадений в приведённом тексте — те же места в исходном.
|
|
1015
|
+
*/
|
|
1016
|
+
export declare function rtSearchFold(text: string): string;
|
|
1017
|
+
/** Слова запроса в приведённом виде, без пустых. Запрос из одних пробелов слов не даёт. */
|
|
1018
|
+
export declare function rtSearchWords(query: string): string[];
|
|
1019
|
+
/** Совпадает ли текст с запросом: каждое слово запроса стоит в тексте. Пустой запрос совпадает со всем. */
|
|
1020
|
+
export declare function rtSearchMatches(text: string, query: string): boolean;
|
|
867
1021
|
/** Порог узкого вида — тот же, что у `$rt-bp-lg` в стилях кита. */
|
|
868
1022
|
export declare const RT_NARROW_WIDTH: number;
|
|
869
1023
|
/**
|