@ishibashi0112/spreadsheet-grid-core 0.39.0 → 0.41.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/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/clipboardController.cjs +2 -2
- package/dist/controllers/clipboardController.js +54 -47
- 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/keyboardController.cjs +1 -1
- package/dist/controllers/keyboardController.js +10 -4
- 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/gridApi.cjs +1 -1
- package/dist/engine/gridApi.d.ts +6 -0
- package/dist/engine/gridApi.js +75 -56
- 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 +13 -2
- package/dist/engine/rowPipeline.js +51 -39
- package/dist/engine/verticalLayout.cjs +1 -1
- package/dist/engine/verticalLayout.d.ts +4 -0
- package/dist/engine/verticalLayout.js +40 -28
- package/dist/logic/exportCsv.cjs +2 -2
- package/dist/logic/exportCsv.d.ts +4 -1
- package/dist/logic/exportCsv.js +16 -11
- package/dist/logic/exportData.cjs +1 -1
- package/dist/logic/exportData.d.ts +3 -1
- package/dist/logic/exportData.js +29 -13
- package/dist/logic/gridState.cjs +1 -1
- package/dist/logic/gridState.d.ts +5 -0
- package/dist/logic/gridState.js +10 -7
- package/dist/logic/labelRows.cjs +1 -0
- package/dist/logic/labelRows.d.ts +45 -0
- package/dist/logic/labelRows.js +157 -0
- package/dist/logic/verticalGeometry.cjs +1 -1
- package/dist/logic/verticalGeometry.d.ts +5 -0
- package/dist/logic/verticalGeometry.js +39 -5
- package/dist/model/gridTypes.core.d.ts +50 -0
- package/dist/model/gridTypes.unbound.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../utils/clipboard.cjs");var
|
|
2
|
-
`)};return{update:
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../utils/clipboard.cjs"),i=require("../logic/labelRows.cjs");var a=(e,t,n)=>{if(t===0||n===0||e?.type!==`cell`)return!1;let{start:r,end:i}=e.range,a=Math.min(r.row,i.row),o=Math.min(r.col,i.col),s=Math.max(r.row,i.row),c=Math.max(r.col,i.col);return a===0&&o===0&&s===t-1&&c===n-1},o=()=>{let o=null,s=e=>{o=e},c=e=>{let{isRowExportable:t,rowModel:n}=e;if(t)return(e,r)=>t(e,{viewRowIndex:r,rowKey:n.getRowKey(r)??r})},l=t=>{let{rowModel:n,visibleColumns:r}=t,i=n.getRowCount();if(i===0||r.length===0)return``;let a=c(t),o=[];for(let t=0;t<i;t+=1){let i=n.getRow(t);if(!i||a&&!a(i,t))continue;let s=r.map(t=>{let n=e.getCellValue(i,t);return t.formatClipboardValue?t.formatClipboardValue(n,i):String(n??``)});o.push(s.join(` `))}return o.join(`
|
|
2
|
+
`)};return{update:s,handleCopy:async()=>{if(o===null)return;let e=o,{rowModel:t,visibleColumns:n,uiState:i}=e,s=a(i.selection,t.getRowCount(),n.length)?l(e):r.serializeSelectionToTsv(t.getRow,t.getRowCount(),n,i.selection,c(e));s&&await r.writeTextToClipboard(s)},handlePaste:a=>{if(o===null)return;let{rows:s,rowModel:c,visibleColumns:l,uiState:u,readOnly:d,canEditCell:f,createRow:p,createOverflowColumn:m,onRowsChange:h,onColumnsChange:g,applyServerSideCellEdits:_,dispatch:v}=o;if(d||!h&&!_||!u.activeCell)return;let y=a.clipboardData?.getData(`text/plain`)??``;if(!y)return;a.preventDefault();let b=r.parseClipboardText(y);if(b.length===0)return;let x=b.reduce((e,t)=>Math.max(e,t.length),0);if(x===0)return;let S=u.activeCell.row,C=u.activeCell.col,w=c.getLabelRow===void 0?null:i.resolvePasteTargetViewIndexes(c,S,b.length),T=e=>w?w[e-S]:e,E=w?w[w.length-1]:u.activeCell.row+Math.max(b.length-1,0);if(_){let i=r.buildClipboardCellEdits(e=>c.getRow(T(e)),l,b,S,C,(t,n,r,i)=>e.isCellEditable({readOnly:d,canEditCell:f},T(t),n,r,i)).map(e=>({...e,viewIndex:T(e.viewIndex)}));i.length>0&&_(i);let a=n.clamp(E,0,Math.max(c.getRowCount()-1,0)),o=n.clamp(u.activeCell.col+Math.max(x-1,0),0,Math.max(l.length-1,0));v(t.gridActions.startSelection(u.activeCell)),v(t.gridActions.updateSelection({row:a,col:o})),v(t.gridActions.endSelection()),v(t.gridActions.activateCell(u.activeCell));return}if(!h)return;let D=c.getSourceIndex(S);if(D===void 0)return;let O=u.activeCell.col,k=[...s],A=[...l],j=c.getRowCount(),M=k.length,N=e=>{let t=T(e);return t<j?c.getSourceIndex(t):M+(t-j)},P=Math.max(E+1-j,0),F=w?k.length+P:D+b.length;if(F>k.length&&p)for(;k.length<F;)k.push(p());let I=O+x;if(I>A.length&&g&&m){for(;A.length<I;)A.push(m(A.length));g(A)}let L=r.applyClipboardMatrixToRows(k,N,A,b,S,O,(t,n,r,i)=>e.isCellEditable({readOnly:d,canEditCell:f},t,n,r,i)),R=n.clamp(E,0,Math.max(Math.max(c.getRowCount()-1,0),E)),z=n.clamp(u.activeCell.col+Math.max((b[0]?.length??1)-1,0),0,Math.max(Math.max(A.length-1,0),O+x-1));h(L),v(t.gridActions.startSelection(u.activeCell)),v(t.gridActions.updateSelection({row:R,col:z})),v(t.gridActions.endSelection()),v(t.gridActions.activateCell(u.activeCell))}}};exports.computeIsWholeGridSelected=a,exports.createClipboardController=o;
|
|
@@ -2,24 +2,25 @@ import { getCellValue as e, isCellEditable as t } from "../utils/permissions.js"
|
|
|
2
2
|
import { gridActions as n } from "../model/gridActions.js";
|
|
3
3
|
import { clamp as r } from "../logic/geometry.js";
|
|
4
4
|
import { applyClipboardMatrixToRows as i, buildClipboardCellEdits as a, parseClipboardText as o, serializeSelectionToTsv as s, writeTextToClipboard as c } from "../utils/clipboard.js";
|
|
5
|
+
import { resolvePasteTargetViewIndexes as l } from "../logic/labelRows.js";
|
|
5
6
|
//#region src/controllers/clipboardController.ts
|
|
6
|
-
var
|
|
7
|
+
var u = (e, t, n) => {
|
|
7
8
|
if (t === 0 || n === 0 || e?.type !== "cell") return !1;
|
|
8
9
|
let { start: r, end: i } = e.range, a = Math.min(r.row, i.row), o = Math.min(r.col, i.col), s = Math.max(r.row, i.row), c = Math.max(r.col, i.col);
|
|
9
10
|
return a === 0 && o === 0 && s === t - 1 && c === n - 1;
|
|
10
|
-
},
|
|
11
|
-
let
|
|
12
|
-
|
|
13
|
-
},
|
|
11
|
+
}, d = () => {
|
|
12
|
+
let d = null, f = (e) => {
|
|
13
|
+
d = e;
|
|
14
|
+
}, p = (e) => {
|
|
14
15
|
let { isRowExportable: t, rowModel: n } = e;
|
|
15
16
|
if (t) return (e, r) => t(e, {
|
|
16
17
|
viewRowIndex: r,
|
|
17
18
|
rowKey: n.getRowKey(r) ?? r
|
|
18
19
|
});
|
|
19
|
-
},
|
|
20
|
+
}, m = (t) => {
|
|
20
21
|
let { rowModel: n, visibleColumns: r } = t, i = n.getRowCount();
|
|
21
22
|
if (i === 0 || r.length === 0) return "";
|
|
22
|
-
let a =
|
|
23
|
+
let a = p(t), o = [];
|
|
23
24
|
for (let t = 0; t < i; t += 1) {
|
|
24
25
|
let i = n.getRow(t);
|
|
25
26
|
if (!i || a && !a(i, t)) continue;
|
|
@@ -32,57 +33,63 @@ var l = (e, t, n) => {
|
|
|
32
33
|
return o.join("\n");
|
|
33
34
|
};
|
|
34
35
|
return {
|
|
35
|
-
update:
|
|
36
|
+
update: f,
|
|
36
37
|
handleCopy: async () => {
|
|
37
|
-
if (
|
|
38
|
-
let e =
|
|
38
|
+
if (d === null) return;
|
|
39
|
+
let e = d, { rowModel: t, visibleColumns: n, uiState: r } = e, i = u(r.selection, t.getRowCount(), n.length) ? m(e) : s(t.getRow, t.getRowCount(), n, r.selection, p(e));
|
|
39
40
|
i && await c(i);
|
|
40
41
|
},
|
|
41
42
|
handlePaste: (e) => {
|
|
42
|
-
if (
|
|
43
|
-
let { rows: s, rowModel: c, visibleColumns:
|
|
44
|
-
if (
|
|
45
|
-
let
|
|
46
|
-
if (!
|
|
43
|
+
if (d === null) return;
|
|
44
|
+
let { rows: s, rowModel: c, visibleColumns: u, uiState: f, readOnly: p, canEditCell: m, createRow: h, createOverflowColumn: g, onRowsChange: _, onColumnsChange: v, applyServerSideCellEdits: y, dispatch: b } = d;
|
|
45
|
+
if (p || !_ && !y || !f.activeCell) return;
|
|
46
|
+
let x = e.clipboardData?.getData("text/plain") ?? "";
|
|
47
|
+
if (!x) return;
|
|
47
48
|
e.preventDefault();
|
|
48
|
-
let
|
|
49
|
-
if (
|
|
50
|
-
let
|
|
51
|
-
if (
|
|
52
|
-
let
|
|
53
|
-
if (
|
|
54
|
-
let e = a((e) => c.getRow(e),
|
|
55
|
-
readOnly:
|
|
56
|
-
canEditCell:
|
|
57
|
-
}, e, n, r, i))
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
49
|
+
let S = o(x);
|
|
50
|
+
if (S.length === 0) return;
|
|
51
|
+
let C = S.reduce((e, t) => Math.max(e, t.length), 0);
|
|
52
|
+
if (C === 0) return;
|
|
53
|
+
let w = f.activeCell.row, T = f.activeCell.col, E = c.getLabelRow === void 0 ? null : l(c, w, S.length), D = (e) => E ? E[e - w] : e, O = E ? E[E.length - 1] : f.activeCell.row + Math.max(S.length - 1, 0);
|
|
54
|
+
if (y) {
|
|
55
|
+
let e = a((e) => c.getRow(D(e)), u, S, w, T, (e, n, r, i) => t({
|
|
56
|
+
readOnly: p,
|
|
57
|
+
canEditCell: m
|
|
58
|
+
}, D(e), n, r, i)).map((e) => ({
|
|
59
|
+
...e,
|
|
60
|
+
viewIndex: D(e.viewIndex)
|
|
61
|
+
}));
|
|
62
|
+
e.length > 0 && y(e);
|
|
63
|
+
let i = r(O, 0, Math.max(c.getRowCount() - 1, 0)), o = r(f.activeCell.col + Math.max(C - 1, 0), 0, Math.max(u.length - 1, 0));
|
|
64
|
+
b(n.startSelection(f.activeCell)), b(n.updateSelection({
|
|
61
65
|
row: i,
|
|
62
66
|
col: o
|
|
63
|
-
})),
|
|
67
|
+
})), b(n.endSelection()), b(n.activateCell(f.activeCell));
|
|
64
68
|
return;
|
|
65
69
|
}
|
|
66
|
-
if (!
|
|
67
|
-
let
|
|
68
|
-
if (
|
|
69
|
-
let
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
70
|
+
if (!_) return;
|
|
71
|
+
let k = c.getSourceIndex(w);
|
|
72
|
+
if (k === void 0) return;
|
|
73
|
+
let A = f.activeCell.col, j = [...s], M = [...u], N = c.getRowCount(), P = j.length, F = (e) => {
|
|
74
|
+
let t = D(e);
|
|
75
|
+
return t < N ? c.getSourceIndex(t) : P + (t - N);
|
|
76
|
+
}, I = Math.max(O + 1 - N, 0), L = E ? j.length + I : k + S.length;
|
|
77
|
+
if (L > j.length && h) for (; j.length < L;) j.push(h());
|
|
78
|
+
let R = A + C;
|
|
79
|
+
if (R > M.length && v && g) {
|
|
80
|
+
for (; M.length < R;) M.push(g(M.length));
|
|
81
|
+
v(M);
|
|
75
82
|
}
|
|
76
|
-
let
|
|
77
|
-
readOnly:
|
|
78
|
-
canEditCell:
|
|
79
|
-
}, e, n, r, i)),
|
|
80
|
-
|
|
81
|
-
row:
|
|
82
|
-
col:
|
|
83
|
-
})),
|
|
83
|
+
let z = i(j, F, M, S, w, A, (e, n, r, i) => t({
|
|
84
|
+
readOnly: p,
|
|
85
|
+
canEditCell: m
|
|
86
|
+
}, e, n, r, i)), B = r(O, 0, Math.max(Math.max(c.getRowCount() - 1, 0), O)), V = r(f.activeCell.col + Math.max((S[0]?.length ?? 1) - 1, 0), 0, Math.max(Math.max(M.length - 1, 0), A + C - 1));
|
|
87
|
+
_(z), b(n.startSelection(f.activeCell)), b(n.updateSelection({
|
|
88
|
+
row: B,
|
|
89
|
+
col: V
|
|
90
|
+
})), b(n.endSelection()), b(n.activateCell(f.activeCell));
|
|
84
91
|
}
|
|
85
92
|
};
|
|
86
93
|
};
|
|
87
94
|
//#endregion
|
|
88
|
-
export {
|
|
95
|
+
export { u as computeIsWholeGridSelected, d as createClipboardController };
|
|
@@ -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("../utils/permissions.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../logic/domGuards.cjs");var i=()=>{let i=null,a=e=>{i=e},o=(e,r,a)=>{if(i===null)return;let{uiState:o,rowModel:s,visibleColumns:c,dispatch:l}=i,u=s.getRowCount();if(u===0||c.length===0)return;let d=o.activeCell??{row:0,col:0},f=
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../model/gridActions.cjs"),n=require("../logic/geometry.cjs"),r=require("../logic/domGuards.cjs");var i=()=>{let i=null,a=e=>{i=e},o=(e,r,a)=>{if(i===null)return;let{uiState:o,rowModel:s,visibleColumns:c,dispatch:l}=i,u=s.getRowCount();if(u===0||c.length===0)return;let d=o.activeCell??{row:0,col:0},f=n.clamp(d.row+e,0,u-1);if(e!==0&&s.getLabelRow){let t=e>0?1:-1,n=f;for(;n>=0&&n<u&&s.getLabelRow(n);)n+=t;f=n>=0&&n<u?n:d.row}let p={row:f,col:n.clamp(d.col+r,0,c.length-1)};if(a){let e=o.selection?.type===`cell`?o.selection.range.start:d;l(t.gridActions.startSelection(e)),l(t.gridActions.updateSelection(p)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(p));return}l(t.gridActions.startSelection(p)),l(t.gridActions.endSelection()),l(t.gridActions.activateCell(p))};return{update:a,handleKeyDown:async n=>{if(i===null)return;let{uiState:a,rowModel:s,visibleColumns:c,readOnly:l,canEditCell:u,setEditorInitialValue:d,dispatch:f,handleCopy:p,handleCellDoubleClick:m,isWholeGridSelected:h,selectEntireGrid:g,onUndo:_,onRedo:v,onClearSelection:y,enableClearOnDelete:b,onToggleCheckboxCell:x,onToggleGroup:S}=i;if(!r.shouldIgnoreGridKeydown(n.target)&&!a.editingCell){if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`c`){n.preventDefault(),await p();return}if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`a`){if(n.preventDefault(),h){f(t.gridActions.clearSelection()),f(t.gridActions.activateCell(null));return}g();return}if((n.ctrlKey||n.metaKey)&&!n.isComposing){if(n.key.toLowerCase()===`z`){n.preventDefault(),n.shiftKey?v():_();return}if(n.key.toLowerCase()===`y`&&!n.shiftKey){n.preventDefault(),v();return}}if(n.key===`ArrowUp`){n.preventDefault(),o(-1,0,n.shiftKey);return}if(n.key===`ArrowDown`){n.preventDefault(),o(1,0,n.shiftKey);return}if(n.key===`ArrowLeft`){n.preventDefault(),o(0,-1,n.shiftKey);return}if(n.key===`ArrowRight`){n.preventDefault(),o(0,1,n.shiftKey);return}if(n.key===`Tab`){n.preventDefault(),o(0,n.shiftKey?-1:1,!1);return}if(n.key===`Escape`){n.preventDefault(),f(t.gridActions.clearSelection());return}if((n.key===`Delete`||n.key===`Backspace`)&&b){n.preventDefault(),y();return}if((n.key===`Enter`||n.key===` `)&&a.activeCell){let e=s.getGroupRow?.(a.activeCell.row);if(e){n.preventDefault(),S(e.groupKey);return}}if(n.key===`Enter`||n.key===`F2`){n.preventDefault(),a.activeCell&&m(a.activeCell);return}if(r.isPrintableKey(n)&&a.activeCell){let r=s.getRow(a.activeCell.row),i=c[a.activeCell.col];if(!r||!i||!e.isCellEditable({readOnly:l,canEditCell:u},a.activeCell.row,a.activeCell.col,r,i))return;if(i.editor?.type===`checkbox`){n.preventDefault(),n.key===` `&&x(a.activeCell);return}n.preventDefault(),d(n.key),f(t.gridActions.startEdit(a.activeCell))}}}}};exports.createKeyboardController=i;
|
|
@@ -13,16 +13,22 @@ var a = () => {
|
|
|
13
13
|
let d = o.activeCell ?? {
|
|
14
14
|
row: 0,
|
|
15
15
|
col: 0
|
|
16
|
-
}, f =
|
|
17
|
-
|
|
16
|
+
}, f = n(d.row + e, 0, u - 1);
|
|
17
|
+
if (e !== 0 && s.getLabelRow) {
|
|
18
|
+
let t = e > 0 ? 1 : -1, n = f;
|
|
19
|
+
for (; n >= 0 && n < u && s.getLabelRow(n);) n += t;
|
|
20
|
+
f = n >= 0 && n < u ? n : d.row;
|
|
21
|
+
}
|
|
22
|
+
let p = {
|
|
23
|
+
row: f,
|
|
18
24
|
col: n(d.col + r, 0, c.length - 1)
|
|
19
25
|
};
|
|
20
26
|
if (i) {
|
|
21
27
|
let e = o.selection?.type === "cell" ? o.selection.range.start : d;
|
|
22
|
-
l(t.startSelection(e)), l(t.updateSelection(
|
|
28
|
+
l(t.startSelection(e)), l(t.updateSelection(p)), l(t.endSelection()), l(t.activateCell(p));
|
|
23
29
|
return;
|
|
24
30
|
}
|
|
25
|
-
l(t.startSelection(
|
|
31
|
+
l(t.startSelection(p)), l(t.endSelection()), l(t.activateCell(p));
|
|
26
32
|
};
|
|
27
33
|
return {
|
|
28
34
|
update: o,
|
|
@@ -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;
|