@ishibashi0112/spreadsheet-grid-core 0.39.0 → 0.40.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/clipboardController.cjs +2 -2
- package/dist/controllers/clipboardController.js +54 -47
- package/dist/controllers/keyboardController.cjs +1 -1
- package/dist/controllers/keyboardController.js +10 -4
- 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/rowPipeline.cjs +1 -1
- package/dist/engine/rowPipeline.d.ts +11 -2
- package/dist/engine/rowPipeline.js +49 -37
- 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/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 +34 -0
- package/dist/model/gridTypes.unbound.d.ts +1 -0
- package/package.json +1 -1
|
@@ -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("../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,
|
package/dist/engine/gridApi.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/grouping.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../model/gridSelectors.cjs"),a=require("../logic/validation.cjs"),o=require("../logic/verticalGeometry.cjs"),s=require("../logic/rowSelection.cjs"),c=require("../logic/gridState.cjs"),l=require("../logic/scrollTargets.cjs"),u=require("../logic/exportCsv.cjs"),d=require("../logic/exportData.cjs"),f=require("../logic/exportScope.cjs");var p=()=>{let p=null,m=(e,t,n=`auto`)=>{let r=Math.max(e.scrollHeight-e.clientHeight,0),i=Math.max(e.scrollWidth-e.clientWidth,0),a=Math.min(Math.max(t.top,0),r),o=Math.min(Math.max(t.left,0),i);(Math.round(a)!==Math.round(e.scrollTop)||Math.round(o)!==Math.round(e.scrollLeft))&&p?.markApiScroll(),e.scrollTo({top:a,left:o,behavior:n})},h=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;!n||!r||m(n,{top:e===null?n.scrollTop:o.logicalToPhysicalScrollTop(e,r.verticalScaleFactor),left:t===null?n.scrollLeft:t})},g=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;if(!n||!r||r.viewRowCount===0)return null;let i=Math.min(Math.max(e,0),r.viewRowCount-1);return l.computeVerticalScrollTarget({rowTop:r.rowMetrics.rowTop(i),rowHeight:r.rowMetrics.cellHeight(i),headerHeight:r.headerHeight,viewportHeight:n.clientHeight,currentScrollTop:o.physicalToLogicalScrollTop(n.scrollTop,r.verticalScaleFactor),align:t})},_=(e,t)=>{let n=p?.scrollContainerRef.current??null,i=p;if(!n||!i)return null;let a=r.computeSinglePaneColumnExtent(i.paneLayout,e);return!a||a.pane!==`center`?null:l.computeHorizontalScrollTarget({cellLeft:i.leftPaneTotalWidth+i.centerLeadingWidth+a.extent.start,cellWidth:a.extent.width,leftPaneWidth:i.leftPaneTotalWidth,rightPaneWidth:i.rightPaneTotalWidth,viewportWidth:n.clientWidth,currentScrollLeft:n.scrollLeft,align:t})},v=(e,t,n)=>{h(g(e,n),_(t,n))},y=e=>{let t=p;if(!t)return null;let n=e=>t.rowModel.getRow(e),r=t.isRowExportable,a=r?(e,n)=>r(e,{viewRowIndex:n,rowKey:t.rowModel.getRowKey(n)??n}):void 0,o=r?(e,n)=>r(e,{viewRowIndex:n,rowKey:t.resolvedRowKeyGetter(e,n)}):void 0,s=f.normalizeExportScope(e);if(s===`raw`)return t.isServerSide?(console.warn(`SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。`),{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns,isRowIncluded:a}):{getRow:e=>t.rows[e],startRow:0,endRow:t.rows.length,columns:t.orderedColumns,isRowIncluded:o};if(s===`rendered`)return{getRow:n,startRow:t.windowFirstRow,endRow:t.windowLastRow>=t.windowFirstRow?t.windowLastRow+1:t.windowFirstRow,columns:t.orderedColumns,isRowIncluded:a};if(s===`selection`){let e=t.uiState.selection;if(!e)return null;if(e.type===`cell`){let r=i.normalizeCellRange(e.range);return{getRow:n,startRow:r.start.row,endRow:r.end.row+1,columns:t.orderedColumns.slice(r.start.col,r.end.col+1),isRowIncluded:a}}if(e.type===`row`){let r=i.normalizeRowRange(e.startRow,e.endRow);return{getRow:n,startRow:r.startRow,endRow:r.endRow+1,columns:t.orderedColumns,isRowIncluded:a}}let r=i.normalizeColumnRange(e.startCol,e.endCol);return{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns.slice(r.startCol,r.endCol+1),isRowIncluded:a}}return{getRow:n,startRow:0,endRow:t.viewRowCount,columns:t.orderedColumns,isRowIncluded:a}},b=e=>e.filter(e=>!t.isSyntheticColumnKey(e.key)),x=e=>{let t=y(e?.scope??`view`);return t?u.serializeRowsToCsv({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),delimiter:e?.delimiter,includeHeaders:e?.includeHeaders,bom:e?.bom,isRowIncluded:t.isRowIncluded}):e?.bom?``:``},S=e=>{let t=y(e?.scope??`view`);return t?d.buildGridExportData({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),isRowIncluded:t.isRowIncluded}):{columns:[],rows:[]}};return{update:e=>{p=e},handle:{scrollToRow:(e,t)=>h(g(e,t?.align??`auto`),null),scrollToCell:(e,t,n)=>v(e,t,n?.align??`auto`),scrollToTop:()=>{let e=p?.scrollContainerRef.current??null;e&&m(e,{top:0,left:e.scrollLeft})},scrollToBottom:()=>{let e=p?.scrollContainerRef.current??null,t=p;!e||!t||m(e,{top:Math.max(t.headerHeight+t.physicalBodyHeight-e.clientHeight,0),left:e.scrollLeft})},getScrollPosition:()=>{let e=p?.scrollContainerRef.current??null;return e?{top:e.scrollTop,left:e.scrollLeft}:null},setScrollPosition:(e,t)=>{let n=p?.scrollContainerRef.current??null;n&&m(n,{top:e.top??n.scrollTop,left:e.left??n.scrollLeft},t?.behavior??`auto`)},getVisibleRowRange:()=>{let e=p;return!e||e.windowLastRow<e.windowFirstRow?null:{startIndex:e.windowFirstRow,endIndex:e.windowLastRow+1}},getActiveCell:()=>{let e=p?.uiState.activeCell;return e?{row:e.row,col:e.col}:null},setActiveCell:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.activateCell(e)),e&&t?.scrollIntoView&&v(e.row,e.col,`auto`))},getSelection:()=>p?.uiState.selection??null,selectCell:(e,t,r)=>{let i=p;if(!i)return;let a={row:e,col:t};i.dispatch(n.gridActions.startSelection(a)),i.dispatch(n.gridActions.endSelection()),r?.scrollIntoView&&v(e,t,`auto`)},selectRange:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.startSelection(e.start)),r.dispatch(n.gridActions.updateSelection(e.end)),r.dispatch(n.gridActions.endSelection()),t?.scrollIntoView&&v(e.end.row,e.end.col,`auto`))},clearSelection:()=>{p?.dispatch(n.gridActions.clearSelection())},getSelectedRows:()=>{let e=p;if(!e)return[];let t=e.uiState.selection;if(!t)return[];let n=[],r=t=>{let r=e.rowModel.getRow(t);r&&n.push(r)};if(t.type===`cell`){let e=i.normalizeCellRange(t.range);for(let t=e.start.row;t<=e.end.row;t+=1)r(t)}else if(t.type===`row`){let e=i.normalizeRowRange(t.startRow,t.endRow);for(let t=e.startRow;t<=e.endRow;t+=1)r(t)}else for(let t=0;t<e.viewRowCount;t+=1)r(t);return n},exportCsv:e=>x(e),downloadCsv:(e,t)=>{if(typeof document>`u`)return;let n=x({...t,bom:t?.bom??!0}),r=new Blob([n],{type:`text/csv;charset=utf-8;`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e??`export.csv`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)},getExportData:e=>S(e),getState:()=>{let e=p;return e?c.buildGridState(e.uiState.columnWidths,e.uiState.filters,e.uiState.sort,c.extractColumnState(e.columns)):c.buildGridState({},{globalText:``,columnFilters:{}},[],[])},applyState:e=>{let t=p;if(!t)return;let r=c.migrateGridState(e);t.onColumnsChange&&r.columns&&t.onColumnsChange(c.applyColumnState(t.columns,r.columns,r.columnWidths)),t.dispatch(n.gridActions.resetColumnWidths(r.columnWidths)),t.dispatch(n.gridActions.setAllFilters(r.filters)),t.dispatch(n.gridActions.setSort(r.sort))},getRowSelection:()=>{let e=p;return e?s.rowSelectionToModel(e.uiState.rowSelection):{type:`include`,rowKeys:[]}},setRowSelection:e=>{p?.commitRowSelection(s.rowSelectionFromModel(e))},getSelectedRowKeys:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection;if(t.mode===`include`)return Array.from(t.keys);let n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){if(!e.rowModel.getRow(i))continue;let r=e.rowModel.getRowKey(i)??i;t.keys.has(r)||n.push(r)}return n},getSelectedRowData:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection,n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){let r=e.rowModel.getRow(i);r&&s.resolveIsRowSelected(t,e.rowModel.getRowKey(i)??i)&&n.push(r)}return n},getSelectedRowCount:()=>{let e=p;return e?s.countSelectedRows(e.uiState.rowSelection,e.leafRowCount):0},isRowSelected:e=>{let t=p;return t?s.resolveIsRowSelected(t.uiState.rowSelection,e):!1},selectAllRows:()=>{p?.commitRowSelection(s.selectAllRows())},clearRowSelection:()=>{p?.commitRowSelection(s.clearRowSelection())},undo:()=>{p?.undoRows()},redo:()=>{p?.redoRows()},canUndo:()=>p?.canUndoRows()??!1,canRedo:()=>p?.canRedoRows()??!1,clearUndoHistory:()=>{p?.clearUndoHistory()},setGroupCollapsed:(e,t)=>{p?.dispatch(n.gridActions.setGroupCollapsed(e,t))},expandAllGroups:()=>{p?.dispatch(n.gridActions.setCollapsedGroupKeys(new Set))},collapseAllGroups:()=>{let t=p;!t||!t.groupTree||t.dispatch(n.gridActions.setCollapsedGroupKeys(new Set(e.collectAllGroupKeys(t.groupTree))))},getGroupRows:()=>{let t=p;return t?.groupTree?e.collectAllGroupRows(t.groupTree):[]},setDetailRowExpanded:(e,r)=>{let i=p;if(!(!i||!i.detailRowEnabled)){if(r&&i.detailIsExpandable){let n=t.findDetailRowIndex(i.rowModel,e,i.detailIndexCacheRef.current,!i.isServerSide);if(n>=0){let t=i.rowModel.getRow(n);if(t!=null&&!i.detailIsExpandable(t,{rowKey:e,sourceRowIndex:i.rowModel.getSourceIndex(n)}))return}}i.dispatch(n.gridActions.setDetailRowExpanded(e,r))}},getExpandedDetailRowKeys:()=>{let e=p;return e&&e.detailRowEnabled?Array.from(e.uiState.expandedDetailRowKeys):[]},collapseAllDetailRows:()=>{let e=p;!e||!e.detailRowEnabled||e.dispatch(n.gridActions.setExpandedDetailRowKeys(new Set))},moveRow:(e,t)=>{p?.moveRowByKey(e,t)},getInvalidCells:()=>{let e=p;return e?e.isServerSide?(console.warn(`[SpreadsheetGrid] getInvalidCells は serverSide モードでは利用できません(空配列を返します)。`),[]):a.scanInvalidCells(e.rows,e.columns,e.resolvedRowKeyGetter):[]},refreshServerSide:()=>{let e=p;if(e){if(!e.isServerSide){console.warn(`[SpreadsheetGrid] refreshServerSide は clientSide(rows)モードでは何もしません(dataSource 指定時のみ有効です)。`);return}e.serverSideRefresh()}},openFilterManager:()=>{p?.openToolPanel(`filter`)},closeFilterManager:()=>{let e=p;e&&e.activeToolPanelTab===`filter`&&e.closeToolPanel()}},applyScroll:h,verticalTargetFor:g,horizontalTargetFor:_,scrollToCellInternal:v}};exports.createGridApi=p;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../logic/grouping.cjs"),t=require("../logic/detailRow.cjs"),n=require("../model/gridActions.cjs"),r=require("../logic/geometry.cjs"),i=require("../model/gridSelectors.cjs"),a=require("../logic/validation.cjs"),o=require("../logic/verticalGeometry.cjs"),s=require("../logic/rowSelection.cjs"),c=require("../logic/gridState.cjs"),l=require("../logic/scrollTargets.cjs"),u=require("../logic/exportCsv.cjs"),d=require("../logic/exportData.cjs"),f=require("../logic/exportScope.cjs");var p=()=>{let p=null,m=(e,t,n=`auto`)=>{let r=Math.max(e.scrollHeight-e.clientHeight,0),i=Math.max(e.scrollWidth-e.clientWidth,0),a=Math.min(Math.max(t.top,0),r),o=Math.min(Math.max(t.left,0),i);(Math.round(a)!==Math.round(e.scrollTop)||Math.round(o)!==Math.round(e.scrollLeft))&&p?.markApiScroll(),e.scrollTo({top:a,left:o,behavior:n})},h=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;!n||!r||m(n,{top:e===null?n.scrollTop:o.logicalToPhysicalScrollTop(e,r.verticalScaleFactor),left:t===null?n.scrollLeft:t})},g=(e,t)=>{let n=p?.scrollContainerRef.current??null,r=p;if(!n||!r||r.viewRowCount===0)return null;let i=Math.min(Math.max(e,0),r.viewRowCount-1);return l.computeVerticalScrollTarget({rowTop:r.rowMetrics.rowTop(i),rowHeight:r.rowMetrics.cellHeight(i),headerHeight:r.headerHeight,viewportHeight:n.clientHeight,currentScrollTop:o.physicalToLogicalScrollTop(n.scrollTop,r.verticalScaleFactor),align:t})},_=(e,t)=>{let n=p?.scrollContainerRef.current??null,i=p;if(!n||!i)return null;let a=r.computeSinglePaneColumnExtent(i.paneLayout,e);return!a||a.pane!==`center`?null:l.computeHorizontalScrollTarget({cellLeft:i.leftPaneTotalWidth+i.centerLeadingWidth+a.extent.start,cellWidth:a.extent.width,leftPaneWidth:i.leftPaneTotalWidth,rightPaneWidth:i.rightPaneTotalWidth,viewportWidth:n.clientWidth,currentScrollLeft:n.scrollLeft,align:t})},v=(e,t,n)=>{h(g(e,n),_(t,n))},y=(e,t=!1)=>{let n=p;if(!n)return null;let r=e=>n.rowModel.getRow(e),a=n.labelRowExport,o=e=>{if(!a)return[];let t=a.exportText?a.exportText(e):a.getLabel(e);return typeof t==`string`?[t]:t},s=t&&a&&n.rowModel.getLabelRow?e=>{let t=n.rowModel.getLabelRow?.(e);return t?o(t.row):void 0}:void 0,c=n.isRowExportable,l=c?(e,t)=>c(e,{viewRowIndex:t,rowKey:n.rowModel.getRowKey(t)??t}):void 0,u=c?(e,t)=>c(e,{viewRowIndex:t,rowKey:n.resolvedRowKeyGetter(e,t)}):void 0,d=f.normalizeExportScope(e);if(d===`raw`){if(n.isServerSide)return console.warn(`SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。`),{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns,isRowIncluded:l};let e=e=>a!==void 0&&n.rows[e]!==void 0&&a.isLabelRow(n.rows[e],e);return{getRow:t=>e(t)?void 0:n.rows[t],startRow:0,endRow:n.rows.length,columns:n.orderedColumns,isRowIncluded:u,getLabelLine:t&&a?t=>e(t)?o(n.rows[t]):void 0:void 0}}if(d===`rendered`)return{getRow:r,startRow:n.windowFirstRow,endRow:n.windowLastRow>=n.windowFirstRow?n.windowLastRow+1:n.windowFirstRow,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s};if(d===`selection`){let e=n.uiState.selection;if(!e)return null;if(e.type===`cell`){let t=i.normalizeCellRange(e.range);return{getRow:r,startRow:t.start.row,endRow:t.end.row+1,columns:n.orderedColumns.slice(t.start.col,t.end.col+1),isRowIncluded:l,getLabelLine:s}}if(e.type===`row`){let t=i.normalizeRowRange(e.startRow,e.endRow);return{getRow:r,startRow:t.startRow,endRow:t.endRow+1,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s}}let t=i.normalizeColumnRange(e.startCol,e.endCol);return{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns.slice(t.startCol,t.endCol+1),isRowIncluded:l,getLabelLine:s}}return{getRow:r,startRow:0,endRow:n.viewRowCount,columns:n.orderedColumns,isRowIncluded:l,getLabelLine:s}},b=e=>e.filter(e=>!t.isSyntheticColumnKey(e.key)),x=e=>{let t=y(e?.scope??`view`,e?.includeLabelRows===!0);return t?u.serializeRowsToCsv({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),delimiter:e?.delimiter,includeHeaders:e?.includeHeaders,bom:e?.bom,isRowIncluded:t.isRowIncluded,getLabelLine:t.getLabelLine}):e?.bom?``:``},S=e=>{let t=y(e?.scope??`view`,e?.includeLabelRows===!0);return t?d.buildGridExportData({getRow:t.getRow,startRow:t.startRow,endRow:t.endRow,columns:b(t.columns),isRowIncluded:t.isRowIncluded,getLabelLine:t.getLabelLine}):{columns:[],rows:[]}};return{update:e=>{p=e},handle:{scrollToRow:(e,t)=>h(g(e,t?.align??`auto`),null),scrollToCell:(e,t,n)=>v(e,t,n?.align??`auto`),scrollToTop:()=>{let e=p?.scrollContainerRef.current??null;e&&m(e,{top:0,left:e.scrollLeft})},scrollToBottom:()=>{let e=p?.scrollContainerRef.current??null,t=p;!e||!t||m(e,{top:Math.max(t.headerHeight+t.physicalBodyHeight-e.clientHeight,0),left:e.scrollLeft})},getScrollPosition:()=>{let e=p?.scrollContainerRef.current??null;return e?{top:e.scrollTop,left:e.scrollLeft}:null},setScrollPosition:(e,t)=>{let n=p?.scrollContainerRef.current??null;n&&m(n,{top:e.top??n.scrollTop,left:e.left??n.scrollLeft},t?.behavior??`auto`)},getVisibleRowRange:()=>{let e=p;return!e||e.windowLastRow<e.windowFirstRow?null:{startIndex:e.windowFirstRow,endIndex:e.windowLastRow+1}},getActiveCell:()=>{let e=p?.uiState.activeCell;return e?{row:e.row,col:e.col}:null},setActiveCell:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.activateCell(e)),e&&t?.scrollIntoView&&v(e.row,e.col,`auto`))},getSelection:()=>p?.uiState.selection??null,selectCell:(e,t,r)=>{let i=p;if(!i)return;let a={row:e,col:t};i.dispatch(n.gridActions.startSelection(a)),i.dispatch(n.gridActions.endSelection()),r?.scrollIntoView&&v(e,t,`auto`)},selectRange:(e,t)=>{let r=p;r&&(r.dispatch(n.gridActions.startSelection(e.start)),r.dispatch(n.gridActions.updateSelection(e.end)),r.dispatch(n.gridActions.endSelection()),t?.scrollIntoView&&v(e.end.row,e.end.col,`auto`))},clearSelection:()=>{p?.dispatch(n.gridActions.clearSelection())},getSelectedRows:()=>{let e=p;if(!e)return[];let t=e.uiState.selection;if(!t)return[];let n=[],r=t=>{let r=e.rowModel.getRow(t);r&&n.push(r)};if(t.type===`cell`){let e=i.normalizeCellRange(t.range);for(let t=e.start.row;t<=e.end.row;t+=1)r(t)}else if(t.type===`row`){let e=i.normalizeRowRange(t.startRow,t.endRow);for(let t=e.startRow;t<=e.endRow;t+=1)r(t)}else for(let t=0;t<e.viewRowCount;t+=1)r(t);return n},exportCsv:e=>x(e),downloadCsv:(e,t)=>{if(typeof document>`u`)return;let n=x({...t,bom:t?.bom??!0}),r=new Blob([n],{type:`text/csv;charset=utf-8;`}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e??`export.csv`,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)},getExportData:e=>S(e),getState:()=>{let e=p;return e?c.buildGridState(e.uiState.columnWidths,e.uiState.filters,e.uiState.sort,c.extractColumnState(e.columns)):c.buildGridState({},{globalText:``,columnFilters:{}},[],[])},applyState:e=>{let t=p;if(!t)return;let r=c.migrateGridState(e);t.onColumnsChange&&r.columns&&t.onColumnsChange(c.applyColumnState(t.columns,r.columns,r.columnWidths)),t.dispatch(n.gridActions.resetColumnWidths(r.columnWidths)),t.dispatch(n.gridActions.setAllFilters(r.filters)),t.dispatch(n.gridActions.setSort(r.sort))},getRowSelection:()=>{let e=p;return e?s.rowSelectionToModel(e.uiState.rowSelection):{type:`include`,rowKeys:[]}},setRowSelection:e=>{p?.commitRowSelection(s.rowSelectionFromModel(e))},getSelectedRowKeys:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection;if(t.mode===`include`)return Array.from(t.keys);let n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){if(!e.rowModel.getRow(i))continue;let r=e.rowModel.getRowKey(i)??i;t.keys.has(r)||n.push(r)}return n},getSelectedRowData:()=>{let e=p;if(!e)return[];let t=e.uiState.rowSelection,n=[],r=e.rowModel.getRowCount();for(let i=0;i<r;i+=1){let r=e.rowModel.getRow(i);r&&s.resolveIsRowSelected(t,e.rowModel.getRowKey(i)??i)&&n.push(r)}return n},getSelectedRowCount:()=>{let e=p;return e?s.countSelectedRows(e.uiState.rowSelection,e.leafRowCount):0},isRowSelected:e=>{let t=p;return t?s.resolveIsRowSelected(t.uiState.rowSelection,e):!1},selectAllRows:()=>{p?.commitRowSelection(s.selectAllRows())},clearRowSelection:()=>{p?.commitRowSelection(s.clearRowSelection())},undo:()=>{p?.undoRows()},redo:()=>{p?.redoRows()},canUndo:()=>p?.canUndoRows()??!1,canRedo:()=>p?.canRedoRows()??!1,clearUndoHistory:()=>{p?.clearUndoHistory()},setGroupCollapsed:(e,t)=>{p?.dispatch(n.gridActions.setGroupCollapsed(e,t))},expandAllGroups:()=>{p?.dispatch(n.gridActions.setCollapsedGroupKeys(new Set))},collapseAllGroups:()=>{let t=p;!t||!t.groupTree||t.dispatch(n.gridActions.setCollapsedGroupKeys(new Set(e.collectAllGroupKeys(t.groupTree))))},getGroupRows:()=>{let t=p;return t?.groupTree?e.collectAllGroupRows(t.groupTree):[]},setDetailRowExpanded:(e,r)=>{let i=p;if(!(!i||!i.detailRowEnabled)){if(r&&i.detailIsExpandable){let n=t.findDetailRowIndex(i.rowModel,e,i.detailIndexCacheRef.current,!i.isServerSide);if(n>=0){let t=i.rowModel.getRow(n);if(t!=null&&!i.detailIsExpandable(t,{rowKey:e,sourceRowIndex:i.rowModel.getSourceIndex(n)}))return}}i.dispatch(n.gridActions.setDetailRowExpanded(e,r))}},getExpandedDetailRowKeys:()=>{let e=p;return e&&e.detailRowEnabled?Array.from(e.uiState.expandedDetailRowKeys):[]},collapseAllDetailRows:()=>{let e=p;!e||!e.detailRowEnabled||e.dispatch(n.gridActions.setExpandedDetailRowKeys(new Set))},moveRow:(e,t)=>{p?.moveRowByKey(e,t)},getInvalidCells:()=>{let e=p;return e?e.isServerSide?(console.warn(`[SpreadsheetGrid] getInvalidCells は serverSide モードでは利用できません(空配列を返します)。`),[]):a.scanInvalidCells(e.rows,e.columns,e.resolvedRowKeyGetter):[]},refreshServerSide:()=>{let e=p;if(e){if(!e.isServerSide){console.warn(`[SpreadsheetGrid] refreshServerSide は clientSide(rows)モードでは何もしません(dataSource 指定時のみ有効です)。`);return}e.serverSideRefresh()}},openFilterManager:()=>{p?.openToolPanel(`filter`)},closeFilterManager:()=>{let e=p;e&&e.activeToolPanelTab===`filter`&&e.closeToolPanel()}},applyScroll:h,verticalTargetFor:g,horizontalTargetFor:_,scrollToCellInternal:v}};exports.createGridApi=p;
|
package/dist/engine/gridApi.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type GridPaneLayout } from '../logic/geometry';
|
|
|
4
4
|
import { type RowMetrics } from '../logic/verticalGeometry';
|
|
5
5
|
import { type DetailIndexCache } from '../logic/detailRow';
|
|
6
6
|
import { type GroupTree } from '../logic/grouping';
|
|
7
|
+
import { type LabelExportLine } from '../logic/exportCsv';
|
|
7
8
|
import type { ToolPanelTab } from '../controllers/toolPanelController';
|
|
8
9
|
type ReadonlyRef<V> = {
|
|
9
10
|
readonly current: V;
|
|
@@ -34,6 +35,11 @@ export type GridApiArgs<T> = {
|
|
|
34
35
|
serverSideRefresh: () => void;
|
|
35
36
|
resolvedRowKeyGetter: (row: T, sourceRowIndex: number) => GridRowKey;
|
|
36
37
|
isRowExportable: SpreadsheetGridProps<T>['isRowExportable'];
|
|
38
|
+
labelRowExport?: {
|
|
39
|
+
isLabelRow: (row: T, sourceIndex: number) => boolean;
|
|
40
|
+
getLabel: (row: T) => string;
|
|
41
|
+
exportText: ((row: T) => string | LabelExportLine) | undefined;
|
|
42
|
+
} | undefined;
|
|
37
43
|
activeToolPanelTab: ToolPanelTab | null;
|
|
38
44
|
openToolPanel: (tab: ToolPanelTab) => void;
|
|
39
45
|
closeToolPanel: () => void;
|
package/dist/engine/gridApi.js
CHANGED
|
@@ -53,77 +53,94 @@ var D = () => {
|
|
|
53
53
|
});
|
|
54
54
|
}, M = (e, t, n) => {
|
|
55
55
|
k(A(e, n), j(t, n));
|
|
56
|
-
}, N = (e) => {
|
|
57
|
-
let
|
|
58
|
-
if (!
|
|
59
|
-
let
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}) :
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
56
|
+
}, N = (e, t = !1) => {
|
|
57
|
+
let n = D;
|
|
58
|
+
if (!n) return null;
|
|
59
|
+
let r = (e) => n.rowModel.getRow(e), i = n.labelRowExport, a = (e) => {
|
|
60
|
+
if (!i) return [];
|
|
61
|
+
let t = i.exportText ? i.exportText(e) : i.getLabel(e);
|
|
62
|
+
return typeof t == "string" ? [t] : t;
|
|
63
|
+
}, l = t && i && n.rowModel.getLabelRow ? (e) => {
|
|
64
|
+
let t = n.rowModel.getLabelRow?.(e);
|
|
65
|
+
return t ? a(t.row) : void 0;
|
|
66
|
+
} : void 0, u = n.isRowExportable, d = u ? (e, t) => u(e, {
|
|
67
|
+
viewRowIndex: t,
|
|
68
|
+
rowKey: n.rowModel.getRowKey(t) ?? t
|
|
69
|
+
}) : void 0, f = u ? (e, t) => u(e, {
|
|
70
|
+
viewRowIndex: t,
|
|
71
|
+
rowKey: n.resolvedRowKeyGetter(e, t)
|
|
72
|
+
}) : void 0, p = E(e);
|
|
73
|
+
if (p === "raw") {
|
|
74
|
+
if (n.isServerSide) return console.warn("SpreadsheetGrid: scope 'raw' は serverSide では未ロード行を取得できないため、'view'(ロード済みビュー行)として扱います。全件エクスポートはサーバ側での実施を推奨します。"), {
|
|
75
|
+
getRow: r,
|
|
76
|
+
startRow: 0,
|
|
77
|
+
endRow: n.viewRowCount,
|
|
78
|
+
columns: n.orderedColumns,
|
|
79
|
+
isRowIncluded: d
|
|
80
|
+
};
|
|
81
|
+
let e = (e) => i !== void 0 && n.rows[e] !== void 0 && i.isLabelRow(n.rows[e], e);
|
|
82
|
+
return {
|
|
83
|
+
getRow: (t) => e(t) ? void 0 : n.rows[t],
|
|
84
|
+
startRow: 0,
|
|
85
|
+
endRow: n.rows.length,
|
|
86
|
+
columns: n.orderedColumns,
|
|
87
|
+
isRowIncluded: f,
|
|
88
|
+
getLabelLine: t && i ? (t) => e(t) ? a(n.rows[t]) : void 0 : void 0
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (p === "rendered") return {
|
|
92
|
+
getRow: r,
|
|
93
|
+
startRow: n.windowFirstRow,
|
|
94
|
+
endRow: n.windowLastRow >= n.windowFirstRow ? n.windowLastRow + 1 : n.windowFirstRow,
|
|
95
|
+
columns: n.orderedColumns,
|
|
96
|
+
isRowIncluded: d,
|
|
97
|
+
getLabelLine: l
|
|
85
98
|
};
|
|
86
|
-
if (
|
|
87
|
-
let e =
|
|
99
|
+
if (p === "selection") {
|
|
100
|
+
let e = n.uiState.selection;
|
|
88
101
|
if (!e) return null;
|
|
89
102
|
if (e.type === "cell") {
|
|
90
|
-
let
|
|
103
|
+
let t = o(e.range);
|
|
91
104
|
return {
|
|
92
|
-
getRow:
|
|
93
|
-
startRow:
|
|
94
|
-
endRow:
|
|
95
|
-
columns:
|
|
96
|
-
isRowIncluded:
|
|
105
|
+
getRow: r,
|
|
106
|
+
startRow: t.start.row,
|
|
107
|
+
endRow: t.end.row + 1,
|
|
108
|
+
columns: n.orderedColumns.slice(t.start.col, t.end.col + 1),
|
|
109
|
+
isRowIncluded: d,
|
|
110
|
+
getLabelLine: l
|
|
97
111
|
};
|
|
98
112
|
}
|
|
99
113
|
if (e.type === "row") {
|
|
100
|
-
let
|
|
114
|
+
let t = c(e.startRow, e.endRow);
|
|
101
115
|
return {
|
|
102
|
-
getRow:
|
|
103
|
-
startRow:
|
|
104
|
-
endRow:
|
|
105
|
-
columns:
|
|
106
|
-
isRowIncluded:
|
|
116
|
+
getRow: r,
|
|
117
|
+
startRow: t.startRow,
|
|
118
|
+
endRow: t.endRow + 1,
|
|
119
|
+
columns: n.orderedColumns,
|
|
120
|
+
isRowIncluded: d,
|
|
121
|
+
getLabelLine: l
|
|
107
122
|
};
|
|
108
123
|
}
|
|
109
|
-
let
|
|
124
|
+
let t = s(e.startCol, e.endCol);
|
|
110
125
|
return {
|
|
111
|
-
getRow:
|
|
126
|
+
getRow: r,
|
|
112
127
|
startRow: 0,
|
|
113
|
-
endRow:
|
|
114
|
-
columns:
|
|
115
|
-
isRowIncluded:
|
|
128
|
+
endRow: n.viewRowCount,
|
|
129
|
+
columns: n.orderedColumns.slice(t.startCol, t.endCol + 1),
|
|
130
|
+
isRowIncluded: d,
|
|
131
|
+
getLabelLine: l
|
|
116
132
|
};
|
|
117
133
|
}
|
|
118
134
|
return {
|
|
119
|
-
getRow:
|
|
135
|
+
getRow: r,
|
|
120
136
|
startRow: 0,
|
|
121
|
-
endRow:
|
|
122
|
-
columns:
|
|
123
|
-
isRowIncluded:
|
|
137
|
+
endRow: n.viewRowCount,
|
|
138
|
+
columns: n.orderedColumns,
|
|
139
|
+
isRowIncluded: d,
|
|
140
|
+
getLabelLine: l
|
|
124
141
|
};
|
|
125
142
|
}, P = (e) => e.filter((e) => !r(e.key)), F = (e) => {
|
|
126
|
-
let t = N(e?.scope ?? "view");
|
|
143
|
+
let t = N(e?.scope ?? "view", e?.includeLabelRows === !0);
|
|
127
144
|
return t ? w({
|
|
128
145
|
getRow: t.getRow,
|
|
129
146
|
startRow: t.startRow,
|
|
@@ -132,16 +149,18 @@ var D = () => {
|
|
|
132
149
|
delimiter: e?.delimiter,
|
|
133
150
|
includeHeaders: e?.includeHeaders,
|
|
134
151
|
bom: e?.bom,
|
|
135
|
-
isRowIncluded: t.isRowIncluded
|
|
152
|
+
isRowIncluded: t.isRowIncluded,
|
|
153
|
+
getLabelLine: t.getLabelLine
|
|
136
154
|
}) : e?.bom ? "" : "";
|
|
137
155
|
}, I = (e) => {
|
|
138
|
-
let t = N(e?.scope ?? "view");
|
|
156
|
+
let t = N(e?.scope ?? "view", e?.includeLabelRows === !0);
|
|
139
157
|
return t ? T({
|
|
140
158
|
getRow: t.getRow,
|
|
141
159
|
startRow: t.startRow,
|
|
142
160
|
endRow: t.endRow,
|
|
143
161
|
columns: P(t.columns),
|
|
144
|
-
isRowIncluded: t.isRowIncluded
|
|
162
|
+
isRowIncluded: t.isRowIncluded,
|
|
163
|
+
getLabelLine: t.getLabelLine
|
|
145
164
|
}) : {
|
|
146
165
|
columns: [],
|
|
147
166
|
rows: []
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../logic/grouping.cjs"),n=require("../logic/rowReorder.cjs"),r=require("../logic/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../utils/permissions.cjs"),t=require("../logic/grouping.cjs"),n=require("../logic/rowReorder.cjs"),r=require("../logic/labelRows.cjs"),i=require("../logic/filtering.cjs"),a=require("../logic/sorting.cjs"),o=require("./memo.cjs"),s=require("../logic/serverSideQuery.cjs");var c={},l={},u=[],d=`\0`,f=()=>{let f=o.createMemo(e=>i.createSourceOrder(e)),p=o.createMemo((e,t)=>t?r.resolveLabelRowLayout(e,t):null),m=o.createMemo((e,t)=>r.createLabelFreeOrder(e,t)),h=o.createMemo((e,t)=>{let n=[];for(let r of e)i.columnFilterUsesNumericKey(t[r.key])&&n.push(r.key);return n.join(d)}),g=o.createMemo((t,n,r)=>{let a=new Map;if(r.length===0)return a;let o=new Set(r.split(d)),s=t.length;for(let r of n){if(!o.has(r.key))continue;let n=new Float64Array(s);for(let a=0;a<s;a+=1)n[a]=i.coerceNumberFilterCellValue(e.getCellValue(t[a],r));a.set(r.key,n)}return a}),_=o.createMemo((e,t,n,r,a)=>i.filterOrderByColumns(e,t,n,r,a)),v=o.createMemo((e,t,n,r)=>a.sortOrder(e,t,n,r)),y=o.createMemo((e,t,r)=>e&&n.isIdentityOrder(t,r)),b=o.createMemo((e,t,n)=>e&&r.isSameOrder(t,n)),x=o.createMemo((e,n,r,i,a)=>e?t.buildGroupTree(n,r,i,a):null),S=o.createMemo((e,n)=>e?t.flattenGroupTree(e,n):null),C=o.createMemo((e,t,n,i,a,o,s)=>e&&s?r.buildLabelDisplay({rows:t,order:n,layout:e,sortMode:i,keepEmptySections:a,sortActive:o,getLabel:s}):null),w=o.createMemo((e,n,i,a,o)=>{if(n)return r.createLabelRowModel(n,a,o);if(e){let{displayOrder:n,groups:r}=e;return{getRowCount:()=>n.length,getRow:e=>a[n[e]],getSourceIndex:e=>{let t=n[e];return t>=0?t:void 0},getRowKey:e=>{let i=n[e];return t.isGroupOrderValue(i)?t.groupRowKey(r[t.groupIndexOfOrderValue(i)]):o(a[i],i)},getGroupRow:e=>{let i=n[e];return t.isGroupOrderValue(i)?r[t.groupIndexOfOrderValue(i)]:void 0}}}return{getRowCount:()=>i.length,getRow:e=>a[i[e]],getSourceIndex:e=>i[e],getRowKey:e=>o(a[i[e]],i[e])}}),T=o.createMemo((e,t,n,r,i,a,o)=>e?s.buildServerSideQuery({globalText:t?n:``,columnFilters:r?i:l,sort:a?o:u}):c),E=o.createMemo((e,t)=>e?s.serializeServerSideQuery(t):``),D=o.createMemo((e,t)=>({query:e,queryKey:t}));return{resolveLabelRowLayout:(e,t)=>p(e,t),resolveBaseOrder:(e,t)=>t?m(t,e):f(e),resolveOrder:e=>{let{rows:t,visibleColumns:r,columnFilters:i,globalFilteredOrder:a,sort:o,rowDragAvailable:s,labelLayout:c}=e,l=h(r,i),u=g(t,r,l),d=_(t,a,r,i,u),f=v(t,d,r,o),p=c?b(s,f,m(c,t.length)):y(s,f,t.length);return{order:f,orderIsIdentity:p,rowDragOperable:n.isRowDragOperable(s,p)}},resolveClientSideRowModel:e=>{let{rows:t,order:n,rowGroupingActive:r,groupColumns:i,aggColumns:a,collapsedGroupKeys:o,rowKeyGetter:s,labelLayout:c,labelSortMode:l=`section`,keepEmptySections:u=!1,sortActive:d=!1,getLabel:f}=e,p=x(r,t,n,i,a),m=S(p,o),h=C(r?null:c??null,t,n,l,u,d,f);return{groupTree:p,groupedDisplay:m,labelDisplay:h,rowModel:w(m,h,n,t,s)}},resolveServerSideQuery:e=>{let{isServerSide:t,globalFilterEnabled:n,globalText:r,columnFilterEnabled:i,columnFilters:a,sortingEnabled:o,sort:s}=e,c=T(t,n,r,i,a,o,s);return D(c,E(t,c))}}};exports.createRowPipelineResolver=f;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import type { ColumnFilterValue, GridColumn, GridRowKey, GridSortState, RowModel, ServerSideQuery } from '../model/gridTypes.unbound';
|
|
1
|
+
import type { ColumnFilterValue, GridColumn, GridRowKey, GridSortState, LabelRowSortMode, RowModel, ServerSideQuery } from '../model/gridTypes.unbound';
|
|
2
2
|
import { type RowOrder } from '../logic/filtering';
|
|
3
3
|
import { type GroupTree, type GroupedDisplay } from '../logic/grouping';
|
|
4
|
+
import { type LabelDisplay, type LabelRowLayout } from '../logic/labelRows';
|
|
4
5
|
export type RowOrderInputs<T> = {
|
|
5
6
|
rows: T[];
|
|
7
|
+
labelLayout?: LabelRowLayout | null;
|
|
6
8
|
visibleColumns: GridColumn<T>[];
|
|
7
9
|
columnFilters: Record<string, ColumnFilterValue>;
|
|
8
10
|
globalFilteredOrder: RowOrder;
|
|
@@ -18,6 +20,11 @@ export type ClientSideRowModelInputs<T> = {
|
|
|
18
20
|
rows: T[];
|
|
19
21
|
order: RowOrder;
|
|
20
22
|
rowGroupingActive: boolean;
|
|
23
|
+
labelLayout?: LabelRowLayout | null;
|
|
24
|
+
labelSortMode?: LabelRowSortMode;
|
|
25
|
+
keepEmptySections?: boolean;
|
|
26
|
+
sortActive?: boolean;
|
|
27
|
+
getLabel?: (row: T) => string;
|
|
21
28
|
groupColumns: GridColumn<T>[];
|
|
22
29
|
aggColumns: GridColumn<T>[];
|
|
23
30
|
collapsedGroupKeys: ReadonlySet<string>;
|
|
@@ -26,6 +33,7 @@ export type ClientSideRowModelInputs<T> = {
|
|
|
26
33
|
export type ClientSideRowModelResolution<T> = {
|
|
27
34
|
groupTree: GroupTree<T> | null;
|
|
28
35
|
groupedDisplay: GroupedDisplay | null;
|
|
36
|
+
labelDisplay: LabelDisplay<T> | null;
|
|
29
37
|
rowModel: RowModel<T>;
|
|
30
38
|
};
|
|
31
39
|
export type ServerSideQueryInputs = {
|
|
@@ -42,7 +50,8 @@ export type ServerSideQueryResolution = {
|
|
|
42
50
|
queryKey: string;
|
|
43
51
|
};
|
|
44
52
|
export declare const createRowPipelineResolver: <T>() => {
|
|
45
|
-
|
|
53
|
+
resolveLabelRowLayout: (rows: T[], isLabelRow: ((row: T, sourceIndex: number) => boolean) | undefined) => LabelRowLayout | null;
|
|
54
|
+
resolveBaseOrder: (rowCount: number, labelLayout?: LabelRowLayout | null) => RowOrder;
|
|
46
55
|
resolveOrder: (inputs: RowOrderInputs<T>) => RowOrderResolution;
|
|
47
56
|
resolveClientSideRowModel: (inputs: ClientSideRowModelInputs<T>) => ClientSideRowModelResolution<T>;
|
|
48
57
|
resolveServerSideQuery: (inputs: ServerSideQueryInputs) => ServerSideQueryResolution;
|