@ryuzaki13/react-foundation-lib 1.3.1 → 1.4.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/README.md +20 -16
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/index.js +77 -64
- package/dist/table/index.js.map +1 -1
- package/dist/table/tanStackFeatures.d.ts +19 -0
- package/dist/table/tanStackFeatures.d.ts.map +1 -0
- package/dist/table/types.d.ts +17 -2
- package/dist/table/types.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/array/README.mdx +1630 -0
- package/src/binary/README.mdx +1405 -0
- package/src/copy/README.mdx +992 -0
- package/src/crypto/README.mdx +1052 -0
- package/src/dom/README.mdx +2179 -0
- package/src/file/README.mdx +1957 -0
- package/src/formatters/README.mdx +469 -0
- package/src/formatters/boolean/README.mdx +494 -0
- package/src/formatters/date/README.mdx +732 -0
- package/src/formatters/number/README.mdx +542 -0
- package/src/formatters/pipeline/README.mdx +629 -0
- package/src/formatters/rowBased/README.mdx +486 -0
- package/src/formatters/strings/README.mdx +442 -0
- package/src/formatters/valueState/README.mdx +459 -0
- package/src/formulas/README.mdx +1283 -0
- package/src/binary/README.md +0 -110
- package/src/docs/browserAndReact.mdx +0 -150
- package/src/docs/filesAndExcel.mdx +0 -163
- package/src/docs/formatters-runtime.mdx +0 -455
- package/src/docs/formatters.mdx +0 -380
- package/src/docs/odataAndTables.mdx +0 -178
- package/src/docs/pureUtilities.mdx +0 -96
- package/src/docs/runtimeAndState.mdx +0 -155
- package/src/file/README.md +0 -289
- package/src/formatters/date/README.md +0 -520
- package/src/formatters/number/README.md +0 -123
- package/src/formatters/valueState/README.md +0 -275
- package/src/formulas/README.md +0 -42
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ import type { RowRecord } from "@ryuzaki13/react-foundation-lib/types";
|
|
|
30
30
|
| Entry point | Что может потребоваться в host-проекте |
|
|
31
31
|
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
32
32
|
| `formatters`, `array`, `utils`, `validators` | Обычно не требуют дополнительных runtime-зависимостей. |
|
|
33
|
-
| `hooks`, `dom`, `copy`, `media`, `pwa`
|
|
33
|
+
| `hooks`, `binary`, `dom`, `copy`, `media`, `pwa` | `react`: `binary` экспортирует `useBinaryFile`, остальные entrypoints требуют React при использовании hooks. |
|
|
34
34
|
| `query-client`, `error-report` | `@tanstack/react-query`, `@tanstack/query-persist-client-core`, `@tanstack/query-broadcast-client-experimental`. |
|
|
35
35
|
| `odata-service` | `zod`; отдельные helpers типизируются вокруг `@tanstack/react-query`. |
|
|
36
36
|
| `odata`, `notifications` | `zustand`, для отдельных store-helpers также `immer`. |
|
|
@@ -80,6 +80,7 @@ npm run pack:dry-run
|
|
|
80
80
|
| Числа, проценты, валютные числа, compact axis labels | [`formatters/number`](./src/formatters/number/index.ts), тесты: [`formatNumber.test.ts`](./src/formatters/number/formatNumber.test.ts), [`parseNumber.test.ts`](./src/formatters/number/parseNumber.test.ts) |
|
|
81
81
|
| Строки, ФИО, телефон, leading zeros, SAP boolean | [`formatters`](./src/formatters/index.ts), тесты: [`common.test.ts`](./src/formatters/common.test.ts), [`boolean.test.ts`](./src/formatters/boolean/boolean.test.ts), [`strings.test.ts`](./src/formatters/strings/strings.test.ts) |
|
|
82
82
|
| Runtime-форматирование ячеек таблицы | [`formatters/pipeline`](./src/formatters/pipeline/index.ts), тесты в [`formatters/pipeline`](./src/formatters/pipeline) |
|
|
83
|
+
| Группировка, дедупликация, порядок и нормализация массивов | [`array`](./src/array/index.ts), подробный README: [`array/README.mdx`](./src/array/README.mdx) |
|
|
83
84
|
| OData metadata, filters, sorts, path, values | [`odata-service`](./src/odata-service/index.ts), тесты в [`odata-service`](./src/odata-service) |
|
|
84
85
|
| Справочные code/text пары OData collections | [`odata`](./src/odata/index.ts), тест: [`odata.test.ts`](./src/odata/odata.test.ts) |
|
|
85
86
|
| TanStack Table helpers | [`table`](./src/table/index.ts), тесты в [`table`](./src/table) |
|
|
@@ -95,9 +96,11 @@ npm run pack:dry-run
|
|
|
95
96
|
|
|
96
97
|
## Форматирование и значения
|
|
97
98
|
|
|
99
|
+
Полный пользовательский путеводитель находится в [`formatters/README.mdx`](./src/formatters/README.mdx). Он объясняет общие правила, публичную границу единственного entrypoint `@ryuzaki13/react-foundation-lib/formatters` и ведёт к подробным документам каждой предметной области. Разделы ниже дают только краткую карту пакета и не заменяют API-документацию.
|
|
100
|
+
|
|
98
101
|
### `formatters/date`
|
|
99
102
|
|
|
100
|
-
Файлы: [`formatters/date/index.ts`](./src/formatters/date/index.ts), подробный README: [`formatters/date/README.
|
|
103
|
+
Файлы: [`formatters/date/index.ts`](./src/formatters/date/index.ts), подробный README: [`formatters/date/README.mdx`](./src/formatters/date/README.mdx).
|
|
101
104
|
|
|
102
105
|
Главная идея: модуль работает в плавающей календарной семантике. ISO/OData строки с timezone не пересчитываются в timezone клиента, а сохраняют видимые компоненты даты и времени.
|
|
103
106
|
|
|
@@ -125,7 +128,7 @@ npm run pack:dry-run
|
|
|
125
128
|
|
|
126
129
|
### `formatters/number`
|
|
127
130
|
|
|
128
|
-
Файлы: [`formatters/number/index.ts`](./src/formatters/number/index.ts), README: [`formatters/number/README.
|
|
131
|
+
Файлы: [`formatters/number/index.ts`](./src/formatters/number/index.ts), README: [`formatters/number/README.mdx`](./src/formatters/number/README.mdx).
|
|
129
132
|
|
|
130
133
|
Модуль форматирует числа через presets и кеширует `Intl.NumberFormat`. Это стандартный путь для таблиц, графиков и SAP-like строк.
|
|
131
134
|
|
|
@@ -136,7 +139,7 @@ npm run pack:dry-run
|
|
|
136
139
|
| `formatNumber(value, presetOrName)` | Универсальный formatter по имени preset или объекту preset. |
|
|
137
140
|
| `formatNumberAsInteger`, `formatNumberAsDecimal*`, `formatNumberAsCurrency`, `formatNumberAsPercent`, `formatNumberAsPrice`, `formatNumberAsTonnage` | Типовые UI-форматы. |
|
|
138
141
|
| `formatNumberAs*OrEmpty` | То же, но semantic zero отображается пустой строкой. |
|
|
139
|
-
|
|
|
142
|
+
| Встроенные `compact-*` presets и собственный `NumberFormatPreset.compact` | Compact-формат с `тыс`, `млн`, `млрд`, `трлн`. |
|
|
140
143
|
| `parseNumber`, `toFiniteNumber`, `toPositiveInteger`, `isPositiveValue`, `isZeroValue` | Чтение SAP-like чисел из `unknown`. |
|
|
141
144
|
| `registerNumberPreset`, `getNumberPreset`, `getNumberPresetNames`, `resetNumberPresets`, `clearFormatCache` | Реестр presets и кеш formatter-ов. |
|
|
142
145
|
|
|
@@ -152,7 +155,7 @@ npm run pack:dry-run
|
|
|
152
155
|
|
|
153
156
|
### `formatters/strings`
|
|
154
157
|
|
|
155
|
-
Файлы: [`formatters/strings/index.ts`](./src/formatters/strings/index.ts).
|
|
158
|
+
Файлы: [`formatters/strings/index.ts`](./src/formatters/strings/index.ts), подробный README: [`formatters/strings/README.mdx`](./src/formatters/strings/README.mdx).
|
|
156
159
|
|
|
157
160
|
| API | Поведение |
|
|
158
161
|
| ---------------------------------------------------- | --------------------------------------------------------------- |
|
|
@@ -182,7 +185,7 @@ npm run pack:dry-run
|
|
|
182
185
|
|
|
183
186
|
### `formatters/boolean`
|
|
184
187
|
|
|
185
|
-
Файлы: [`formatters/boolean/index.ts`](./src/formatters/boolean/index.ts), тест: [`boolean.test.ts`](./src/formatters/boolean/boolean.test.ts).
|
|
188
|
+
Файлы: [`formatters/boolean/index.ts`](./src/formatters/boolean/index.ts), подробный README: [`formatters/boolean/README.mdx`](./src/formatters/boolean/README.mdx), тест: [`boolean.test.ts`](./src/formatters/boolean/boolean.test.ts).
|
|
186
189
|
|
|
187
190
|
| API | Поведение |
|
|
188
191
|
| ------------------ | ------------------------------------------------------------- |
|
|
@@ -192,7 +195,7 @@ npm run pack:dry-run
|
|
|
192
195
|
|
|
193
196
|
### `formatters/valueState`
|
|
194
197
|
|
|
195
|
-
Файлы: [`formatters/valueState/index.ts`](./src/formatters/valueState/index.ts), README: [`formatters/valueState/README.
|
|
198
|
+
Файлы: [`formatters/valueState/index.ts`](./src/formatters/valueState/index.ts), README: [`formatters/valueState/README.mdx`](./src/formatters/valueState/README.mdx).
|
|
196
199
|
|
|
197
200
|
Модуль вычисляет визуальный `State` (`none`, `information`, `success`, `warning`, `error`) по значению.
|
|
198
201
|
|
|
@@ -210,7 +213,7 @@ npm run pack:dry-run
|
|
|
210
213
|
|
|
211
214
|
### `formatters/pipeline`
|
|
212
215
|
|
|
213
|
-
Файлы: [`formatters/pipeline/index.ts`](./src/formatters/pipeline/index.ts).
|
|
216
|
+
Файлы: [`formatters/pipeline/index.ts`](./src/formatters/pipeline/index.ts), подробный README: [`formatters/pipeline/README.mdx`](./src/formatters/pipeline/README.mdx).
|
|
214
217
|
|
|
215
218
|
Pipeline — runtime форматирования ячейки. Он принимает сериализуемый `FormattersPipelineConfig` версии `1`, валидирует `plan` или строит линейный plan из `graph`, компилирует executor и возвращает display-result.
|
|
216
219
|
|
|
@@ -249,7 +252,7 @@ Pipeline — runtime форматирования ячейки. Он прини
|
|
|
249
252
|
|
|
250
253
|
### `formatters/rowBased`
|
|
251
254
|
|
|
252
|
-
Файлы: [`formatters/rowBased/index.ts`](./src/formatters/rowBased/index.ts), тест: [`rowBased.test.ts`](./src/formatters/rowBased/rowBased.test.ts).
|
|
255
|
+
Файлы: [`formatters/rowBased/index.ts`](./src/formatters/rowBased/index.ts), подробный README: [`formatters/rowBased/README.mdx`](./src/formatters/rowBased/README.mdx), тест: [`rowBased.test.ts`](./src/formatters/rowBased/rowBased.test.ts).
|
|
253
256
|
|
|
254
257
|
Это маленький реестр формул для row-based override внутри pipeline.
|
|
255
258
|
|
|
@@ -264,7 +267,7 @@ Pipeline — runtime форматирования ячейки. Он прини
|
|
|
264
267
|
|
|
265
268
|
### `formulas`
|
|
266
269
|
|
|
267
|
-
Файлы: [`formulas/index.ts`](./src/formulas/index.ts), README: [`formulas/README.
|
|
270
|
+
Файлы: [`formulas/index.ts`](./src/formulas/index.ts), подробный README: [`formulas/README.mdx`](./src/formulas/README.mdx).
|
|
268
271
|
|
|
269
272
|
Инфраструктура реестра клиентских формул таблицы для calculated/clientOnly measure-колонок. Definitions принадлежат host-приложению и не входят в foundation-пакет.
|
|
270
273
|
|
|
@@ -455,7 +458,7 @@ Pipeline — runtime форматирования ячейки. Он прини
|
|
|
455
458
|
|
|
456
459
|
### `file` и `binary`
|
|
457
460
|
|
|
458
|
-
Файлы: [`file/index.ts`](./src/file/index.ts), README: [`file/README.
|
|
461
|
+
Файлы: [`file/index.ts`](./src/file/index.ts), подробный README: [`file/README.mdx`](./src/file/README.mdx); [`binary/index.ts`](./src/binary/index.ts), README: [`binary/README.mdx`](./src/binary/README.mdx).
|
|
459
462
|
|
|
460
463
|
`file`:
|
|
461
464
|
|
|
@@ -491,7 +494,7 @@ Pipeline — runtime форматирования ячейки. Он прини
|
|
|
491
494
|
|
|
492
495
|
### `dom`
|
|
493
496
|
|
|
494
|
-
Файлы: [`dom/index.ts`](./src/dom/index.ts), тест: [`dom.test.tsx`](./src/dom/dom.test.tsx).
|
|
497
|
+
Файлы: [`dom/index.ts`](./src/dom/index.ts), подробный README: [`dom/README.mdx`](./src/dom/README.mdx), тест: [`dom.test.tsx`](./src/dom/dom.test.tsx).
|
|
495
498
|
|
|
496
499
|
| API | Поведение |
|
|
497
500
|
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
@@ -524,14 +527,14 @@ Pipeline — runtime форматирования ячейки. Он прини
|
|
|
524
527
|
|
|
525
528
|
### `copy`
|
|
526
529
|
|
|
527
|
-
Файлы: [`copy/index.ts`](./src/copy/index.ts).
|
|
530
|
+
Файлы: [`copy/index.ts`](./src/copy/index.ts), подробный README: [`copy/README.mdx`](./src/copy/README.mdx).
|
|
528
531
|
|
|
529
532
|
| API | Поведение |
|
|
530
533
|
| -------------------------------- | --------------------------------------------------------------------------------------- |
|
|
531
534
|
| `useCopyText` | Clipboard API в secure context, fallback через `execCommand`; пустой текст не копирует. |
|
|
532
535
|
| `useElementText` | Trimmed `textContent` ref. |
|
|
533
536
|
| `useCopyElementText` | Копирует текст из ref. |
|
|
534
|
-
| `useCopyFeedback` | `isCopied` на 2
|
|
537
|
+
| `useCopyFeedback` | `isCopied` на 2 секунды; повторные вызовы создают независимые timers. |
|
|
535
538
|
| `useCopyElementTextWithFeedback` | Копирование элемента + feedback. |
|
|
536
539
|
|
|
537
540
|
### `media`
|
|
@@ -634,13 +637,14 @@ Service worker runtime helpers живут в [`pwa/serviceWorker.ts`](./src/pwa/
|
|
|
634
637
|
|
|
635
638
|
### `array`
|
|
636
639
|
|
|
637
|
-
Файлы: [`array/index.ts`](./src/array/index.ts), тесты: [`array.test.ts`](./src/array/array.test.ts), [`reorder.test.ts`](./src/array/reorder.test.ts).
|
|
640
|
+
Файлы: [`array/index.ts`](./src/array/index.ts), подробный README: [`array/README.mdx`](./src/array/README.mdx), тесты: [`array.test.ts`](./src/array/array.test.ts), [`reorder.test.ts`](./src/array/reorder.test.ts).
|
|
638
641
|
|
|
639
642
|
| API | Поведение |
|
|
640
643
|
| --------------------------------------------------- | -------------------------------------------------------------------------- |
|
|
641
644
|
| `arrayGroupBy`, `arrayGroupByToArray` | Группировка по ключу, порядок элементов внутри группы сохраняется. |
|
|
642
645
|
| `arrayToMap` | Map-object по первому встреченному значению ключа. |
|
|
643
646
|
| `arrayUniqueBy` | Дедупликация по ключу без перестановки первого значения. |
|
|
647
|
+
| `arrayDeduplicate` | Дедупликация значений через семантику `Set` с сохранением первого вхождения. |
|
|
644
648
|
| `filterAndDeduplicateIds` | Оставляет только allowed ids, убирает пустые и дубли. |
|
|
645
649
|
| `appendMissingIds` | Добавляет отсутствующие ids в конец базового списка. |
|
|
646
650
|
| `pickExistingMapValues` | Значения `Map` в порядке keys, отсутствующие ключи пропускаются. |
|
|
@@ -688,7 +692,7 @@ Service worker runtime helpers живут в [`pwa/serviceWorker.ts`](./src/pwa/
|
|
|
688
692
|
|
|
689
693
|
### `crypto` и `session-storage`
|
|
690
694
|
|
|
691
|
-
Файлы: [`crypto/index.ts`](./src/crypto/index.ts), [`session-storage/index.ts`](./src/session-storage/index.ts).
|
|
695
|
+
Файлы: [`crypto/index.ts`](./src/crypto/index.ts), подробный README: [`crypto/README.mdx`](./src/crypto/README.mdx); [`session-storage/index.ts`](./src/session-storage/index.ts).
|
|
692
696
|
|
|
693
697
|
| API | Поведение |
|
|
694
698
|
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
package/dist/table/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/table/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/table/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC"}
|
package/dist/table/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { d as e, i as t, u as n } from "../chunks/array-D-_yMMUK.js";
|
|
2
2
|
import { useCallback as r, useEffect as i, useEffectEvent as a, useRef as o, useState as s } from "react";
|
|
3
|
+
import { columnOrderingFeature as c, columnPinningFeature as l, columnResizingFeature as u, columnSizingFeature as d, columnVisibilityFeature as f, createExpandedRowModel as p, rowExpandingFeature as m, rowSelectionFeature as h, tableFeatures as g } from "@tanstack/react-table";
|
|
3
4
|
//#region src/table/columnLayout.ts
|
|
4
|
-
function
|
|
5
|
+
function _({ ids: n, order: r }) {
|
|
5
6
|
return t(e(r, n), n);
|
|
6
7
|
}
|
|
7
|
-
function
|
|
8
|
+
function v({ ids: e, getWidth: t }) {
|
|
8
9
|
return e.map((e) => ({
|
|
9
10
|
id: e,
|
|
10
11
|
width: t(e)
|
|
@@ -12,14 +13,14 @@ function l({ ids: e, getWidth: t }) {
|
|
|
12
13
|
}
|
|
13
14
|
//#endregion
|
|
14
15
|
//#region src/table/columnOrder.ts
|
|
15
|
-
function
|
|
16
|
+
function y(e) {
|
|
16
17
|
return Array.from(new Set((e ?? []).filter((e) => e.trim().length > 0)));
|
|
17
18
|
}
|
|
18
|
-
function
|
|
19
|
+
function b(e, t, n) {
|
|
19
20
|
let r = [...e], [i] = r.splice(t, 1);
|
|
20
21
|
return i === void 0 || r.splice(n, 0, i), r;
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
+
function x(e) {
|
|
23
24
|
let { activeId: t, overId: n, order: r } = e;
|
|
24
25
|
if (!t || !n || t === n) return [...r];
|
|
25
26
|
let i = new Set(e.headerIds);
|
|
@@ -31,50 +32,50 @@ function f(e) {
|
|
|
31
32
|
let s = [...r];
|
|
32
33
|
s.includes(t) || s.push(t), s.includes(n) || s.push(n);
|
|
33
34
|
let c = s.indexOf(t), l = s.indexOf(n);
|
|
34
|
-
return c === -1 || l === -1 || c === l ? s :
|
|
35
|
+
return c === -1 || l === -1 || c === l ? s : b(s, c, l);
|
|
35
36
|
}
|
|
36
|
-
function
|
|
37
|
-
let t =
|
|
37
|
+
function S(e) {
|
|
38
|
+
let t = x(e);
|
|
38
39
|
return n(t, e.order) ? null : t;
|
|
39
40
|
}
|
|
40
41
|
//#endregion
|
|
41
42
|
//#region src/table/columnSizing.ts
|
|
42
|
-
var
|
|
43
|
-
function
|
|
43
|
+
var C = 60;
|
|
44
|
+
function w(e, t = 60) {
|
|
44
45
|
let n = Number.isFinite(t) && t > 0 ? Math.floor(t) : 60;
|
|
45
46
|
return Math.max(n, Number.isFinite(e) ? Math.floor(e) : n);
|
|
46
47
|
}
|
|
47
|
-
function
|
|
48
|
+
function T(e, t = 60) {
|
|
48
49
|
let n = {};
|
|
49
|
-
for (let [r, i] of Object.entries(e ?? {})) typeof r != "string" || r.trim().length === 0 || !Number.isFinite(i) || (n[r] =
|
|
50
|
+
for (let [r, i] of Object.entries(e ?? {})) typeof r != "string" || r.trim().length === 0 || !Number.isFinite(i) || (n[r] = w(i, t));
|
|
50
51
|
return n;
|
|
51
52
|
}
|
|
52
|
-
function
|
|
53
|
-
return t.trim().length === 0 ?
|
|
54
|
-
...
|
|
55
|
-
[t]:
|
|
53
|
+
function E(e, t, n, r = 60) {
|
|
54
|
+
return t.trim().length === 0 ? T(e, r) : {
|
|
55
|
+
...T(e, r),
|
|
56
|
+
[t]: w(n, r)
|
|
56
57
|
};
|
|
57
58
|
}
|
|
58
|
-
function
|
|
59
|
+
function D(e, t) {
|
|
59
60
|
let n = {};
|
|
60
61
|
for (let [r, i] of Object.entries(e)) r !== t && (n[r] = i);
|
|
61
62
|
return n;
|
|
62
63
|
}
|
|
63
64
|
//#endregion
|
|
64
65
|
//#region src/table/cellSelection.ts
|
|
65
|
-
var
|
|
66
|
-
function
|
|
66
|
+
var O = /* @__PURE__ */ new Set(["direct", "primary-modifier"]);
|
|
67
|
+
function k(e) {
|
|
67
68
|
return `${encodeURIComponent(e.rowId)}::${encodeURIComponent(e.columnId)}`;
|
|
68
69
|
}
|
|
69
|
-
function
|
|
70
|
-
let n = new Set(e.map(
|
|
70
|
+
function A(e, t) {
|
|
71
|
+
let n = new Set(e.map(k)), r = new Set(t.map(k));
|
|
71
72
|
return n.size === r.size && [...n].every((e) => r.has(e));
|
|
72
73
|
}
|
|
73
|
-
function
|
|
74
|
+
function j(e, t, n, r) {
|
|
74
75
|
if (r === "none" || !e?.length) return [];
|
|
75
76
|
let i = new Map(t.map((e, t) => [e, t])), a = new Map(n.map((e, t) => [e, t])), o = /* @__PURE__ */ new Set(), s = e.filter((e) => {
|
|
76
77
|
if (!(i.has(e.rowId) && a.has(e.columnId))) return !1;
|
|
77
|
-
let t =
|
|
78
|
+
let t = k(e);
|
|
78
79
|
return !o.has(t) && (o.add(t), !0);
|
|
79
80
|
}).sort((e, t) => {
|
|
80
81
|
let n = (i.get(e.rowId) ?? 0) - (i.get(t.rowId) ?? 0);
|
|
@@ -86,52 +87,52 @@ function S(e, t, n, r) {
|
|
|
86
87
|
}
|
|
87
88
|
return s;
|
|
88
89
|
}
|
|
89
|
-
function
|
|
90
|
+
function M(e, t, n) {
|
|
90
91
|
if (n === "none") return [];
|
|
91
|
-
let r =
|
|
92
|
-
return n === "single" ? i ? [] : [t] : i ? e.filter((e) =>
|
|
92
|
+
let r = k(t), i = e.some((e) => k(e) === r);
|
|
93
|
+
return n === "single" ? i ? [] : [t] : i ? e.filter((e) => k(e) !== r) : [...e, t];
|
|
93
94
|
}
|
|
94
|
-
function
|
|
95
|
-
return typeof e == "string" &&
|
|
95
|
+
function N(e, t = "direct") {
|
|
96
|
+
return typeof e == "string" && O.has(e) ? e : t;
|
|
96
97
|
}
|
|
97
|
-
function
|
|
98
|
+
function P(e, t) {
|
|
98
99
|
return t === "direct" || (e.ctrlKey || e.metaKey) && !e.shiftKey && !e.altKey;
|
|
99
100
|
}
|
|
100
101
|
//#endregion
|
|
101
102
|
//#region src/table/odataAdapter.ts
|
|
102
|
-
function
|
|
103
|
+
function F(e) {
|
|
103
104
|
let { role: t, type: n } = e;
|
|
104
105
|
return {
|
|
105
106
|
role: n === "decimal" || n === "float" || n === "double" || n === "int" || n === "byte" ? "measure" : t,
|
|
106
107
|
type: n
|
|
107
108
|
};
|
|
108
109
|
}
|
|
109
|
-
function
|
|
110
|
+
function I(e) {
|
|
110
111
|
return e.role === "measure" ? "right" : "left";
|
|
111
112
|
}
|
|
112
|
-
function
|
|
113
|
+
function L(e, t) {
|
|
113
114
|
return e.semanticType !== "code" || !e.linkedColumnId || t.get(e.linkedColumnId)?.semanticType !== "text";
|
|
114
115
|
}
|
|
115
|
-
function
|
|
116
|
+
function R(e) {
|
|
116
117
|
if (typeof e.id == "string" && e.id.trim()) return e.id;
|
|
117
118
|
if ("accessorKey" in e && typeof e.accessorKey == "string" && e.accessorKey.trim()) return e.accessorKey;
|
|
118
119
|
}
|
|
119
|
-
function
|
|
120
|
+
function z(e, t) {
|
|
120
121
|
return e.map((e) => "columns" in e && Array.isArray(e.columns) && e.columns.length > 0 ? {
|
|
121
122
|
...e,
|
|
122
|
-
columns:
|
|
123
|
+
columns: z(e.columns, t)
|
|
123
124
|
} : t(e));
|
|
124
125
|
}
|
|
125
|
-
function
|
|
126
|
+
function B(e, t) {
|
|
126
127
|
let n = new Map(e.map((e) => [e.id, e]));
|
|
127
128
|
return Object.fromEntries(e.map((e) => {
|
|
128
|
-
let r = t?.resolveVisible?.(e) ??
|
|
129
|
+
let r = t?.resolveVisible?.(e) ?? L(e, n);
|
|
129
130
|
return [e.id, r];
|
|
130
131
|
}));
|
|
131
132
|
}
|
|
132
|
-
function
|
|
133
|
+
function V(e, t) {
|
|
133
134
|
return e.map((e) => {
|
|
134
|
-
let n =
|
|
135
|
+
let n = F(e), r = I(n), i = t?.resolveFormatting?.(e);
|
|
135
136
|
return {
|
|
136
137
|
id: e.id,
|
|
137
138
|
accessorKey: e.id,
|
|
@@ -148,17 +149,17 @@ function M(e, t) {
|
|
|
148
149
|
};
|
|
149
150
|
});
|
|
150
151
|
}
|
|
151
|
-
function
|
|
152
|
+
function H(e, t, n) {
|
|
152
153
|
let r = new Map(t.map((e) => [e.id, e]));
|
|
153
|
-
return
|
|
154
|
-
let t =
|
|
154
|
+
return z(e, (e) => {
|
|
155
|
+
let t = R(e);
|
|
155
156
|
if (!t) return e;
|
|
156
157
|
let i = n?.resolveMetadataColumn?.({
|
|
157
158
|
columnId: t,
|
|
158
159
|
metadataColumnsById: r
|
|
159
160
|
}) ?? r.get(t);
|
|
160
161
|
if (!i || e.meta?.formatting?.role && e.meta.formatting.type) return e;
|
|
161
|
-
let a =
|
|
162
|
+
let a = F(i);
|
|
162
163
|
return {
|
|
163
164
|
...e,
|
|
164
165
|
meta: {
|
|
@@ -175,34 +176,34 @@ function N(e, t, n) {
|
|
|
175
176
|
}
|
|
176
177
|
//#endregion
|
|
177
178
|
//#region src/table/selection.ts
|
|
178
|
-
var
|
|
179
|
+
var U = /* @__PURE__ */ new Set([
|
|
179
180
|
"none",
|
|
180
181
|
"single",
|
|
181
182
|
"multi"
|
|
182
183
|
]);
|
|
183
|
-
function
|
|
184
|
+
function W(e) {
|
|
184
185
|
return Object.keys(e).filter((t) => e[t]);
|
|
185
186
|
}
|
|
186
|
-
function
|
|
187
|
-
let n =
|
|
187
|
+
function G(e, t) {
|
|
188
|
+
let n = W(e), r = W(t);
|
|
188
189
|
return n.length === r.length && n.every((e) => t[e]);
|
|
189
190
|
}
|
|
190
|
-
function
|
|
191
|
-
return typeof e == "string" &&
|
|
191
|
+
function K(e, t = "none") {
|
|
192
|
+
return typeof e == "string" && U.has(e) ? e : t;
|
|
192
193
|
}
|
|
193
|
-
function
|
|
194
|
+
function q(e, t, n) {
|
|
194
195
|
if (n === "none") return {};
|
|
195
|
-
let r = new Set(t), i =
|
|
196
|
+
let r = new Set(t), i = W(e).filter((e) => r.has(e));
|
|
196
197
|
if (n === "single") {
|
|
197
198
|
let e = i.at(-1);
|
|
198
199
|
return e ? { [e]: !0 } : {};
|
|
199
200
|
}
|
|
200
201
|
return Object.fromEntries(i.map((e) => [e, !0]));
|
|
201
202
|
}
|
|
202
|
-
function
|
|
203
|
+
function J(e, t, n) {
|
|
203
204
|
if (n === "none") return {};
|
|
204
205
|
if (n === "single") {
|
|
205
|
-
let n =
|
|
206
|
+
let n = W(e);
|
|
206
207
|
return n.length === 1 && n[0] === t ? e : { [t]: !0 };
|
|
207
208
|
}
|
|
208
209
|
if (e[t]) {
|
|
@@ -215,15 +216,27 @@ function z(e, t, n) {
|
|
|
215
216
|
};
|
|
216
217
|
}
|
|
217
218
|
//#endregion
|
|
219
|
+
//#region src/table/tanStackFeatures.ts
|
|
220
|
+
var Y = g({
|
|
221
|
+
columnOrderingFeature: c,
|
|
222
|
+
columnPinningFeature: l,
|
|
223
|
+
columnSizingFeature: d,
|
|
224
|
+
columnResizingFeature: u,
|
|
225
|
+
columnVisibilityFeature: f,
|
|
226
|
+
rowSelectionFeature: h,
|
|
227
|
+
rowExpandingFeature: m,
|
|
228
|
+
expandedRowModel: p()
|
|
229
|
+
});
|
|
230
|
+
//#endregion
|
|
218
231
|
//#region src/table/useTableRowSelection.ts
|
|
219
|
-
function
|
|
232
|
+
function X({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: c, onRowSelectionChange: l }) {
|
|
220
233
|
let [u, d] = s({}), f = o(!1), p = r((e, t) => {
|
|
221
234
|
let n = Object.keys(e).filter((t) => e[t]), r = Object.keys(t).filter((e) => t[e]);
|
|
222
235
|
return n.length === r.length && n.every((e) => t[e]);
|
|
223
236
|
}, []), m = a((e) => {
|
|
224
|
-
d((t) =>
|
|
237
|
+
d((t) => q(t, e, n));
|
|
225
238
|
}), h = a((e, t) => {
|
|
226
|
-
let r =
|
|
239
|
+
let r = q(Object.fromEntries(e.map((e) => [e, !0])), t, n);
|
|
227
240
|
d((e) => p(e, r) ? e : (f.current = !0, r));
|
|
228
241
|
}), g = a((e) => {
|
|
229
242
|
if (!l) return;
|
|
@@ -255,28 +268,28 @@ function B({ availableRowIds: e, rowById: t, selectionMode: n, selectedRowIds: c
|
|
|
255
268
|
rowSelection: u,
|
|
256
269
|
setRowSelection: d,
|
|
257
270
|
activateRowSelection: r((e, t) => {
|
|
258
|
-
n === "none" || !t || d((t) =>
|
|
271
|
+
n === "none" || !t || d((t) => J(t, e, n));
|
|
259
272
|
}, [n])
|
|
260
273
|
};
|
|
261
274
|
}
|
|
262
275
|
//#endregion
|
|
263
276
|
//#region src/table/utils.ts
|
|
264
|
-
var
|
|
265
|
-
function
|
|
277
|
+
var Z = (/* @__PURE__ */ "button.a.input.select.textarea.label.summary.audio[controls].video[controls].[contenteditable]:not([contenteditable=\"false\"]).[tabindex]:not(td):not(th):not(tr).[draggable=\"true\"].[role=\"button\"].[role=\"link\"].[role=\"checkbox\"].[role=\"radio\"].[role=\"switch\"].[role=\"menu\"].[role=\"menuitem\"].[role=\"menuitemcheckbox\"].[role=\"menuitemradio\"].[role=\"listbox\"].[role=\"option\"].[role=\"tab\"].[role=\"tablist\"].[role=\"tree\"].[role=\"treeitem\"].[role=\"slider\"].[role=\"spinbutton\"].[role=\"textbox\"].[role=\"searchbox\"].[role=\"combobox\"]".split(".")).join(", ");
|
|
278
|
+
function Q(e) {
|
|
266
279
|
return e.meta;
|
|
267
280
|
}
|
|
268
|
-
function
|
|
281
|
+
function $(e) {
|
|
269
282
|
return e.meta?.formatting;
|
|
270
283
|
}
|
|
271
|
-
function
|
|
284
|
+
function ee(e) {
|
|
272
285
|
return typeof e == "number" ? `${e}em` : e;
|
|
273
286
|
}
|
|
274
|
-
function
|
|
287
|
+
function te(e, t) {
|
|
275
288
|
if (typeof Element > "u" || !(e instanceof Element)) return !1;
|
|
276
|
-
let n = t ? `${
|
|
289
|
+
let n = t ? `${Z}, ${t}` : Z;
|
|
277
290
|
return !!e.closest(n);
|
|
278
291
|
}
|
|
279
292
|
//#endregion
|
|
280
|
-
export {
|
|
293
|
+
export { C as DEFAULT_TABLE_COLUMN_MIN_WIDTH, A as areTableCellSelectionsEqual, G as areTableRowSelectionsEqual, v as buildTableColumnLayout, B as createTableColumnVisibilityFromODataMetadata, V as createTableColumnsFromODataMetadata, H as enrichTableColumnsWithODataFormatting, Y as foundationTableFeatures, $ as getTableColumnFormattingMeta, Q as getTableColumnMeta, te as isTableInteractiveElement, N as normalizeTableCellSelectionActivationMode, y as normalizeTableColumnOrder, T as normalizeTableColumnSizing, w as normalizeTableColumnWidth, K as normalizeTableSelectionMode, E as patchTableColumnWidth, j as pruneTableCellSelection, q as pruneTableRowSelection, D as removeTableColumnWidth, x as reorderTableHeaderColumns, S as resolveReorderedTableHeaderColumns, R as resolveStableColumnId, F as resolveTableColumnFormattingContextFromODataColumn, _ as resolveTableColumnOrder, ee as resolveTableLength, P as shouldActivateTableCellSelection, M as toggleTableCellSelection, J as toggleTableRowSelection, X as useTableRowSelection };
|
|
281
294
|
|
|
282
295
|
//# sourceMappingURL=index.js.map
|