@ishibashi0112/spreadsheet-grid-core 0.40.0 → 0.41.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 +25 -0
- package/dist/controllers/asyncSelectOptionsSource.cjs +1 -0
- package/dist/controllers/asyncSelectOptionsSource.d.ts +32 -0
- package/dist/controllers/asyncSelectOptionsSource.js +90 -0
- package/dist/controllers/autoHeightMeasurer.cjs +1 -1
- package/dist/controllers/autoHeightMeasurer.js +19 -19
- package/dist/controllers/columnAutosizeRunner.cjs +1 -1
- package/dist/controllers/columnAutosizeRunner.js +7 -7
- package/dist/controllers/filterPopoverController.cjs +1 -1
- package/dist/controllers/filterPopoverController.js +7 -7
- package/dist/controllers/pointerInteractionsController.cjs +1 -1
- package/dist/controllers/pointerInteractionsController.js +71 -71
- package/dist/controllers/selectOptionsCollector.cjs +1 -1
- package/dist/controllers/selectOptionsCollector.d.ts +4 -1
- package/dist/controllers/selectOptionsCollector.js +7 -7
- package/dist/engine/columnCommands.cjs +1 -1
- package/dist/engine/columnCommands.js +54 -54
- package/dist/engine/filterPopoverCommands.cjs +1 -1
- package/dist/engine/filterPopoverCommands.d.ts +5 -2
- package/dist/engine/filterPopoverCommands.js +12 -12
- package/dist/engine/notifiers.cjs +1 -1
- package/dist/engine/notifiers.d.ts +3 -1
- package/dist/engine/notifiers.js +11 -11
- package/dist/engine/rowPipeline.cjs +1 -1
- package/dist/engine/rowPipeline.d.ts +2 -0
- package/dist/engine/rowPipeline.js +19 -19
- package/dist/logic/gridHeight.cjs +1 -0
- package/dist/logic/gridHeight.d.ts +12 -0
- package/dist/logic/gridHeight.js +32 -0
- package/dist/logic/gridState.cjs +1 -1
- package/dist/logic/gridState.d.ts +5 -0
- package/dist/logic/gridState.js +10 -7
- package/dist/model/gridTypes.core.d.ts +1024 -0
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# @ishibashi0112/spreadsheet-grid-core
|
|
2
|
+
|
|
3
|
+
The framework-agnostic core of [`@ishibashi0112/spreadsheet-grid`](https://www.npmjs.com/package/@ishibashi0112/spreadsheet-grid): state store, derived-value computation, commands and DOM controllers. It does not depend on React.
|
|
4
|
+
|
|
5
|
+
**You normally do not install or import this package directly.** It is a regular dependency of the React package, which re-exports the public types. Use `@ishibashi0112/spreadsheet-grid` in React apps.
|
|
6
|
+
|
|
7
|
+
## What is in here
|
|
8
|
+
|
|
9
|
+
- Public type definitions with JSDoc. The field docs of `SpreadsheetGridProps`, `GridColumn`, `SpreadsheetGridHandle` and the other option types are in `dist/model/gridTypes.core.d.ts`; they match the tables in `API_REFERENCE.md` of the React package.
|
|
10
|
+
- Framework-agnostic modules under subpaths: `@ishibashi0112/spreadsheet-grid-core/<dir>/<module>` (`model` / `logic` / `controllers` / `engine` / `utils` / `testing`). They are building blocks for the framework adapters and are not covered by `API_REFERENCE.md`.
|
|
11
|
+
|
|
12
|
+
## License
|
|
13
|
+
|
|
14
|
+
MIT
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 日本語
|
|
19
|
+
|
|
20
|
+
[`@ishibashi0112/spreadsheet-grid`](https://www.npmjs.com/package/@ishibashi0112/spreadsheet-grid) のフレームワーク非依存コア(状態 store / 派生値計算 / コマンド / DOM コントローラ)です。React に依存しません。
|
|
21
|
+
|
|
22
|
+
**通常は直接インストール / import しません。** React 版パッケージの通常依存として自動で入り、公開型も React 版から再エクスポートされます。React アプリでは `@ishibashi0112/spreadsheet-grid` を使ってください。
|
|
23
|
+
|
|
24
|
+
- 公開型の定義(JSDoc 付き)。`SpreadsheetGridProps` / `GridColumn` / `SpreadsheetGridHandle` などのフィールドの説明は `dist/model/gridTypes.core.d.ts` にあり、React 版パッケージ同梱の `API_REFERENCE.md` の表と同じ内容です。
|
|
25
|
+
- サブパス `@ishibashi0112/spreadsheet-grid-core/<dir>/<module>`(`model` / `logic` / `controllers` / `engine` / `utils` / `testing`)のモジュールは各フレームワーク版(アダプタ)向けの部品で、`API_REFERENCE.md` の対象外です。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("./selectOptionsCollector.cjs");var n=[],r=new Set,i={status:`loading`,options:n,allValues:r,progress:0},a={columnKey:null,result:t.IDLE_SELECT_OPTIONS_RESULT},o=(e,t)=>{if(!(t in e))return e;let n={};for(let r of Object.keys(e))r!==t&&(n[r]=e[r]);return n},s=e=>e instanceof Error?e.message||e.name:typeof e==`string`?e:String(e),c=(e,n)=>n===null?t.IDLE_SELECT_OPTIONS_RESULT:e.columnKey===n?e.result:i,l=()=>{let t=e.createValueStore(a),c=null,l=null,u=0,d=()=>{l?.abort(),l=null},f=e=>{let{columnKey:a,column:c,fetch:f}=e;if(a===null||c===null||f===null)return;d();let p=++u,m=new AbortController;l=m,t.setSnapshot({columnKey:a,result:i});let h;try{h=Promise.resolve(f({columnKey:a,column:c,columnFilters:o(e.columnFilters,a),globalText:e.globalText,signal:m.signal}))}catch(e){h=Promise.reject(e)}h.then(e=>{if(p!==u||m.signal.aborted)return;l=null;let r=Array.isArray(e?.options)?e.options:n;t.setSnapshot({columnKey:a,result:{status:`ready`,options:r,allValues:new Set(r.map(e=>e.value)),progress:1,truncated:e?.truncated===!0}})},e=>{p!==u||m.signal.aborted||(l=null,t.setSnapshot({columnKey:a,result:{status:`error`,options:n,allValues:r,progress:0,errorMessage:s(e)}}))})};return{update:e=>{let n=c;if(c=e,n===null||n.columnKey!==e.columnKey||n.fetch===null!=(e.fetch===null)){if(e.columnKey===null||e.fetch===null){d(),u+=1,t.getSnapshot()!==a&&t.setSnapshot(a);return}f(e)}},retry:()=>{c&&f(c)},subscribe:t.subscribe,getSnapshot:t.getSnapshot,dispose:()=>{d(),u+=1,c=null}}};exports.LOADING_SELECT_OPTIONS_RESULT=i,exports.createAsyncSelectOptionsSource=l,exports.omitOwnColumnFilter=o,exports.selectAsyncOptionsResult=c;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ColumnFilterValue, GetFilterOptionsResult, GridColumn } from '../model/gridTypes.unbound';
|
|
2
|
+
import { type ColumnSelectOptionsResult } from './selectOptionsCollector';
|
|
3
|
+
export type AsyncSelectOptionsFetchParams<T> = {
|
|
4
|
+
columnKey: string;
|
|
5
|
+
column: GridColumn<T>;
|
|
6
|
+
columnFilters: Record<string, ColumnFilterValue>;
|
|
7
|
+
globalText: string;
|
|
8
|
+
signal: AbortSignal;
|
|
9
|
+
};
|
|
10
|
+
export type AsyncSelectOptionsFetch<T> = (params: AsyncSelectOptionsFetchParams<T>) => Promise<GetFilterOptionsResult>;
|
|
11
|
+
export type AsyncSelectOptionsSourceArgs<T> = {
|
|
12
|
+
columnKey: string | null;
|
|
13
|
+
column: GridColumn<T> | null;
|
|
14
|
+
columnFilters: Record<string, ColumnFilterValue>;
|
|
15
|
+
globalText: string;
|
|
16
|
+
fetch: AsyncSelectOptionsFetch<T> | null;
|
|
17
|
+
};
|
|
18
|
+
export type AsyncSelectOptionsSnapshot = {
|
|
19
|
+
columnKey: string | null;
|
|
20
|
+
result: ColumnSelectOptionsResult;
|
|
21
|
+
};
|
|
22
|
+
export type AsyncSelectOptionsSource<T> = {
|
|
23
|
+
update: (args: AsyncSelectOptionsSourceArgs<T>) => void;
|
|
24
|
+
retry: () => void;
|
|
25
|
+
subscribe: (listener: () => void) => () => void;
|
|
26
|
+
getSnapshot: () => AsyncSelectOptionsSnapshot;
|
|
27
|
+
dispose: () => void;
|
|
28
|
+
};
|
|
29
|
+
export declare const LOADING_SELECT_OPTIONS_RESULT: ColumnSelectOptionsResult;
|
|
30
|
+
export declare const omitOwnColumnFilter: (columnFilters: Record<string, ColumnFilterValue>, columnKey: string) => Record<string, ColumnFilterValue>;
|
|
31
|
+
export declare const selectAsyncOptionsResult: (snapshot: AsyncSelectOptionsSnapshot, columnKey: string | null) => ColumnSelectOptionsResult;
|
|
32
|
+
export declare const createAsyncSelectOptionsSource: <T>() => AsyncSelectOptionsSource<T>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createValueStore as e } from "../logic/valueStore.js";
|
|
2
|
+
import { IDLE_SELECT_OPTIONS_RESULT as t } from "./selectOptionsCollector.js";
|
|
3
|
+
//#region src/controllers/asyncSelectOptionsSource.ts
|
|
4
|
+
var n = [], r = /* @__PURE__ */ new Set(), i = {
|
|
5
|
+
status: "loading",
|
|
6
|
+
options: n,
|
|
7
|
+
allValues: r,
|
|
8
|
+
progress: 0
|
|
9
|
+
}, a = {
|
|
10
|
+
columnKey: null,
|
|
11
|
+
result: t
|
|
12
|
+
}, o = (e, t) => {
|
|
13
|
+
if (!(t in e)) return e;
|
|
14
|
+
let n = {};
|
|
15
|
+
for (let r of Object.keys(e)) r !== t && (n[r] = e[r]);
|
|
16
|
+
return n;
|
|
17
|
+
}, s = (e) => e instanceof Error ? e.message || e.name : typeof e == "string" ? e : String(e), c = (e, n) => n === null ? t : e.columnKey === n ? e.result : i, l = () => {
|
|
18
|
+
let t = e(a), c = null, l = null, u = 0, d = () => {
|
|
19
|
+
l?.abort(), l = null;
|
|
20
|
+
}, f = (e) => {
|
|
21
|
+
let { columnKey: a, column: c, fetch: f } = e;
|
|
22
|
+
if (a === null || c === null || f === null) return;
|
|
23
|
+
d();
|
|
24
|
+
let p = ++u, m = new AbortController();
|
|
25
|
+
l = m, t.setSnapshot({
|
|
26
|
+
columnKey: a,
|
|
27
|
+
result: i
|
|
28
|
+
});
|
|
29
|
+
let h;
|
|
30
|
+
try {
|
|
31
|
+
h = Promise.resolve(f({
|
|
32
|
+
columnKey: a,
|
|
33
|
+
column: c,
|
|
34
|
+
columnFilters: o(e.columnFilters, a),
|
|
35
|
+
globalText: e.globalText,
|
|
36
|
+
signal: m.signal
|
|
37
|
+
}));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
h = Promise.reject(e);
|
|
40
|
+
}
|
|
41
|
+
h.then((e) => {
|
|
42
|
+
if (p !== u || m.signal.aborted) return;
|
|
43
|
+
l = null;
|
|
44
|
+
let r = Array.isArray(e?.options) ? e.options : n;
|
|
45
|
+
t.setSnapshot({
|
|
46
|
+
columnKey: a,
|
|
47
|
+
result: {
|
|
48
|
+
status: "ready",
|
|
49
|
+
options: r,
|
|
50
|
+
allValues: new Set(r.map((e) => e.value)),
|
|
51
|
+
progress: 1,
|
|
52
|
+
truncated: e?.truncated === !0
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}, (e) => {
|
|
56
|
+
p !== u || m.signal.aborted || (l = null, t.setSnapshot({
|
|
57
|
+
columnKey: a,
|
|
58
|
+
result: {
|
|
59
|
+
status: "error",
|
|
60
|
+
options: n,
|
|
61
|
+
allValues: r,
|
|
62
|
+
progress: 0,
|
|
63
|
+
errorMessage: s(e)
|
|
64
|
+
}
|
|
65
|
+
}));
|
|
66
|
+
});
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
update: (e) => {
|
|
70
|
+
let n = c;
|
|
71
|
+
if (c = e, n === null || n.columnKey !== e.columnKey || n.fetch === null != (e.fetch === null)) {
|
|
72
|
+
if (e.columnKey === null || e.fetch === null) {
|
|
73
|
+
d(), u += 1, t.getSnapshot() !== a && t.setSnapshot(a);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
f(e);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
retry: () => {
|
|
80
|
+
c && f(c);
|
|
81
|
+
},
|
|
82
|
+
subscribe: t.subscribe,
|
|
83
|
+
getSnapshot: t.getSnapshot,
|
|
84
|
+
dispose: () => {
|
|
85
|
+
d(), u += 1, c = null;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
export { i as LOADING_SELECT_OPTIONS_RESULT, l as createAsyncSelectOptionsSource, o as omitOwnColumnFilter, c as selectAsyncOptionsResult };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/rowHeightStore.cjs"),n=require("../logic/detailRow.cjs");var r=(e,t)=>e.autoHeightActive===t.autoHeightActive&&e.rowHeightStore===t.rowHeightStore&&e.rowMetrics===t.rowMetrics&&e.rowModel===t.rowModel&&e.virtualRows===t.virtualRows&&e.viewportHeight===t.viewportHeight&&e.version===t.version&&e.nonce===t.nonce,i=()=>{let i=e.createValueStore({version:0,nonce:0}),a=new Map,o=null,s=new Set,c=null,l=()=>{o?.disconnect(),o=null,s.clear()},u=()=>{let e=i.getSnapshot();i.setSnapshot({...e,version:e.version+1})},d=()=>{let e=i.getSnapshot();i.setSnapshot({...e,nonce:e.nonce+1})},f=e=>{let{autoHeightActive:r,rowHeightStore:i,rowMetrics:a,rowModel:c}=e,f=e.scrollContainerRef.current;if(!r||!i){l();return}if(!f)return;let p=f.querySelectorAll(`[data-autoheight-cell]`);if(p.length>0){let e=new Map;p.forEach(t=>{if(n.isInsideDetailCardOf(f,t))return;let r=t.closest(`[data-row-index]`);if(!r)return;let i=Number(r.dataset.rowIndex);if(!Number.isFinite(i))return;let a=Math.ceil(t.getBoundingClientRect().height),o=e.get(i);(o===void 0||a>o)&&e.set(i,a)});let r=!1,o=1/0;if(e.forEach((e,n)=>{let a=c.getRowKey(n)??n;t.setMeasuredRowHeight(i,n,a,e)&&(r=!0,n<o&&(o=n))}),r){let e=f.scrollTop,n=a.rowAtContentY(e),r=e-a.rowTop(n);t.rebuildPrefixFrom(i,o),f.scrollTop=i.prefix[n]+r,u()}}o===null&&(o=new ResizeObserver(d));let m=o,h=new Set;p.forEach(e=>{h.add(e),s.has(e)||(m.observe(e),s.add(e))});let g=[];s.forEach(e=>{h.has(e)||g.push(e)}),g.forEach(e=>{m.unobserve(e),s.delete(e)})};return{update:e=>{c!==null&&r(c,e)||(c=e,f(e))},getSnapshot:i.getSnapshot,subscribe:i.subscribe,measuredHeights:a,dispose:l}};exports.createAutoHeightMeasurer=i;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { createValueStore as e } from "../logic/valueStore.js";
|
|
2
|
+
import { rebuildPrefixFrom as t, setMeasuredRowHeight as n } from "../logic/rowHeightStore.js";
|
|
3
|
+
import { isInsideDetailCardOf as r } from "../logic/detailRow.js";
|
|
4
4
|
//#region src/controllers/autoHeightMeasurer.ts
|
|
5
5
|
var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore === t.rowHeightStore && e.rowMetrics === t.rowMetrics && e.rowModel === t.rowModel && e.virtualRows === t.virtualRows && e.viewportHeight === t.viewportHeight && e.version === t.version && e.nonce === t.nonce, a = () => {
|
|
6
|
-
let a =
|
|
6
|
+
let a = e({
|
|
7
7
|
version: 0,
|
|
8
8
|
nonce: 0
|
|
9
9
|
}), o = /* @__PURE__ */ new Map(), s = null, c = /* @__PURE__ */ new Set(), l = null, u = () => {
|
|
@@ -20,8 +20,8 @@ var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore
|
|
|
20
20
|
...e,
|
|
21
21
|
nonce: e.nonce + 1
|
|
22
22
|
});
|
|
23
|
-
}, p = (
|
|
24
|
-
let { autoHeightActive: i, rowHeightStore: a, rowMetrics: o, rowModel: l } =
|
|
23
|
+
}, p = (e) => {
|
|
24
|
+
let { autoHeightActive: i, rowHeightStore: a, rowMetrics: o, rowModel: l } = e, p = e.scrollContainerRef.current;
|
|
25
25
|
if (!i || !a) {
|
|
26
26
|
u();
|
|
27
27
|
return;
|
|
@@ -29,23 +29,23 @@ var i = (e, t) => e.autoHeightActive === t.autoHeightActive && e.rowHeightStore
|
|
|
29
29
|
if (!p) return;
|
|
30
30
|
let m = p.querySelectorAll("[data-autoheight-cell]");
|
|
31
31
|
if (m.length > 0) {
|
|
32
|
-
let
|
|
33
|
-
m.forEach((
|
|
34
|
-
if (
|
|
35
|
-
let
|
|
36
|
-
if (!
|
|
37
|
-
let i = Number(
|
|
32
|
+
let e = /* @__PURE__ */ new Map();
|
|
33
|
+
m.forEach((t) => {
|
|
34
|
+
if (r(p, t)) return;
|
|
35
|
+
let n = t.closest("[data-row-index]");
|
|
36
|
+
if (!n) return;
|
|
37
|
+
let i = Number(n.dataset.rowIndex);
|
|
38
38
|
if (!Number.isFinite(i)) return;
|
|
39
|
-
let a = Math.ceil(
|
|
40
|
-
(o === void 0 || a > o) &&
|
|
39
|
+
let a = Math.ceil(t.getBoundingClientRect().height), o = e.get(i);
|
|
40
|
+
(o === void 0 || a > o) && e.set(i, a);
|
|
41
41
|
});
|
|
42
42
|
let i = !1, s = Infinity;
|
|
43
|
-
if (
|
|
44
|
-
let r = l.getRowKey(
|
|
45
|
-
|
|
43
|
+
if (e.forEach((e, t) => {
|
|
44
|
+
let r = l.getRowKey(t) ?? t;
|
|
45
|
+
n(a, t, r, e) && (i = !0, t < s && (s = t));
|
|
46
46
|
}), i) {
|
|
47
|
-
let
|
|
48
|
-
|
|
47
|
+
let e = p.scrollTop, n = o.rowAtContentY(e), r = e - o.rowTop(n);
|
|
48
|
+
t(a, s), p.scrollTop = a.prefix[n] + r, d();
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
s === null && (s = new ResizeObserver(f));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/chunkedLoop.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/columnAutosize.cjs"),i=require("../logic/autoSizeOnData.cjs");var a=180,o=()=>{let i=null,o=e.createValueStore(!1),s=0,c=null,l=()=>{c!==null&&(clearTimeout(c),c=null)};return{update:e=>{i=e},runAutosize:async e=>{if(i===null||e.length===0||!r.canMeasureAutosize())return;let{rowModel:u,gridRootRef:d,columnWidths:f,dispatch:p}=i,m=s+=1;l();let h=u.getRowCount(),g=d.current,_=r.createColumnWidthAccumulator(e);c=setTimeout(()=>{s===m&&o.setSnapshot(!0)},a);try{if(!await t.runChunked(h,e=>{let t=u.getRow(e);t&&_.collect(t)},{isCancelled:()=>s!==m||i?.rowModel!==u}))return;let e=_.finalize({gridRoot:g,currentWidths:f});Object.keys(e).length>0&&p(n.gridActions.syncColumnWidths(e))}finally{s===m&&(l(),o.setSnapshot(!1))}},subscribe:o.subscribe,getSnapshot:o.getSnapshot,dispose:()=>{s+=1,l()}}},s=()=>{let e=null,t=!1;return{update:n=>{if(e!==null&&e.mode===n.mode&&e.isServerSide===n.isServerSide&&e.rows===n.rows&&e.runAutosize===n.runAutosize){e=n;return}e=n;let{shouldRun:r,nextHasAutoSizedOnMount:a}=i.resolveAutoSizeOnData({mode:n.mode,isServerSide:n.isServerSide,rowCount:n.rows.length,hasAutoSizedOnMount:t});t=a,r&&n.runAutosize(n.visibleColumns)}}};exports.createAutoSizeOnDataTrigger=s,exports.createColumnAutosizeRunner=o;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createValueStore as e } from "../logic/valueStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { runChunked as t } from "../logic/chunkedLoop.js";
|
|
3
|
+
import { gridActions as n } from "../model/gridActions.js";
|
|
4
|
+
import { canMeasureAutosize as r, createColumnWidthAccumulator as i } from "../logic/columnAutosize.js";
|
|
5
5
|
import { resolveAutoSizeOnData as a } from "../logic/autoSizeOnData.js";
|
|
6
6
|
//#region src/controllers/columnAutosizeRunner.ts
|
|
7
7
|
var o = 180, s = () => {
|
|
@@ -13,15 +13,15 @@ var o = 180, s = () => {
|
|
|
13
13
|
a = e;
|
|
14
14
|
},
|
|
15
15
|
runAutosize: async (e) => {
|
|
16
|
-
if (a === null || e.length === 0 || !
|
|
16
|
+
if (a === null || e.length === 0 || !r()) return;
|
|
17
17
|
let { rowModel: d, gridRootRef: f, columnWidths: p, dispatch: m } = a, h = c += 1;
|
|
18
18
|
u();
|
|
19
|
-
let g = d.getRowCount(), _ = f.current, v =
|
|
19
|
+
let g = d.getRowCount(), _ = f.current, v = i(e);
|
|
20
20
|
l = setTimeout(() => {
|
|
21
21
|
c === h && s.setSnapshot(!0);
|
|
22
22
|
}, o);
|
|
23
23
|
try {
|
|
24
|
-
if (!await
|
|
24
|
+
if (!await t(g, (e) => {
|
|
25
25
|
let t = d.getRow(e);
|
|
26
26
|
t && v.collect(t);
|
|
27
27
|
}, { isCancelled: () => c !== h || a?.rowModel !== d })) return;
|
|
@@ -29,7 +29,7 @@ var o = 180, s = () => {
|
|
|
29
29
|
gridRoot: _,
|
|
30
30
|
currentWidths: p
|
|
31
31
|
});
|
|
32
|
-
Object.keys(e).length > 0 && m(
|
|
32
|
+
Object.keys(e).length > 0 && m(n.syncColumnWidths(e));
|
|
33
33
|
} finally {
|
|
34
34
|
c === h && (u(), s.setSnapshot(!1));
|
|
35
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/valueStore.cjs"),t=require("../logic/detailRow.cjs"),n=require("./popoverSupport.cjs"),r=require("../logic/filtering.cjs"),i=require("../logic/numberFilterCondition.cjs"),a=require("../logic/textFilterCondition.cjs"),o=require("../logic/dateFilterCondition.cjs"),s=require("../logic/filterPopoverLayout.cjs"),c=require("../logic/filterPopoverOutsideClick.cjs");var l=240,u=8,d=8,f=230,p=340,m=480,h=(e,t)=>{if(!t)return null;let n=e.find(e=>e.key===t.columnKey)??null;return!n||n.filterType===t.filterType?n:{...n,filterType:t.filterType}},g=()=>{let g=null,_=e.createValueStore({state:null,layout:null}),v={current:null},y={current:null},b={current:null},x=null,S=null,C=null,w=null,T=null,E=null,D=null,O=null,k=e=>{let t=_.getSnapshot(),n=t.layout;n===e||n!==null&&e!==null&&n.top===e.top&&n.left===e.left&&n.width===e.width&&n.maxHeight===e.maxHeight||_.setSnapshot({...t,layout:e})},A=()=>g===null?null:h(g.visibleColumns,_.getSnapshot().state),j=()=>{if(!_.getSnapshot().state||!x){k(null);return}let e=x.getBoundingClientRect(),t=A()?.filterType,n=t===`numberSet`||t===`textSet`||t===`dateSet`?m:t===`set`?p:f,{top:r,left:i,maxHeight:a}=s.computeFilterPopoverPlacement({anchorTop:e.top,anchorBottom:e.bottom,anchorRight:e.right,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,popupWidth:l,popupHeight:S??n,offsetY:d,viewportMargin:u});k({top:r,left:i,width:l,maxHeight:a})},M=()=>{T!==null&&(cancelAnimationFrame(T),T=null),E!==null&&(cancelAnimationFrame(E),E=null)},N=()=>{C?.disconnect(),C=null,w=null},P=()=>{_.setSnapshot({state:null,layout:null}),x=null,y.current=null,b.current=null,S=null,F.detach(),N(),M(),D=null,g!==null&&n.restoreGridFocus(g.gridRootRef)},F=n.createPopoverWindowBindings({onResize:j,onScroll:j,isInside:e=>!c.isFilterPopoverOutsideTarget(e,v.current),onOutsidePointerDown:P}),I=e=>{if(g===null||!g.enableColumnFilter)return;let{gridRootRef:s,resolveColumnFilterType:c,columnFilterValues:l}=g;n.blurForPopover(s.current);let u=s.current,d=u?.querySelectorAll(`[data-ssg-col-key]`);x=u&&d?Array.from(d).find(n=>n.dataset.ssgColKey===e.key&&!t.isInsideDetailCardOf(u,n))??null:null;let f=e.filterType===`auto`&&c?c(e):e.filterType??`text`,p=l[e.key],m=f===`number`?i.numberFilterValueToConditionDraft(r.isNumberColumnFilterValue(p)?p:void 0):f===`numberSet`?i.parsedNumberFilterToConditionDraft(r.isNumberSetColumnFilterValue(p)?p.condition:void 0):null,h=f===`textSet`?a.parsedTextFilterToConditionDraft(r.isTextSetColumnFilterValue(p)?p.condition:void 0):null,v=f===`dateSet`?o.parsedDateFilterToConditionDraft(r.isDateSetColumnFilterValue(p)?p.condition:void 0):null;_.setSnapshot({..._.getSnapshot(),state:{columnKey:e.key,filterType:f,draftValue:r.columnFilterValueToDraftText(p),numberDraft:m,textDraft:h,dateDraft:v}}),j(),F.attach()},L=e=>{let t=_.getSnapshot();t.state&&_.setSnapshot({...t,state:{...t.state,...e}})},R=()=>{let e=v.current;if(!(_.getSnapshot().layout!==null&&e!==null)||typeof ResizeObserver>`u`){N();return}w!==e&&(N(),C=new ResizeObserver(()=>{let e=v.current?.getBoundingClientRect().height??null;e===null||e===S||(S=e,j())}),C.observe(e),w=e)},z=()=>{let{state:e,layout:t}=_.getSnapshot(),n=A();if(!e||!n||!t){M(),D=null;return}let r=O!==g?.visibleColumns,i=`${e.columnKey}|${e.filterType}|${t.top}|${t.left}|${t.width}`;if(!r&&D===i)return;D=i,O=g?.visibleColumns??null,M();let a=n.filterType??`text`;T=requestAnimationFrame(()=>{T=null,E=requestAnimationFrame(()=>{if(E=null,a===`select`){b.current?.focus();return}let e=y.current;if(e&&(e.focus(),e.type===`text`)){let t=e.value.length;e.setSelectionRange(t,t)}})})};return{update:e=>{g=e,R(),z()},subscribe:_.subscribe,getSnapshot:_.getSnapshot,panelRef:v,textInputRef:y,selectRef:b,open:I,close:P,updateDraft:e=>L({draftValue:e}),updateNumberDraft:e=>L({numberDraft:e}),updateTextDraft:e=>L({textDraft:e}),updateDateDraft:e=>L({dateDraft:e}),dispose:()=>{F.detach(),N(),M()}}};exports.createFilterPopoverController=g,exports.resolveOpenedFilterColumn=h;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createValueStore as e } from "../logic/valueStore.js";
|
|
2
|
+
import { isInsideDetailCardOf as t } from "../logic/detailRow.js";
|
|
3
3
|
import { blurForPopover as n, createPopoverWindowBindings as r, restoreGridFocus as i } from "./popoverSupport.js";
|
|
4
4
|
import { columnFilterValueToDraftText as a, isDateSetColumnFilterValue as o, isNumberColumnFilterValue as s, isNumberSetColumnFilterValue as c, isTextSetColumnFilterValue as l } from "../logic/filtering.js";
|
|
5
5
|
import { numberFilterValueToConditionDraft as u, parsedNumberFilterToConditionDraft as d } from "../logic/numberFilterCondition.js";
|
|
@@ -16,7 +16,7 @@ var g = 240, _ = 8, v = 8, y = 230, b = 340, x = 480, S = (e, t) => {
|
|
|
16
16
|
filterType: t.filterType
|
|
17
17
|
};
|
|
18
18
|
}, C = () => {
|
|
19
|
-
let C = null, w =
|
|
19
|
+
let C = null, w = e({
|
|
20
20
|
state: null,
|
|
21
21
|
layout: null
|
|
22
22
|
}), T = { current: null }, E = { current: null }, D = { current: null }, O = null, k = null, A = null, j = null, M = null, N = null, P = null, F = null, I = (e) => {
|
|
@@ -61,17 +61,17 @@ var g = 240, _ = 8, v = 8, y = 230, b = 340, x = 480, S = (e, t) => {
|
|
|
61
61
|
onScroll: R,
|
|
62
62
|
isInside: (e) => !h(e, T.current),
|
|
63
63
|
onOutsidePointerDown: V
|
|
64
|
-
}), U = (
|
|
64
|
+
}), U = (e) => {
|
|
65
65
|
if (C === null || !C.enableColumnFilter) return;
|
|
66
66
|
let { gridRootRef: r, resolveColumnFilterType: i, columnFilterValues: m } = C;
|
|
67
67
|
n(r.current);
|
|
68
68
|
let h = r.current, g = h?.querySelectorAll("[data-ssg-col-key]");
|
|
69
|
-
O = h && g ? Array.from(g).find((n) => n.dataset.ssgColKey ===
|
|
70
|
-
let _ =
|
|
69
|
+
O = h && g ? Array.from(g).find((n) => n.dataset.ssgColKey === e.key && !t(h, n)) ?? null : null;
|
|
70
|
+
let _ = e.filterType === "auto" && i ? i(e) : e.filterType ?? "text", v = m[e.key], y = _ === "number" ? u(s(v) ? v : void 0) : _ === "numberSet" ? d(c(v) ? v.condition : void 0) : null, b = _ === "textSet" ? f(l(v) ? v.condition : void 0) : null, x = _ === "dateSet" ? p(o(v) ? v.condition : void 0) : null;
|
|
71
71
|
w.setSnapshot({
|
|
72
72
|
...w.getSnapshot(),
|
|
73
73
|
state: {
|
|
74
|
-
columnKey:
|
|
74
|
+
columnKey: e.key,
|
|
75
75
|
filterType: _,
|
|
76
76
|
draftValue: a(v),
|
|
77
77
|
numberDraft: y,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/sorting.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../logic/autoScrollGeometry.cjs"),a=require("../logic/verticalGeometry.cjs");var o=10,s=300,c=()=>{let o=null,s=!1,c=!1,l=null,u=null,d=`mouse`,f=null,p=null,m=!1,h=!1,g=()=>o?.uiState.dragState??null,_=(e,t)=>{if(o===null)return null;let{bodyScrollRef:n,scrollContainerRef:i,leftPaneScrollRef:s,rightPaneScrollRef:c,filteredRowsLength:l,visibleColumnsLength:u,paneLayout:d,leftLeadingWidth:f,centerLeadingWidth:p,rightLeadingWidth:m,headerHeight:h,rowMetrics:g,verticalScaleFactor:_}=o,v=n.current;if(!v||l===0||u===0)return null;let y=v.getBoundingClientRect(),b=a.clientYToRowIndex(v.scrollTop+t-y.top-h,i.current?.scrollTop??0,_,g),x=null,S=s.current;if(x===null&&S&&d.left.entries.length>0){let t=S.getBoundingClientRect();if(e<t.right){let n=e-t.left-f;x=r.findLogicalIndexFromPaneOffset(d.left,n)}}let C=c.current;if(x===null&&C&&d.right.entries.length>0){let t=C.getBoundingClientRect();if(e>=t.left){let n=e-t.left-m;x=r.findLogicalIndexFromPaneOffset(d.right,n)}}if(x===null&&d.center.entries.length>0){let t=v.scrollLeft+e-y.left-p;x=r.findLogicalIndexFromPaneOffset(d.center,Math.max(t,0))}return x===null?null:{row:b,col:r.clamp(x,0,u-1)}},v=(e,t)=>{let r=g();if(o===null||!r||r.type!==`selection`)return;let i=_(e,t);if(i){if(r.selectionKind===`cell`){o.dispatch(n.gridActions.updateSelection(i));return}if(r.selectionKind===`row`){o.dispatch(n.gridActions.updateRowSelection(i.row));return}r.selectionKind===`col`&&o.dispatch(n.gridActions.updateColumnSelection(i.col))}},y=(e,t)=>{if(o===null)return;let{gridRootRef:r,dispatch:i,enableRangeSelection:a,enableRowSelection:s,onGutterRowSelect:c,onCellDoubleClickRef:l}=o;r.current?.focus({preventScroll:!0});let{target:d}=e;if(d.kind===`cell`){let e=u;if(e&&e.cell.row===d.cell.row&&e.cell.col===d.cell.col&&t-e.time<300){u=null,l.current(d.cell);return}u={cell:d.cell,time:t},i(n.gridActions.activateCell(d.cell)),a&&(i(n.gridActions.startSelection(d.cell)),i(n.gridActions.endSelection()));return}if(u=null,d.kind===`row`){if(s){c(d.rowIndex,{shiftKey:!1});return}i(n.gridActions.startRowSelection(d.rowIndex)),i(n.gridActions.endSelection());return}i(n.gridActions.startColumnSelection(d.colIndex)),i(n.gridActions.endSelection())},b=()=>{o!==null&&(c=!1,o.dispatch(n.gridActions.endSelection()),o.dispatch(n.gridActions.endColumnResize()))},x=e=>{o!==null&&(o.pointerClientRef.current={x:e.clientX,y:e.clientY},g()?.type===`columnResize`&&o.dispatch(n.gridActions.updateColumnResize(e.clientX)))},S=e=>{let t=l;t&&(l=null,e.pointerId===t.pointerId&&Math.abs(e.clientX-t.x)<10&&Math.abs(e.clientY-t.y)<10&&y(t,e.timeStamp)),b()},C=()=>{l=null,b()},w=()=>{s||(s=!0,window.addEventListener(`pointermove`,x),window.addEventListener(`pointerup`,S),window.addEventListener(`pointercancel`,C))},T=()=>{s&&(s=!1,window.removeEventListener(`pointermove`,x),window.removeEventListener(`pointerup`,S),window.removeEventListener(`pointercancel`,C))},E=()=>{h=!1,o!==null&&o.autoScrollFrameRef.current!==null&&(cancelAnimationFrame(o.autoScrollFrameRef.current),o.autoScrollFrameRef.current=null)},D=()=>{if(o===null||!h)return;let{scrollContainerRef:e,pointerClientRef:t,autoScrollFrameRef:n}=o,r=e.current,a=t.current;if(!r||!a){n.current=requestAnimationFrame(D);return}if(!m){let e=p;if(e&&!i.hasPointerLeftActivationRadius(e,a,6)){n.current=requestAnimationFrame(D);return}m=!0}let s=r.getBoundingClientRect(),c=i.resolveScrollContentBox({rectLeft:s.left,rectTop:s.top,clientLeft:r.clientLeft,clientTop:r.clientTop,clientWidth:r.clientWidth,clientHeight:r.clientHeight}),l=g(),u=l?.type===`selection`&&l.selectionKind===`col`,d=l?.type===`selection`&&l.selectionKind===`row`,f=u?0:i.resolveAutoScrollAxisDirection(a.y,c.top,c.bottom,24),_=d?0:i.resolveAutoScrollAxisDirection(a.x,c.left,c.right,24),y=i.computeNextScrollPosition(r.scrollTop,f,18,r.scrollHeight-r.clientHeight),b=i.computeNextScrollPosition(r.scrollLeft,_,18,r.scrollWidth-r.clientWidth);(y!==r.scrollTop||b!==r.scrollLeft)&&(r.scrollTo({top:y,left:b,behavior:`auto`}),v(a.x,a.y)),n.current=requestAnimationFrame(D)},O=()=>{let e=g()?.type===`selection`;e&&!h?(h=!0,o!==null&&(o.autoScrollFrameRef.current=requestAnimationFrame(D))):!e&&h&&E()},k=()=>{if(f!==null)return;let e=()=>{if(!c||o===null){f=null;return}let{scrollContainerRef:t,pointerClientRef:n,onGutterRowSelectDrag:r}=o,a=t.current,s=n.current;if(!a||!s){f=requestAnimationFrame(e);return}if(!m){let t=p;if(t&&!i.hasPointerLeftActivationRadius(t,s,6)){f=requestAnimationFrame(e);return}m=!0}let l=a.getBoundingClientRect(),u=i.resolveScrollContentBox({rectLeft:l.left,rectTop:l.top,clientLeft:a.clientLeft,clientTop:a.clientTop,clientWidth:a.clientWidth,clientHeight:a.clientHeight}),d=i.resolveAutoScrollAxisDirection(s.y,u.top,u.bottom,24),h=i.computeNextScrollPosition(a.scrollTop,d,18,a.scrollHeight-a.clientHeight);if(h!==a.scrollTop){a.scrollTo({top:h,left:a.scrollLeft,behavior:`auto`});let e=_(s.x,s.y);e&&r(e.row)}f=requestAnimationFrame(e)};f=requestAnimationFrame(e)},A=(e,t)=>(e.preventDefault(),o===null||e.button!==0?!1:(d=e.pointerType,e.pointerType===`touch`?(l={pointerId:e.pointerId,x:e.clientX,y:e.clientY,target:t},!1):(o.gridRootRef.current?.focus({preventScroll:!0}),o.pointerClientRef.current={x:e.clientX,y:e.clientY},p={x:e.clientX,y:e.clientY},m=!1,!0)));return{update:e=>{o=e,w(),O()},updateSelectionFromPointer:v,handleCellPointerDown:(e,t)=>{!A(t,{kind:`cell`,cell:e})||o===null||(o.dispatch(n.gridActions.activateCell(e)),o.enableRangeSelection&&o.dispatch(n.gridActions.startSelection(e)))},handleCellDoubleClick:e=>{d===`touch`||o===null||o.onCellDoubleClickRef.current(e)},handleCellPointerEnter:(e,t)=>{if(o===null||(o.enableRowHover&&o.setHoveredRowIndex(e.row),!o.enableRangeSelection))return;let r=g();r?.type!==`selection`||r.selectionKind!==`cell`||(o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.dispatch(n.gridActions.updateSelection(e)))},handleNativeDragStart:e=>{e.preventDefault()},handleRowHeaderPointerDown:(e,t)=>{if(!(!A(t,{kind:`row`,rowIndex:e})||o===null)){if(o.enableRowSelection){c=!0,o.onGutterRowSelect(e,{shiftKey:t.shiftKey}),k();return}o.dispatch(n.gridActions.startRowSelection(e))}},handleRowHeaderPointerEnter:(e,t)=>{if(o===null)return;if(o.enableRowHover&&o.setHoveredRowIndex(e),c){o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.onGutterRowSelectDrag(e);return}let r=g();r?.type!==`selection`||r.selectionKind!==`row`||(o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.dispatch(n.gridActions.updateRowSelection(e)))},handleColumnHeaderPointerDown:(r,i)=>{if(!(!A(i,{kind:`col`,colIndex:r})||o===null)){if(i.shiftKey&&o.enableSorting){let i=o.orderedColumns[r];if(i&&!t.isSyntheticColumnKey(i.key)){let t=o.uiState.sort,r=t.find(e=>e.columnKey===i.key)?.direction?`desc`:`asc`,a=e.nextSortEntries(t,i.key,r,!0);o.dispatch(a.length===0?n.gridActions.clearSort():n.gridActions.setSort(a))}return}o.dispatch(n.gridActions.startColumnSelection(r))}},handleColumnHeaderPointerEnter:(e,t)=>{if(o===null)return;o.setHoveredRowIndex(null),o.enableColumnHeaderHover&&o.setHoveredColumnIndex(e);let r=g();r?.type!==`selection`||r.selectionKind!==`col`||(o.pointerClientRef.current={x:t.clientX,y:t.clientY},o.dispatch(n.gridActions.updateColumnSelection(e)))},dispose:()=>{T(),E(),f!==null&&(cancelAnimationFrame(f),f=null)}}};exports.TOUCH_DOUBLE_TAP_MS=s,exports.TOUCH_TAP_SLOP_PX=o,exports.createPointerInteractionsController=c;
|