@skygraph/core 0.0.0-placeholder.0 → 0.5.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/LICENSE +21 -0
- package/README.md +42 -6
- package/dist/calendar.cjs +404 -0
- package/dist/calendar.cjs.map +1 -0
- package/dist/calendar.d.cts +209 -0
- package/dist/calendar.d.ts +209 -0
- package/dist/calendar.js +12 -0
- package/dist/calendar.js.map +1 -0
- package/dist/chunk-5CCD5Q4B.js +36 -0
- package/dist/chunk-5CCD5Q4B.js.map +1 -0
- package/dist/chunk-7FA2TBSZ.js +1211 -0
- package/dist/chunk-7FA2TBSZ.js.map +1 -0
- package/dist/chunk-AB3RLBLW.js +357 -0
- package/dist/chunk-AB3RLBLW.js.map +1 -0
- package/dist/chunk-GEMALROQ.js +258 -0
- package/dist/chunk-GEMALROQ.js.map +1 -0
- package/dist/chunk-IY6LJU3L.js +256 -0
- package/dist/chunk-IY6LJU3L.js.map +1 -0
- package/dist/chunk-KMGRNPLG.js +453 -0
- package/dist/chunk-KMGRNPLG.js.map +1 -0
- package/dist/chunk-Y7FTBBYX.js +397 -0
- package/dist/chunk-Y7FTBBYX.js.map +1 -0
- package/dist/chunk-ZWB7JGAJ.js +488 -0
- package/dist/chunk-ZWB7JGAJ.js.map +1 -0
- package/dist/form.cjs +498 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +130 -0
- package/dist/form.d.ts +130 -0
- package/dist/form.js +8 -0
- package/dist/form.js.map +1 -0
- package/dist/graph.cjs +1269 -0
- package/dist/graph.cjs.map +1 -0
- package/dist/graph.d.cts +671 -0
- package/dist/graph.d.ts +671 -0
- package/dist/graph.js +34 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.cjs +3860 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +144 -0
- package/dist/index.d.ts +144 -0
- package/dist/index.js +477 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime-internal.cjs +339 -0
- package/dist/runtime-internal.cjs.map +1 -0
- package/dist/runtime-internal.d.cts +130 -0
- package/dist/runtime-internal.d.ts +130 -0
- package/dist/runtime-internal.js +67 -0
- package/dist/runtime-internal.js.map +1 -0
- package/dist/table.cjs +537 -0
- package/dist/table.cjs.map +1 -0
- package/dist/table.d.cts +215 -0
- package/dist/table.d.ts +215 -0
- package/dist/table.js +16 -0
- package/dist/table.js.map +1 -0
- package/dist/tree.cjs +442 -0
- package/dist/tree.cjs.map +1 -0
- package/dist/tree.d.cts +76 -0
- package/dist/tree.d.ts +76 -0
- package/dist/tree.js +8 -0
- package/dist/tree.js.map +1 -0
- package/dist/types-B-rKQJ4R.d.cts +35 -0
- package/dist/types-B-rKQJ4R.d.ts +35 -0
- package/dist/virtual.cjs +283 -0
- package/dist/virtual.cjs.map +1 -0
- package/dist/virtual.d.cts +96 -0
- package/dist/virtual.d.ts +96 -0
- package/dist/virtual.js +9 -0
- package/dist/virtual.js.map +1 -0
- package/package.json +98 -18
- package/index.js +0 -3
package/dist/table.d.cts
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { C as Core } from './types-B-rKQJ4R.cjs';
|
|
2
|
+
|
|
3
|
+
type RowId = string;
|
|
4
|
+
type SortDirection = 'asc' | 'desc';
|
|
5
|
+
interface SortConfig {
|
|
6
|
+
column: string;
|
|
7
|
+
direction: SortDirection;
|
|
8
|
+
}
|
|
9
|
+
type FilterFn = (row: Record<string, unknown>) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Расширенный набор операторов фильтрации.
|
|
12
|
+
* - `eq`/`neq` — строгое равенство.
|
|
13
|
+
* - `lt`/`lte`/`gt`/`gte` — числовое сравнение (string работает по `<`/`>`).
|
|
14
|
+
* - `between` — числовой диапазон, `value: [min, max]` (включительно).
|
|
15
|
+
* - `in`/`notIn` — `value: unknown[]`.
|
|
16
|
+
* - `contains`/`startsWith`/`endsWith` — строковые операторы (case-insensitive).
|
|
17
|
+
* - `isEmpty`/`isNotEmpty` — проверка `null` / `undefined` / `''`.
|
|
18
|
+
*/
|
|
19
|
+
type FilterOperator = 'eq' | 'neq' | 'lt' | 'lte' | 'gt' | 'gte' | 'between' | 'in' | 'notIn' | 'contains' | 'startsWith' | 'endsWith' | 'isEmpty' | 'isNotEmpty';
|
|
20
|
+
/**
|
|
21
|
+
* Самодостаточный фильтр без привязки к колонке. Используется в новом
|
|
22
|
+
* `TableEngine.setColumnFilter` рядом со старым `ColumnFilter`.
|
|
23
|
+
*/
|
|
24
|
+
interface AdvancedFilter {
|
|
25
|
+
/** Оператор сравнения. */
|
|
26
|
+
op: FilterOperator;
|
|
27
|
+
/**
|
|
28
|
+
* Значение для оператора. Семантика зависит от `op`:
|
|
29
|
+
* - `between` — кортеж `[min, max]`.
|
|
30
|
+
* - `in` / `notIn` — массив значений.
|
|
31
|
+
* - `isEmpty` / `isNotEmpty` — игнорируется.
|
|
32
|
+
* - остальные — скалярное значение.
|
|
33
|
+
*/
|
|
34
|
+
value?: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Старая форма фильтра колонки. Сохраняем для backward-compat:
|
|
38
|
+
* - если `operator` не задан и `value` — массив, поведение `in`;
|
|
39
|
+
* - если `operator` не задан и `value` — скаляр, поведение `eq`.
|
|
40
|
+
*/
|
|
41
|
+
interface ColumnFilter {
|
|
42
|
+
column: string;
|
|
43
|
+
value?: unknown;
|
|
44
|
+
operator?: FilterOperator;
|
|
45
|
+
}
|
|
46
|
+
/** Тип встроенной агрегации для группового заголовка / футера таблицы. */
|
|
47
|
+
type AggregateType = 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
48
|
+
/** Кастомная функция агрегации — получает массив значений колонки в группе. */
|
|
49
|
+
type AggregateFn = (values: unknown[]) => unknown;
|
|
50
|
+
/** Описание агрегации одной колонки. */
|
|
51
|
+
interface ColumnAggregate {
|
|
52
|
+
column: string;
|
|
53
|
+
type: AggregateType | AggregateFn;
|
|
54
|
+
}
|
|
55
|
+
/** Запись группы, которую возвращает `TableEngine.getGroups()`. */
|
|
56
|
+
interface TableGroup {
|
|
57
|
+
/** Стабильный строковый ключ (stringified `value`). */
|
|
58
|
+
key: string;
|
|
59
|
+
/** Сырая величина группировочного поля. */
|
|
60
|
+
value: unknown;
|
|
61
|
+
/** Идентификаторы строк внутри группы (после применения фильтров и сортировки). */
|
|
62
|
+
rows: RowId[];
|
|
63
|
+
/** Посчитанные агрегаты `columnKey → value`. Пусто, если агрегации не заданы. */
|
|
64
|
+
aggregates: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
interface ExportOptions {
|
|
67
|
+
allRows?: boolean;
|
|
68
|
+
columns?: string[];
|
|
69
|
+
headers?: boolean;
|
|
70
|
+
}
|
|
71
|
+
interface TableState {
|
|
72
|
+
totalRows: number;
|
|
73
|
+
filteredRows: number;
|
|
74
|
+
page: number;
|
|
75
|
+
pageSize: number;
|
|
76
|
+
totalPages: number;
|
|
77
|
+
sorts: SortConfig[];
|
|
78
|
+
filters: ColumnFilter[];
|
|
79
|
+
/** @deprecated Use sorts[0] instead */
|
|
80
|
+
sort: SortConfig | null;
|
|
81
|
+
/** Поле, по которому сейчас группируется таблица, либо `null`. */
|
|
82
|
+
groupBy: string | null;
|
|
83
|
+
/** Количество групп после применения текущего `groupBy`. */
|
|
84
|
+
groupCount: number;
|
|
85
|
+
}
|
|
86
|
+
interface TableOptions {
|
|
87
|
+
pageSize?: number;
|
|
88
|
+
columns?: string[];
|
|
89
|
+
/**
|
|
90
|
+
* Эстимейт высоты строки в пикселях для virtual rendering.
|
|
91
|
+
* Используется React-адаптером как стартовое значение до того, как
|
|
92
|
+
* `ResizeObserver` сообщит реальную высоту. Принимает данные строки
|
|
93
|
+
* (после фильтрации) и возвращает число.
|
|
94
|
+
*/
|
|
95
|
+
estimateRowHeight?: (row: Record<string, unknown>, id: RowId) => number;
|
|
96
|
+
}
|
|
97
|
+
interface TableEngine {
|
|
98
|
+
addRow(id: RowId, data: Record<string, unknown>): void;
|
|
99
|
+
addRows(rows: Array<{
|
|
100
|
+
id: RowId;
|
|
101
|
+
data: Record<string, unknown>;
|
|
102
|
+
}>): void;
|
|
103
|
+
removeRow(id: RowId): void;
|
|
104
|
+
updateCell(id: RowId, column: string, value: unknown): void;
|
|
105
|
+
getRow(id: RowId): Record<string, unknown> | undefined;
|
|
106
|
+
getCell(id: RowId, column: string): unknown;
|
|
107
|
+
getVisibleRows(): Array<{
|
|
108
|
+
id: RowId;
|
|
109
|
+
data: Record<string, unknown>;
|
|
110
|
+
}>;
|
|
111
|
+
getAllRowIds(): RowId[];
|
|
112
|
+
getAllRows(): Array<{
|
|
113
|
+
id: RowId;
|
|
114
|
+
data: Record<string, unknown>;
|
|
115
|
+
}>;
|
|
116
|
+
setSort(column: string, direction: SortDirection, append?: boolean): void;
|
|
117
|
+
setSorts(sorts: SortConfig[]): void;
|
|
118
|
+
clearSort(): void;
|
|
119
|
+
addFilter(filter: ColumnFilter): void;
|
|
120
|
+
removeFilter(column: string): void;
|
|
121
|
+
clearFilters(): void;
|
|
122
|
+
setFilterFn(fn: FilterFn | null): void;
|
|
123
|
+
/**
|
|
124
|
+
* Устанавливает фильтр для колонки. Принимает как новый
|
|
125
|
+
* `AdvancedFilter` (только `op` + `value`), так и старый `ColumnFilter`
|
|
126
|
+
* (с уже заданным `column`). При передаче `null` — снимает фильтр.
|
|
127
|
+
*/
|
|
128
|
+
setColumnFilter(column: string, filter: AdvancedFilter | ColumnFilter | null): void;
|
|
129
|
+
setPage(page: number): void;
|
|
130
|
+
setPageSize(size: number): void;
|
|
131
|
+
nextPage(): void;
|
|
132
|
+
prevPage(): void;
|
|
133
|
+
moveRow(fromIndex: number, toIndex: number): void;
|
|
134
|
+
moveRows(ids: RowId[], toIndex: number): void;
|
|
135
|
+
/** Pin a column to a side, or unpin (`side = null`). */
|
|
136
|
+
pinColumn(column: string, side: 'left' | 'right' | null): void;
|
|
137
|
+
/** Snapshot of currently pinned columns. */
|
|
138
|
+
getPinnedColumns(): {
|
|
139
|
+
left: string[];
|
|
140
|
+
right: string[];
|
|
141
|
+
};
|
|
142
|
+
/** Drop all pin assignments. */
|
|
143
|
+
clearPinned(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Persist a column's pixel width. Mirrored into the Core store under
|
|
146
|
+
* `$table.<id>.state.columnWidths`, so React adapters can react via
|
|
147
|
+
* `core.subscribe` and so widths survive re-mounts that recreate the
|
|
148
|
+
* engine from a snapshot.
|
|
149
|
+
*/
|
|
150
|
+
setColumnWidth(column: string, width: number): void;
|
|
151
|
+
/** Get the persisted width for a column, or `undefined` when unset. */
|
|
152
|
+
getColumnWidth(column: string): number | undefined;
|
|
153
|
+
/** Snapshot of all persisted column widths (key → px). */
|
|
154
|
+
getColumnWidths(): Record<string, number>;
|
|
155
|
+
/** Drop all persisted widths. */
|
|
156
|
+
clearColumnWidths(): void;
|
|
157
|
+
getExportData(options?: ExportOptions): string[][];
|
|
158
|
+
getTableState(): TableState;
|
|
159
|
+
/**
|
|
160
|
+
* Группирует строки по полю. `null` отключает группировку.
|
|
161
|
+
* Опциональный `aggregates` запоминается до следующего вызова и
|
|
162
|
+
* пересчитывается при изменениях данных / фильтров.
|
|
163
|
+
*/
|
|
164
|
+
groupBy(field: string | null, aggregates?: ColumnAggregate[]): void;
|
|
165
|
+
/** Снимает группировку (эквивалент `groupBy(null)`). */
|
|
166
|
+
clearGroupBy(): void;
|
|
167
|
+
/** Текущее поле группировки или `null`. */
|
|
168
|
+
getGroupBy(): string | null;
|
|
169
|
+
/** Снимок групп после применения фильтров / сортировки. */
|
|
170
|
+
getGroups(): TableGroup[];
|
|
171
|
+
/**
|
|
172
|
+
* Эстимейт высоты строки, если в `TableOptions.estimateRowHeight` была
|
|
173
|
+
* передана функция. Возвращает `null`, если функция не задана либо строка
|
|
174
|
+
* не найдена. Используется React-адаптером для инициализации виртуального
|
|
175
|
+
* движка с динамическими высотами.
|
|
176
|
+
*/
|
|
177
|
+
getEstimatedRowHeight(id: RowId): number | null;
|
|
178
|
+
reset(): void;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* `createTable` строит TableEngine поверх Core. Пользовательские данные строк
|
|
183
|
+
* хранятся в private замыкании (`dataById`/`keysById`), а в Core попадают
|
|
184
|
+
* только пути `$table.<id>.state.*` (агрегированные счётчики, ширины колонок,
|
|
185
|
+
* пин-конфиг). Это держит `addRows(100k)` на масштабе O(N) Map.set вместо
|
|
186
|
+
* O(N × cols) `core.set` (исторический паттерн `byId.<rid>.<col>` создавал
|
|
187
|
+
* сотни тысяч узлов в Store и аллокаций Set/Map в `Core.set` на каждую
|
|
188
|
+
* cell-запись — см. `docs/_streams/findings/T-Table-Perf.md` H1).
|
|
189
|
+
*
|
|
190
|
+
* Семантика публичных методов `getRow`/`getCell`/`getVisibleRows` сохранена.
|
|
191
|
+
* Внешние подписки на `$table.<id>.state.*` пути продолжают работать;
|
|
192
|
+
* подписок на `byId.*` в монорепе нет (они никогда не были задокументированы).
|
|
193
|
+
*/
|
|
194
|
+
declare function createTable(core: Core, options?: TableOptions): TableEngine;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Возвращает финальный оператор фильтра. Соблюдаем backward-compat:
|
|
198
|
+
* если оператор не задан, и `value` — массив, считаем фильтр `in`,
|
|
199
|
+
* иначе — `eq`.
|
|
200
|
+
*/
|
|
201
|
+
declare function resolveOperator(filter: AdvancedFilter | ColumnFilter): FilterOperator;
|
|
202
|
+
/**
|
|
203
|
+
* Проверяет, проходит ли значение `val` фильтр (`op` + `filterValue`).
|
|
204
|
+
* Используется как для `ColumnFilter`, так и для `AdvancedFilter`.
|
|
205
|
+
*/
|
|
206
|
+
declare function matchesOperator(val: unknown, op: FilterOperator, filterValue: unknown): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Применяет `ColumnFilter` к строке (по `filter.column`).
|
|
209
|
+
* Точка входа из движка таблицы.
|
|
210
|
+
*/
|
|
211
|
+
declare function matchesColumnFilter(row: Record<string, unknown>, filter: ColumnFilter): boolean;
|
|
212
|
+
/** Считает встроенную агрегацию для массива значений. */
|
|
213
|
+
declare function computeAggregate(values: unknown[], type: AggregateType | AggregateFn): unknown;
|
|
214
|
+
|
|
215
|
+
export { type AdvancedFilter, type AggregateFn, type AggregateType, type ColumnAggregate, type ColumnFilter, type ExportOptions, type FilterFn, type FilterOperator, type RowId, type SortConfig, type SortDirection, type TableEngine, type TableGroup, type TableOptions, type TableState, computeAggregate, createTable, matchesColumnFilter, matchesOperator, resolveOperator };
|
package/dist/table.d.ts
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { C as Core } from './types-B-rKQJ4R.js';
|
|
2
|
+
|
|
3
|
+
type RowId = string;
|
|
4
|
+
type SortDirection = 'asc' | 'desc';
|
|
5
|
+
interface SortConfig {
|
|
6
|
+
column: string;
|
|
7
|
+
direction: SortDirection;
|
|
8
|
+
}
|
|
9
|
+
type FilterFn = (row: Record<string, unknown>) => boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Расширенный набор операторов фильтрации.
|
|
12
|
+
* - `eq`/`neq` — строгое равенство.
|
|
13
|
+
* - `lt`/`lte`/`gt`/`gte` — числовое сравнение (string работает по `<`/`>`).
|
|
14
|
+
* - `between` — числовой диапазон, `value: [min, max]` (включительно).
|
|
15
|
+
* - `in`/`notIn` — `value: unknown[]`.
|
|
16
|
+
* - `contains`/`startsWith`/`endsWith` — строковые операторы (case-insensitive).
|
|
17
|
+
* - `isEmpty`/`isNotEmpty` — проверка `null` / `undefined` / `''`.
|
|
18
|
+
*/
|
|
19
|
+
type FilterOperator = 'eq' | 'neq' | 'lt' | 'lte' | 'gt' | 'gte' | 'between' | 'in' | 'notIn' | 'contains' | 'startsWith' | 'endsWith' | 'isEmpty' | 'isNotEmpty';
|
|
20
|
+
/**
|
|
21
|
+
* Самодостаточный фильтр без привязки к колонке. Используется в новом
|
|
22
|
+
* `TableEngine.setColumnFilter` рядом со старым `ColumnFilter`.
|
|
23
|
+
*/
|
|
24
|
+
interface AdvancedFilter {
|
|
25
|
+
/** Оператор сравнения. */
|
|
26
|
+
op: FilterOperator;
|
|
27
|
+
/**
|
|
28
|
+
* Значение для оператора. Семантика зависит от `op`:
|
|
29
|
+
* - `between` — кортеж `[min, max]`.
|
|
30
|
+
* - `in` / `notIn` — массив значений.
|
|
31
|
+
* - `isEmpty` / `isNotEmpty` — игнорируется.
|
|
32
|
+
* - остальные — скалярное значение.
|
|
33
|
+
*/
|
|
34
|
+
value?: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Старая форма фильтра колонки. Сохраняем для backward-compat:
|
|
38
|
+
* - если `operator` не задан и `value` — массив, поведение `in`;
|
|
39
|
+
* - если `operator` не задан и `value` — скаляр, поведение `eq`.
|
|
40
|
+
*/
|
|
41
|
+
interface ColumnFilter {
|
|
42
|
+
column: string;
|
|
43
|
+
value?: unknown;
|
|
44
|
+
operator?: FilterOperator;
|
|
45
|
+
}
|
|
46
|
+
/** Тип встроенной агрегации для группового заголовка / футера таблицы. */
|
|
47
|
+
type AggregateType = 'sum' | 'avg' | 'min' | 'max' | 'count';
|
|
48
|
+
/** Кастомная функция агрегации — получает массив значений колонки в группе. */
|
|
49
|
+
type AggregateFn = (values: unknown[]) => unknown;
|
|
50
|
+
/** Описание агрегации одной колонки. */
|
|
51
|
+
interface ColumnAggregate {
|
|
52
|
+
column: string;
|
|
53
|
+
type: AggregateType | AggregateFn;
|
|
54
|
+
}
|
|
55
|
+
/** Запись группы, которую возвращает `TableEngine.getGroups()`. */
|
|
56
|
+
interface TableGroup {
|
|
57
|
+
/** Стабильный строковый ключ (stringified `value`). */
|
|
58
|
+
key: string;
|
|
59
|
+
/** Сырая величина группировочного поля. */
|
|
60
|
+
value: unknown;
|
|
61
|
+
/** Идентификаторы строк внутри группы (после применения фильтров и сортировки). */
|
|
62
|
+
rows: RowId[];
|
|
63
|
+
/** Посчитанные агрегаты `columnKey → value`. Пусто, если агрегации не заданы. */
|
|
64
|
+
aggregates: Record<string, unknown>;
|
|
65
|
+
}
|
|
66
|
+
interface ExportOptions {
|
|
67
|
+
allRows?: boolean;
|
|
68
|
+
columns?: string[];
|
|
69
|
+
headers?: boolean;
|
|
70
|
+
}
|
|
71
|
+
interface TableState {
|
|
72
|
+
totalRows: number;
|
|
73
|
+
filteredRows: number;
|
|
74
|
+
page: number;
|
|
75
|
+
pageSize: number;
|
|
76
|
+
totalPages: number;
|
|
77
|
+
sorts: SortConfig[];
|
|
78
|
+
filters: ColumnFilter[];
|
|
79
|
+
/** @deprecated Use sorts[0] instead */
|
|
80
|
+
sort: SortConfig | null;
|
|
81
|
+
/** Поле, по которому сейчас группируется таблица, либо `null`. */
|
|
82
|
+
groupBy: string | null;
|
|
83
|
+
/** Количество групп после применения текущего `groupBy`. */
|
|
84
|
+
groupCount: number;
|
|
85
|
+
}
|
|
86
|
+
interface TableOptions {
|
|
87
|
+
pageSize?: number;
|
|
88
|
+
columns?: string[];
|
|
89
|
+
/**
|
|
90
|
+
* Эстимейт высоты строки в пикселях для virtual rendering.
|
|
91
|
+
* Используется React-адаптером как стартовое значение до того, как
|
|
92
|
+
* `ResizeObserver` сообщит реальную высоту. Принимает данные строки
|
|
93
|
+
* (после фильтрации) и возвращает число.
|
|
94
|
+
*/
|
|
95
|
+
estimateRowHeight?: (row: Record<string, unknown>, id: RowId) => number;
|
|
96
|
+
}
|
|
97
|
+
interface TableEngine {
|
|
98
|
+
addRow(id: RowId, data: Record<string, unknown>): void;
|
|
99
|
+
addRows(rows: Array<{
|
|
100
|
+
id: RowId;
|
|
101
|
+
data: Record<string, unknown>;
|
|
102
|
+
}>): void;
|
|
103
|
+
removeRow(id: RowId): void;
|
|
104
|
+
updateCell(id: RowId, column: string, value: unknown): void;
|
|
105
|
+
getRow(id: RowId): Record<string, unknown> | undefined;
|
|
106
|
+
getCell(id: RowId, column: string): unknown;
|
|
107
|
+
getVisibleRows(): Array<{
|
|
108
|
+
id: RowId;
|
|
109
|
+
data: Record<string, unknown>;
|
|
110
|
+
}>;
|
|
111
|
+
getAllRowIds(): RowId[];
|
|
112
|
+
getAllRows(): Array<{
|
|
113
|
+
id: RowId;
|
|
114
|
+
data: Record<string, unknown>;
|
|
115
|
+
}>;
|
|
116
|
+
setSort(column: string, direction: SortDirection, append?: boolean): void;
|
|
117
|
+
setSorts(sorts: SortConfig[]): void;
|
|
118
|
+
clearSort(): void;
|
|
119
|
+
addFilter(filter: ColumnFilter): void;
|
|
120
|
+
removeFilter(column: string): void;
|
|
121
|
+
clearFilters(): void;
|
|
122
|
+
setFilterFn(fn: FilterFn | null): void;
|
|
123
|
+
/**
|
|
124
|
+
* Устанавливает фильтр для колонки. Принимает как новый
|
|
125
|
+
* `AdvancedFilter` (только `op` + `value`), так и старый `ColumnFilter`
|
|
126
|
+
* (с уже заданным `column`). При передаче `null` — снимает фильтр.
|
|
127
|
+
*/
|
|
128
|
+
setColumnFilter(column: string, filter: AdvancedFilter | ColumnFilter | null): void;
|
|
129
|
+
setPage(page: number): void;
|
|
130
|
+
setPageSize(size: number): void;
|
|
131
|
+
nextPage(): void;
|
|
132
|
+
prevPage(): void;
|
|
133
|
+
moveRow(fromIndex: number, toIndex: number): void;
|
|
134
|
+
moveRows(ids: RowId[], toIndex: number): void;
|
|
135
|
+
/** Pin a column to a side, or unpin (`side = null`). */
|
|
136
|
+
pinColumn(column: string, side: 'left' | 'right' | null): void;
|
|
137
|
+
/** Snapshot of currently pinned columns. */
|
|
138
|
+
getPinnedColumns(): {
|
|
139
|
+
left: string[];
|
|
140
|
+
right: string[];
|
|
141
|
+
};
|
|
142
|
+
/** Drop all pin assignments. */
|
|
143
|
+
clearPinned(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Persist a column's pixel width. Mirrored into the Core store under
|
|
146
|
+
* `$table.<id>.state.columnWidths`, so React adapters can react via
|
|
147
|
+
* `core.subscribe` and so widths survive re-mounts that recreate the
|
|
148
|
+
* engine from a snapshot.
|
|
149
|
+
*/
|
|
150
|
+
setColumnWidth(column: string, width: number): void;
|
|
151
|
+
/** Get the persisted width for a column, or `undefined` when unset. */
|
|
152
|
+
getColumnWidth(column: string): number | undefined;
|
|
153
|
+
/** Snapshot of all persisted column widths (key → px). */
|
|
154
|
+
getColumnWidths(): Record<string, number>;
|
|
155
|
+
/** Drop all persisted widths. */
|
|
156
|
+
clearColumnWidths(): void;
|
|
157
|
+
getExportData(options?: ExportOptions): string[][];
|
|
158
|
+
getTableState(): TableState;
|
|
159
|
+
/**
|
|
160
|
+
* Группирует строки по полю. `null` отключает группировку.
|
|
161
|
+
* Опциональный `aggregates` запоминается до следующего вызова и
|
|
162
|
+
* пересчитывается при изменениях данных / фильтров.
|
|
163
|
+
*/
|
|
164
|
+
groupBy(field: string | null, aggregates?: ColumnAggregate[]): void;
|
|
165
|
+
/** Снимает группировку (эквивалент `groupBy(null)`). */
|
|
166
|
+
clearGroupBy(): void;
|
|
167
|
+
/** Текущее поле группировки или `null`. */
|
|
168
|
+
getGroupBy(): string | null;
|
|
169
|
+
/** Снимок групп после применения фильтров / сортировки. */
|
|
170
|
+
getGroups(): TableGroup[];
|
|
171
|
+
/**
|
|
172
|
+
* Эстимейт высоты строки, если в `TableOptions.estimateRowHeight` была
|
|
173
|
+
* передана функция. Возвращает `null`, если функция не задана либо строка
|
|
174
|
+
* не найдена. Используется React-адаптером для инициализации виртуального
|
|
175
|
+
* движка с динамическими высотами.
|
|
176
|
+
*/
|
|
177
|
+
getEstimatedRowHeight(id: RowId): number | null;
|
|
178
|
+
reset(): void;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* `createTable` строит TableEngine поверх Core. Пользовательские данные строк
|
|
183
|
+
* хранятся в private замыкании (`dataById`/`keysById`), а в Core попадают
|
|
184
|
+
* только пути `$table.<id>.state.*` (агрегированные счётчики, ширины колонок,
|
|
185
|
+
* пин-конфиг). Это держит `addRows(100k)` на масштабе O(N) Map.set вместо
|
|
186
|
+
* O(N × cols) `core.set` (исторический паттерн `byId.<rid>.<col>` создавал
|
|
187
|
+
* сотни тысяч узлов в Store и аллокаций Set/Map в `Core.set` на каждую
|
|
188
|
+
* cell-запись — см. `docs/_streams/findings/T-Table-Perf.md` H1).
|
|
189
|
+
*
|
|
190
|
+
* Семантика публичных методов `getRow`/`getCell`/`getVisibleRows` сохранена.
|
|
191
|
+
* Внешние подписки на `$table.<id>.state.*` пути продолжают работать;
|
|
192
|
+
* подписок на `byId.*` в монорепе нет (они никогда не были задокументированы).
|
|
193
|
+
*/
|
|
194
|
+
declare function createTable(core: Core, options?: TableOptions): TableEngine;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Возвращает финальный оператор фильтра. Соблюдаем backward-compat:
|
|
198
|
+
* если оператор не задан, и `value` — массив, считаем фильтр `in`,
|
|
199
|
+
* иначе — `eq`.
|
|
200
|
+
*/
|
|
201
|
+
declare function resolveOperator(filter: AdvancedFilter | ColumnFilter): FilterOperator;
|
|
202
|
+
/**
|
|
203
|
+
* Проверяет, проходит ли значение `val` фильтр (`op` + `filterValue`).
|
|
204
|
+
* Используется как для `ColumnFilter`, так и для `AdvancedFilter`.
|
|
205
|
+
*/
|
|
206
|
+
declare function matchesOperator(val: unknown, op: FilterOperator, filterValue: unknown): boolean;
|
|
207
|
+
/**
|
|
208
|
+
* Применяет `ColumnFilter` к строке (по `filter.column`).
|
|
209
|
+
* Точка входа из движка таблицы.
|
|
210
|
+
*/
|
|
211
|
+
declare function matchesColumnFilter(row: Record<string, unknown>, filter: ColumnFilter): boolean;
|
|
212
|
+
/** Считает встроенную агрегацию для массива значений. */
|
|
213
|
+
declare function computeAggregate(values: unknown[], type: AggregateType | AggregateFn): unknown;
|
|
214
|
+
|
|
215
|
+
export { type AdvancedFilter, type AggregateFn, type AggregateType, type ColumnAggregate, type ColumnFilter, type ExportOptions, type FilterFn, type FilterOperator, type RowId, type SortConfig, type SortDirection, type TableEngine, type TableGroup, type TableOptions, type TableState, computeAggregate, createTable, matchesColumnFilter, matchesOperator, resolveOperator };
|
package/dist/table.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
computeAggregate,
|
|
3
|
+
createTable,
|
|
4
|
+
matchesColumnFilter,
|
|
5
|
+
matchesOperator,
|
|
6
|
+
resolveOperator
|
|
7
|
+
} from "./chunk-ZWB7JGAJ.js";
|
|
8
|
+
import "./chunk-5CCD5Q4B.js";
|
|
9
|
+
export {
|
|
10
|
+
computeAggregate,
|
|
11
|
+
createTable,
|
|
12
|
+
matchesColumnFilter,
|
|
13
|
+
matchesOperator,
|
|
14
|
+
resolveOperator
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|