@ishibashi0112/spreadsheet-grid 0.12.0 → 0.14.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/README.md +469 -439
- package/dist/SpreadsheetGrid.d.ts +1 -1
- package/dist/hooks/useGridHistoryController.d.ts +23 -0
- package/dist/hooks/useGridKeyboardInteractions.d.ts +4 -1
- package/dist/index.cjs +8 -8
- package/dist/index.js +1869 -1575
- package/dist/logic/cellOverflowTooltip.d.ts +5 -0
- package/dist/logic/clearCells.d.ts +22 -0
- package/dist/logic/history.d.ts +16 -0
- package/dist/logic/setFilterSelection.d.ts +5 -0
- package/dist/model/gridTypes.d.ts +15 -0
- package/dist/view/ColumnFilterPopover.d.ts +1 -5
- package/dist/view/GridBodyLayer.d.ts +2 -1
- package/package.json +13 -5
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CellCoord, GridColumn, GridSelection } from '../model/gridTypes';
|
|
2
|
+
type ClearTarget = {
|
|
3
|
+
startRow: number;
|
|
4
|
+
endRow: number;
|
|
5
|
+
startCol: number;
|
|
6
|
+
endCol: number;
|
|
7
|
+
};
|
|
8
|
+
export declare const resolveClearTarget: (selection: GridSelection, activeCell: CellCoord | null, viewRowCount: number, columnCount: number) => ClearTarget | null;
|
|
9
|
+
type ClearCellsArgs<T extends object> = {
|
|
10
|
+
rows: T[];
|
|
11
|
+
resolveSourceIndex: (viewIndex: number) => number | undefined;
|
|
12
|
+
columns: GridColumn<T>[];
|
|
13
|
+
selection: GridSelection;
|
|
14
|
+
activeCell: CellCoord | null;
|
|
15
|
+
viewRowCount: number;
|
|
16
|
+
canWriteCell: (originalRowIndex: number, colIndex: number, row: T, column: GridColumn<T>) => boolean;
|
|
17
|
+
};
|
|
18
|
+
export declare const clearCellsInSelection: <T extends object>({ rows, resolveSourceIndex, columns, selection, activeCell, viewRowCount, canWriteCell, }: ClearCellsArgs<T>) => {
|
|
19
|
+
nextRows: T[];
|
|
20
|
+
changed: boolean;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type HistoryStack<S> = {
|
|
2
|
+
past: S[];
|
|
3
|
+
future: S[];
|
|
4
|
+
};
|
|
5
|
+
export declare const createHistoryStack: <S>() => HistoryStack<S>;
|
|
6
|
+
export declare const canUndoHistory: <S>(stack: HistoryStack<S>) => boolean;
|
|
7
|
+
export declare const canRedoHistory: <S>(stack: HistoryStack<S>) => boolean;
|
|
8
|
+
export declare const pushHistory: <S>(stack: HistoryStack<S>, snapshot: S, limit: number) => HistoryStack<S>;
|
|
9
|
+
export declare const undoHistory: <S>(stack: HistoryStack<S>, current: S) => {
|
|
10
|
+
stack: HistoryStack<S>;
|
|
11
|
+
snapshot: S;
|
|
12
|
+
} | null;
|
|
13
|
+
export declare const redoHistory: <S>(stack: HistoryStack<S>, current: S) => {
|
|
14
|
+
stack: HistoryStack<S>;
|
|
15
|
+
snapshot: S;
|
|
16
|
+
} | null;
|
|
@@ -35,6 +35,10 @@ export type CellRange = {
|
|
|
35
35
|
start: CellCoord;
|
|
36
36
|
end: CellCoord;
|
|
37
37
|
};
|
|
38
|
+
export type UndoRedoState = {
|
|
39
|
+
canUndo: boolean;
|
|
40
|
+
canRedo: boolean;
|
|
41
|
+
};
|
|
38
42
|
export type GridSelection = {
|
|
39
43
|
type: 'cell';
|
|
40
44
|
range: CellRange;
|
|
@@ -159,6 +163,8 @@ export type GridColumn<T> = {
|
|
|
159
163
|
width: number;
|
|
160
164
|
minWidth?: number;
|
|
161
165
|
maxWidth?: number;
|
|
166
|
+
wordBreak?: 'normal' | 'break-all' | 'keep-all' | 'break-word' | 'auto-phrase';
|
|
167
|
+
lineBreak?: 'auto' | 'loose' | 'normal' | 'strict' | 'anywhere';
|
|
162
168
|
flex?: number;
|
|
163
169
|
resizable?: boolean;
|
|
164
170
|
suppressAutoSize?: boolean;
|
|
@@ -397,6 +403,11 @@ export type SpreadsheetGridHandle<T> = {
|
|
|
397
403
|
isRowSelected: (rowKey: GridRowKey) => boolean;
|
|
398
404
|
selectAllRows: () => void;
|
|
399
405
|
clearRowSelection: () => void;
|
|
406
|
+
undo: () => void;
|
|
407
|
+
redo: () => void;
|
|
408
|
+
canUndo: () => boolean;
|
|
409
|
+
canRedo: () => boolean;
|
|
410
|
+
clearUndoHistory: () => void;
|
|
400
411
|
openFilterManager: () => void;
|
|
401
412
|
closeFilterManager: () => void;
|
|
402
413
|
};
|
|
@@ -427,6 +438,9 @@ export type SpreadsheetGridProps<T> = {
|
|
|
427
438
|
readOnly?: boolean;
|
|
428
439
|
dimReadOnlyCells?: boolean;
|
|
429
440
|
canEditCell?: (rowIndex: number, colIndex: number, row: T, column: GridColumn<T>) => boolean;
|
|
441
|
+
enableUndoRedo?: boolean;
|
|
442
|
+
undoHistoryLimit?: number;
|
|
443
|
+
onUndoRedoStateChange?: (state: UndoRedoState) => void;
|
|
430
444
|
enableRangeSelection?: boolean;
|
|
431
445
|
enableRowSelection?: boolean;
|
|
432
446
|
rowSelectionMode?: RowSelectionMode;
|
|
@@ -439,6 +453,7 @@ export type SpreadsheetGridProps<T> = {
|
|
|
439
453
|
enableSorting?: boolean;
|
|
440
454
|
enableColumnResize?: boolean;
|
|
441
455
|
autoSizeColumns?: AutoSizeColumnsMode;
|
|
456
|
+
showCellOverflowTooltip?: boolean;
|
|
442
457
|
enableRowHover?: boolean;
|
|
443
458
|
enableColumnHeaderHover?: boolean;
|
|
444
459
|
enableColumnMenu?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type RefObject } from 'react';
|
|
2
|
+
import { type ColumnFilterSetSelection } from '../logic/setFilterSelection';
|
|
2
3
|
export type ColumnFilterPopoverLayout = {
|
|
3
4
|
top: number;
|
|
4
5
|
left: number;
|
|
@@ -8,11 +9,6 @@ export type ColumnFilterPopoverOption = {
|
|
|
8
9
|
label: string;
|
|
9
10
|
value: string;
|
|
10
11
|
};
|
|
11
|
-
export type ColumnFilterSetSelection = {
|
|
12
|
-
mode: 'include' | 'exclude';
|
|
13
|
-
values: ReadonlySet<string>;
|
|
14
|
-
};
|
|
15
|
-
export declare const isSetValueSelected: (selection: ColumnFilterSetSelection | null, value: string) => boolean;
|
|
16
12
|
type ColumnFilterPopoverProps = {
|
|
17
13
|
isOpen: boolean;
|
|
18
14
|
themeClassName?: string;
|
|
@@ -18,6 +18,7 @@ type GridBodyLayerProps<T> = {
|
|
|
18
18
|
renderEntries: PaneColumnEntry<T>[];
|
|
19
19
|
rowHeight: number;
|
|
20
20
|
autoHeight?: boolean;
|
|
21
|
+
showCellOverflowTooltip?: boolean;
|
|
21
22
|
isServerSide?: boolean;
|
|
22
23
|
rowHeaderCellStyle: CSSProperties;
|
|
23
24
|
hoveredRowIndex: number | null;
|
|
@@ -41,5 +42,5 @@ type GridBodyLayerProps<T> = {
|
|
|
41
42
|
bodyRowClassName?: string;
|
|
42
43
|
rowHeaderCellClassName?: string;
|
|
43
44
|
};
|
|
44
|
-
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, isServerSide, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName, bodyCellClassName, bodyRowClassName, rowHeaderCellClassName, }: GridBodyLayerProps<T>): import("react").JSX.Element;
|
|
45
|
+
export declare function GridBodyLayer<T>({ pane, ownsRowHeader, leadingWidth, rowModel, virtualRows, virtualRowIndexes, renderEntries, rowHeight, autoHeight, showCellOverflowTooltip, isServerSide, rowHeaderCellStyle, hoveredRowIndex, isWholeGridSelected, enableRowSelection, rowSelectionState, activeCell, editingCell, selectionSnapshot, readOnly, canEditCell, onRowHeaderPointerDown, onRowHeaderPointerEnter, onRowHeaderPointerLeave, onCellPointerDown, onCellPointerEnter, onCellDoubleClick, renderCellContent, getRowClassName, bodyCellClassName, bodyRowClassName, rowHeaderCellClassName, }: GridBodyLayerProps<T>): import("react").JSX.Element;
|
|
45
46
|
export default GridBodyLayer;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ishibashi0112/spreadsheet-grid",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "React 19 製のカスタム仮想化データグリッド。100 万行対応の仮想化・3 ペイン固定列・ソート/フィルター・クライアント/サーバーサイド行モデル対応。",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -46,6 +46,13 @@
|
|
|
46
46
|
"engines": {
|
|
47
47
|
"node": ">=18"
|
|
48
48
|
},
|
|
49
|
+
"devEngines": {
|
|
50
|
+
"packageManager": {
|
|
51
|
+
"name": "pnpm",
|
|
52
|
+
"version": "11.12.0",
|
|
53
|
+
"onFail": "download"
|
|
54
|
+
}
|
|
55
|
+
},
|
|
49
56
|
"publishConfig": {
|
|
50
57
|
"access": "public"
|
|
51
58
|
},
|
|
@@ -74,15 +81,16 @@
|
|
|
74
81
|
"typescript": "~6.0.2",
|
|
75
82
|
"typescript-eslint": "^8.59.2",
|
|
76
83
|
"vite": "^8.0.12",
|
|
84
|
+
"vite-plus": "^0.2.4",
|
|
77
85
|
"vitest": "^4.1.9"
|
|
78
86
|
},
|
|
79
87
|
"scripts": {
|
|
80
|
-
"dev": "
|
|
81
|
-
"build": "tsc -b &&
|
|
82
|
-
"build:lib": "
|
|
88
|
+
"dev": "vp dev",
|
|
89
|
+
"build": "tsc -b && vp build",
|
|
90
|
+
"build:lib": "vp build --config vite.lib.config.ts && tsc -p tsconfig.lib.json && node scripts/emit-layer-css.mjs",
|
|
83
91
|
"build:types": "tsc -p tsconfig.lib.json",
|
|
84
92
|
"lint": "eslint .",
|
|
85
|
-
"preview": "
|
|
93
|
+
"preview": "vp preview",
|
|
86
94
|
"test": "vitest run",
|
|
87
95
|
"test:watch": "vitest",
|
|
88
96
|
"typecheck:test": "tsc --noEmit -p tsconfig.vitest.json"
|