@rowsncolumns/spreadsheet 10.5.1 → 10.5.3
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/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +103 -71
- package/dist/cjs/components/canvas-grid/typings.d.ts +18 -1
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.d.ts +10 -3
- package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.js +21 -9
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +9 -5
- package/dist/cjs/components/cell/line-height.d.ts +22 -0
- package/dist/cjs/components/cell/line-height.d.ts.map +1 -0
- package/dist/cjs/components/cell/line-height.js +32 -0
- package/dist/cjs/components/cell/typings.d.ts +8 -2
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/formula-input/index.d.ts.map +1 -1
- package/dist/cjs/components/formula-input/index.js +28 -1
- package/dist/cjs/hooks/export-range-tiles.d.ts +81 -0
- package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
- package/dist/cjs/hooks/export-range-tiles.js +171 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +3 -2
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
- package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +36 -16
- package/dist/cjs/hooks/use-export-range.d.ts +14 -6
- package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-export-range.js +240 -158
- package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
- package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/cjs/hooks/use-grid-children.js +4 -2
- package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
- package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
- package/dist/cjs/hooks/use-sizer.d.ts +8 -2
- package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sizer.js +54 -33
- package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
- package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
- package/dist/cjs/providers/spreadsheet-provider.js +7 -5
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +44 -13
- package/dist/esm/components/canvas-grid/typings.d.ts +18 -1
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
- package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.js +14 -9
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +7 -3
- package/dist/esm/components/cell/line-height.d.ts +22 -0
- package/dist/esm/components/cell/line-height.d.ts.map +1 -0
- package/dist/esm/components/cell/line-height.js +25 -0
- package/dist/esm/components/cell/typings.d.ts +8 -2
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/formula-input/index.d.ts.map +1 -1
- package/dist/esm/components/formula-input/index.js +26 -1
- package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
- package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
- package/dist/esm/hooks/export-range-tiles.js +126 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +3 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
- package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +24 -6
- package/dist/esm/hooks/use-export-range.d.ts +14 -6
- package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-export-range.js +158 -120
- package/dist/esm/hooks/use-grid-children.d.ts +4 -1
- package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
- package/dist/esm/hooks/use-grid-children.js +4 -2
- package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
- package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
- package/dist/esm/hooks/use-sizer.d.ts +8 -2
- package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-sizer.js +53 -31
- package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
- package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
- package/dist/esm/providers/spreadsheet-provider.js +8 -6
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -20,29 +20,38 @@ var defaultGetText = function () { return ""; };
|
|
|
20
20
|
* Dynamically resize columns after user has scrolled down/view port changed ?
|
|
21
21
|
*/
|
|
22
22
|
var useSizer = function (_a) {
|
|
23
|
-
var getTextFormat = _a.getTextFormat, getTextFormatRuns = _a.getTextFormatRuns, _b = _a.initialVisibleRows, initialVisibleRows = _b === void 0 ? 20 : _b, _c = _a.initialVisibleColumns, initialVisibleColumns = _c === void 0 ? 20 : _c, _d = _a.cellVerticalSpacing, cellVerticalSpacing = _d === void 0 ? 0 : _d, _e = _a.cellHorizontalSpacing, cellHorizontalSpacing = _e === void 0 ? 10 : _e, _f = _a.minColumnDimension, minColumnDimension = _f === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _f, _g = _a.minRowDimension, minRowDimension = _g === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _g, _h = _a.resizeStrategy, resizeStrategy = _h === void 0 ? "lazy" : _h, rowCount = _a.rowCount, columnCount = _a.columnCount, getDataRowCount = _a.getDataRowCount, _j = _a.fontFamily, fontFamily = _j === void 0 ? "Arial" : _j, _k = _a.fontSize, fontSize = _k === void 0 ? 12 : _k, _l = _a.fontWeight, fontWeight = _l === void 0 ? "" : _l, _m = _a.fontStyle, fontStyle = _m === void 0 ? "" : _m, _o = _a.
|
|
23
|
+
var getTextFormat = _a.getTextFormat, getTextFormatRuns = _a.getTextFormatRuns, _b = _a.initialVisibleRows, initialVisibleRows = _b === void 0 ? 20 : _b, _c = _a.initialVisibleColumns, initialVisibleColumns = _c === void 0 ? 20 : _c, _d = _a.cellVerticalSpacing, cellVerticalSpacing = _d === void 0 ? 0 : _d, _e = _a.cellHorizontalSpacing, cellHorizontalSpacing = _e === void 0 ? 10 : _e, _f = _a.minColumnDimension, minColumnDimension = _f === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _f, _g = _a.minRowDimension, minRowDimension = _g === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _g, _h = _a.resizeStrategy, resizeStrategy = _h === void 0 ? "lazy" : _h, rowCount = _a.rowCount, columnCount = _a.columnCount, getDataRowCount = _a.getDataRowCount, _j = _a.fontFamily, fontFamily = _j === void 0 ? "Arial" : _j, _k = _a.fontSize, fontSize = _k === void 0 ? 12 : _k, _l = _a.fontWeight, fontWeight = _l === void 0 ? "" : _l, _m = _a.fontStyle, fontStyle = _m === void 0 ? "" : _m, _o = _a.lineHeightMode, lineHeightMode = _o === void 0 ? "fontMetrics" : _o, _p = _a.frozenRows, frozenRows = _p === void 0 ? 0 : _p, _q = _a.frozenColumns, frozenColumns = _q === void 0 ? 0 : _q, _r = _a.scale, scale = _r === void 0 ? 1 : _r, isHiddenRow = _a.isHiddenRow, isHiddenColumn = _a.isHiddenColumn, _s = _a.getTextValue, getTextValue = _s === void 0 ? defaultGetText : _s, getSpacing = _a.getSpacing, getViewPort = _a.getViewPort, shouldWrapCell = _a.shouldWrapCell, columnWidth = _a.columnWidth, getActualCellWidth = _a.getActualCellWidth;
|
|
24
24
|
var autoSizer = (0, react_1.useRef)(grid_1.autoSizerCanvas);
|
|
25
25
|
var scaleRef = (0, react_1.useRef)(scale);
|
|
26
26
|
// Keep scale in sync
|
|
27
27
|
scaleRef.current = scale;
|
|
28
28
|
/* Update any styles, fonts if necessary */
|
|
29
29
|
(0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
|
|
30
|
-
autoSizer.current.setFont({
|
|
31
|
-
|
|
30
|
+
autoSizer.current.setFont({
|
|
31
|
+
fontFamily: fontFamily,
|
|
32
|
+
fontSize: fontSize,
|
|
33
|
+
fontWeight: fontWeight,
|
|
34
|
+
fontStyle: fontStyle,
|
|
35
|
+
lineHeightMode: lineHeightMode,
|
|
36
|
+
});
|
|
37
|
+
}, [fontFamily, fontSize, fontWeight, fontStyle, lineHeightMode]);
|
|
32
38
|
var setAutoSizerTextFormat = (0, react_1.useCallback)(function (textFormat, scale) {
|
|
33
39
|
var _a, _b;
|
|
34
40
|
var baseFontSize = (0, helpers_1.pointToPixel)((_a = textFormat.fontSize) !== null && _a !== void 0 ? _a : fontSize);
|
|
35
41
|
var textFontSize = textFormat.baselineOffset
|
|
36
42
|
? baseFontSize * BASELINE_OFFSET_FONT_SCALE
|
|
37
43
|
: baseFontSize;
|
|
44
|
+
// The sizer is a shared singleton — pin the mode on every measure so a
|
|
45
|
+
// grid in `fixed` mode cannot leak its line box into this one.
|
|
38
46
|
autoSizer.current.setFont({
|
|
39
47
|
fontWeight: textFormat.bold ? "bold" : "",
|
|
40
48
|
fontSize: textFontSize,
|
|
41
49
|
fontFamily: (_b = textFormat.fontFamily) !== null && _b !== void 0 ? _b : fontFamily,
|
|
42
50
|
fontStyle: textFormat.italic ? "italic" : "",
|
|
43
51
|
scale: scale,
|
|
52
|
+
lineHeightMode: lineHeightMode,
|
|
44
53
|
});
|
|
45
|
-
}, [fontFamily, fontSize]);
|
|
54
|
+
}, [fontFamily, fontSize, lineHeightMode]);
|
|
46
55
|
/**
|
|
47
56
|
* Measure a single atom under its segment-merged format. We can't
|
|
48
57
|
* delegate to `autoSizer.measureText` here: that runs the input
|
|
@@ -53,11 +62,12 @@ var useSizer = function (_a) {
|
|
|
53
62
|
* "Hello world" (with bold "world") produced a width as if the
|
|
54
63
|
* space didn't exist — auto-fit then sized the column too narrow
|
|
55
64
|
* and the bold run touched the right edge. Width comes from the
|
|
56
|
-
* raw 2D canvas API;
|
|
57
|
-
*
|
|
65
|
+
* raw 2D canvas API; the line box and leading are the autoSizer's
|
|
66
|
+
* for the atom's font, so a run in a taller face grows its line the
|
|
67
|
+
* way the painter's `CellTextRuns` draws it.
|
|
58
68
|
*/
|
|
59
69
|
var measureAtom = (0, react_1.useCallback)(function (atom, base, currentScale) {
|
|
60
|
-
var _a, _b, _c, _d, _e, _f
|
|
70
|
+
var _a, _b, _c, _d, _e, _f;
|
|
61
71
|
var merged = {
|
|
62
72
|
bold: (_a = atom.format.bold) !== null && _a !== void 0 ? _a : base.bold,
|
|
63
73
|
italic: (_b = atom.format.italic) !== null && _b !== void 0 ? _b : base.italic,
|
|
@@ -68,15 +78,14 @@ var useSizer = function (_a) {
|
|
|
68
78
|
setAutoSizerTextFormat(merged, currentScale);
|
|
69
79
|
var ctx = autoSizer.current.context;
|
|
70
80
|
var width = (_f = ctx === null || ctx === void 0 ? void 0 : ctx.measureText(atom.text).width) !== null && _f !== void 0 ? _f : 0;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return { width: width, height: height };
|
|
74
|
-
}, [fontSize, setAutoSizerTextFormat]);
|
|
81
|
+
return tslib_1.__assign({ width: width }, autoSizer.current.lineMetrics());
|
|
82
|
+
}, [setAutoSizerTextFormat]);
|
|
75
83
|
/**
|
|
76
84
|
* Measure a rich-text cell. Walks segments per line, sets the
|
|
77
85
|
* autoSizer font per atom, sums widths per line, takes the tallest
|
|
78
|
-
* atom's
|
|
79
|
-
*
|
|
86
|
+
* atom's line box as that line's box (Excel scales rows to fit the
|
|
87
|
+
* largest glyph in a mixed-format line) and stacks lines with the
|
|
88
|
+
* leading of the tallest atom, as `CellTextRuns` does. For wrapped
|
|
80
89
|
* cells it applies greedy whitespace-break wrap with per-atom font
|
|
81
90
|
* metrics, matching what `CellTextRuns` paints. Returns the raw
|
|
82
91
|
* scaled glyph box — caller adds cell-spacing padding afterwards.
|
|
@@ -85,19 +94,22 @@ var useSizer = function (_a) {
|
|
|
85
94
|
var e_1, _a;
|
|
86
95
|
var segments = (0, rich_text_1.buildRichTextSegments)(text, runs);
|
|
87
96
|
var inputLines = (0, rich_text_1.segmentsToLines)(segments);
|
|
88
|
-
//
|
|
89
|
-
|
|
90
|
-
var baseLineHeight = (function () {
|
|
91
|
-
var _a, _b;
|
|
97
|
+
// Line box for empty lines, and the floor of every other line.
|
|
98
|
+
var baseLine = (function () {
|
|
92
99
|
setAutoSizerTextFormat(base, currentScale);
|
|
93
|
-
return
|
|
100
|
+
return autoSizer.current.lineMetrics();
|
|
94
101
|
})();
|
|
95
102
|
var totalWidth = 0;
|
|
96
103
|
var totalHeight = 0;
|
|
104
|
+
var lineCount = 0;
|
|
105
|
+
var pushLine = function (box, leading) {
|
|
106
|
+
totalHeight += lineCount === 0 ? box : leading + box;
|
|
107
|
+
lineCount++;
|
|
108
|
+
};
|
|
97
109
|
var _loop_1 = function (line) {
|
|
98
110
|
var e_2, _b, e_3, _c, e_4, _d, e_5, _e;
|
|
99
111
|
if (line.length === 0) {
|
|
100
|
-
|
|
112
|
+
pushLine(baseLine.box, baseLine.leading);
|
|
101
113
|
return "continue";
|
|
102
114
|
}
|
|
103
115
|
var atoms = [];
|
|
@@ -127,16 +139,19 @@ var useSizer = function (_a) {
|
|
|
127
139
|
finally { if (e_2) throw e_2.error; }
|
|
128
140
|
}
|
|
129
141
|
if (!shouldWrap) {
|
|
130
|
-
// Single-line case: sum widths,
|
|
142
|
+
// Single-line case: sum widths, tallest atom's box = line box.
|
|
131
143
|
var lineWidth_1 = 0;
|
|
132
|
-
var
|
|
144
|
+
var lineBox_1 = baseLine.box;
|
|
145
|
+
var lineLeading_1 = baseLine.leading;
|
|
133
146
|
try {
|
|
134
147
|
for (var atoms_1 = (e_4 = void 0, tslib_1.__values(atoms)), atoms_1_1 = atoms_1.next(); !atoms_1_1.done; atoms_1_1 = atoms_1.next()) {
|
|
135
148
|
var atom = atoms_1_1.value;
|
|
136
|
-
var _h = measureAtom(atom, base, currentScale), width = _h.width,
|
|
149
|
+
var _h = measureAtom(atom, base, currentScale), width = _h.width, box = _h.box, leading = _h.leading;
|
|
137
150
|
lineWidth_1 += width;
|
|
138
|
-
if (
|
|
139
|
-
|
|
151
|
+
if (box > lineBox_1)
|
|
152
|
+
lineBox_1 = box;
|
|
153
|
+
if (leading > lineLeading_1)
|
|
154
|
+
lineLeading_1 = leading;
|
|
140
155
|
}
|
|
141
156
|
}
|
|
142
157
|
catch (e_4_1) { e_4 = { error: e_4_1 }; }
|
|
@@ -148,7 +163,7 @@ var useSizer = function (_a) {
|
|
|
148
163
|
}
|
|
149
164
|
if (lineWidth_1 > totalWidth)
|
|
150
165
|
totalWidth = lineWidth_1;
|
|
151
|
-
|
|
166
|
+
pushLine(lineBox_1, lineLeading_1);
|
|
152
167
|
return "continue";
|
|
153
168
|
}
|
|
154
169
|
// Wrapped case: greedy whitespace-break wrap with per-atom
|
|
@@ -156,24 +171,31 @@ var useSizer = function (_a) {
|
|
|
156
171
|
// (kept inline because we need running per-line max-height).
|
|
157
172
|
var cursorX = 0;
|
|
158
173
|
var lineWidth = 0;
|
|
159
|
-
var
|
|
174
|
+
var lineBox = baseLine.box;
|
|
175
|
+
var lineLeading = baseLine.leading;
|
|
160
176
|
var flush = function () {
|
|
161
177
|
if (lineWidth > totalWidth)
|
|
162
178
|
totalWidth = lineWidth;
|
|
163
|
-
|
|
179
|
+
pushLine(lineBox, lineLeading);
|
|
164
180
|
cursorX = 0;
|
|
165
181
|
lineWidth = 0;
|
|
166
|
-
|
|
182
|
+
lineBox = baseLine.box;
|
|
183
|
+
lineLeading = baseLine.leading;
|
|
184
|
+
};
|
|
185
|
+
var grow = function (box, leading) {
|
|
186
|
+
if (box > lineBox)
|
|
187
|
+
lineBox = box;
|
|
188
|
+
if (leading > lineLeading)
|
|
189
|
+
lineLeading = leading;
|
|
167
190
|
};
|
|
168
191
|
try {
|
|
169
192
|
for (var atoms_2 = (e_5 = void 0, tslib_1.__values(atoms)), atoms_2_1 = atoms_2.next(); !atoms_2_1.done; atoms_2_1 = atoms_2.next()) {
|
|
170
193
|
var atom = atoms_2_1.value;
|
|
171
|
-
var _j = measureAtom(atom, base, currentScale), atomWidth = _j.width,
|
|
194
|
+
var _j = measureAtom(atom, base, currentScale), atomWidth = _j.width, atomBox = _j.box, atomLeading = _j.leading;
|
|
172
195
|
if (cursorX + atomWidth <= maxGlyphWidth || cursorX === 0) {
|
|
173
196
|
cursorX += atomWidth;
|
|
174
197
|
lineWidth = cursorX;
|
|
175
|
-
|
|
176
|
-
lineMaxHeight = atomHeight;
|
|
198
|
+
grow(atomBox, atomLeading);
|
|
177
199
|
}
|
|
178
200
|
else if (atom.isWhitespace) {
|
|
179
201
|
flush();
|
|
@@ -182,8 +204,7 @@ var useSizer = function (_a) {
|
|
|
182
204
|
flush();
|
|
183
205
|
cursorX = atomWidth;
|
|
184
206
|
lineWidth = atomWidth;
|
|
185
|
-
|
|
186
|
-
lineMaxHeight = atomHeight;
|
|
207
|
+
grow(atomBox, atomLeading);
|
|
187
208
|
}
|
|
188
209
|
}
|
|
189
210
|
}
|
|
@@ -4,6 +4,15 @@ import type { SpreadsheetApi } from "../api/spreadsheet-api";
|
|
|
4
4
|
type Props = {
|
|
5
5
|
children?: ReactNode;
|
|
6
6
|
};
|
|
7
|
+
type PortalProps = Props & {
|
|
8
|
+
/**
|
|
9
|
+
* Where every dialog, menu, popover, select, tooltip and editor dropdown
|
|
10
|
+
* under this provider mounts. Defaults to the `document.body` of the
|
|
11
|
+
* window running the JS; a host that renders the grid in a second window
|
|
12
|
+
* (popout, iframe) passes that window's body so they open next to the grid.
|
|
13
|
+
*/
|
|
14
|
+
portalContainer?: HTMLElement | null;
|
|
15
|
+
};
|
|
7
16
|
export declare const multiInstanceStore: {
|
|
8
17
|
get: <Value>(atom: import("jotai").Atom<Value>) => Value;
|
|
9
18
|
set: <Value, Args extends unknown[], Result>(atom: import("jotai").WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
@@ -17,8 +26,8 @@ export declare const multiInstanceAtom: import("jotai").PrimitiveAtom<Map<string
|
|
|
17
26
|
init: Map<string, SpreadsheetApi<import("@rowsncolumns/common-types").CellData>>;
|
|
18
27
|
};
|
|
19
28
|
export declare const useSpreadsheetInstances: () => Map<string, SpreadsheetApi<import("@rowsncolumns/common-types").CellData>>;
|
|
20
|
-
export declare const SpreadsheetProvider: FC<
|
|
21
|
-
export declare const SpreadsheetStateProvider: FC<
|
|
29
|
+
export declare const SpreadsheetProvider: FC<PortalProps>;
|
|
30
|
+
export declare const SpreadsheetStateProvider: FC<PortalProps>;
|
|
22
31
|
export declare const SpreadsheetMultiInstanceProvider: FC<Props>;
|
|
23
32
|
export declare const SpreadsheetTooltipProvider: FC<Props>;
|
|
24
33
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spreadsheet-provider.d.ts","sourceRoot":"","sources":["../../../providers/spreadsheet-provider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spreadsheet-provider.d.ts","sourceRoot":"","sources":["../../../providers/spreadsheet-provider.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,KAAK,WAAW,GAAG,KAAK,GAAG;IACzB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,kBAAkB;;0GA+CwmD,GAAI;;;;0GAAJ,GAAI;;wDA/C5lD,CAAC;AAEhD,eAAO,MAAM,iBAAiB;;CAA+C,CAAC;AAM9E,eAAO,MAAM,uBAAuB,kFAEnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,WAAW,CAa/C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,EAAE,CAAC,WAAW,CAWpD,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,EAAE,CAAC,KAAK,CAEtD,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,EAAE,CAAC,KAAK,CAEhD,CAAC"}
|
|
@@ -16,16 +16,18 @@ var useSpreadsheetInstances = function () {
|
|
|
16
16
|
};
|
|
17
17
|
exports.useSpreadsheetInstances = useSpreadsheetInstances;
|
|
18
18
|
var SpreadsheetProvider = function (_a) {
|
|
19
|
-
var children = _a.children;
|
|
19
|
+
var children = _a.children, portalContainer = _a.portalContainer;
|
|
20
20
|
return (react_1.default.createElement(jotai_1.Provider, null,
|
|
21
|
-
react_1.default.createElement(ui_1.
|
|
22
|
-
react_1.default.createElement(ui_1.
|
|
21
|
+
react_1.default.createElement(ui_1.PortalContainerProvider, { container: portalContainer },
|
|
22
|
+
react_1.default.createElement(ui_1.ModalProvider, null,
|
|
23
|
+
react_1.default.createElement(ui_1.TooltipProvider, null, children)))));
|
|
23
24
|
};
|
|
24
25
|
exports.SpreadsheetProvider = SpreadsheetProvider;
|
|
25
26
|
var SpreadsheetStateProvider = function (_a) {
|
|
26
|
-
var children = _a.children;
|
|
27
|
+
var children = _a.children, portalContainer = _a.portalContainer;
|
|
27
28
|
return (react_1.default.createElement(jotai_1.Provider, null,
|
|
28
|
-
react_1.default.createElement(ui_1.
|
|
29
|
+
react_1.default.createElement(ui_1.PortalContainerProvider, { container: portalContainer },
|
|
30
|
+
react_1.default.createElement(ui_1.ModalProvider, null, children))));
|
|
29
31
|
};
|
|
30
32
|
exports.SpreadsheetStateProvider = SpreadsheetStateProvider;
|
|
31
33
|
var SpreadsheetMultiInstanceProvider = function (_a) {
|
package/dist/cjs/release-date.js
CHANGED
|
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.releaseDate = void 0;
|
|
5
5
|
exports.releaseDate =
|
|
6
6
|
// @ts-ignore
|
|
7
|
-
(_a = new Date("2026-10-
|
|
7
|
+
(_a = new Date("2026-10-14")) !== null && _a !== void 0 ? _a : new Date("2025-06-18");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/calculated-column-fill.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/chart-sheet.ts","../../api/chart-source-ranges.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/fill-series.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/insert-options.ts","../../api/move-overwrite.ts","../../api/multi-selection.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table-auto-expansion.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/calculated-column-fill.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/chart-actions.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/fill-options.atom.ts","../../atoms/fill-series-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/insert-cells-dialog.atom.ts","../../atoms/insert-options.atom.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/move-chart-dialog.atom.ts","../../atoms/move-overwrite-confirm.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/selected-chart-series.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/sparkline-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/table-auto-expansion.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculated-column-smart-tag/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/chart-sheet-view/index.tsx","../../components/context-menu/embed-context-menu.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-function-menu.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/fill-series-dialog/index.tsx","../../components/filter-box/date-tree.ts","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-cells-dialog/index.tsx","../../components/insert-function-dialog/index.tsx","../../components/insert-options-smart-tag/index.tsx","../../components/loading-indicator/index.tsx","../../components/move-chart-dialog/index.tsx","../../components/move-overwrite-confirm-dialog/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/fill-options-menu.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/sparkline-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/table-auto-expansion-smart-tag/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/sparkline-actions.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-editor.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-chart-clipboard.ts","../../hooks/use-chart-source-ranges.ts","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-reveal-chart-embed.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-hit-zones.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/copy-as-picture.ts","../../utils/maybe.ts","../../utils/pivot-chart-field-buttons.ts","../../utils/z-order.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/calculated-column-fill.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/chart-sheet.ts","../../api/chart-source-ranges.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/fill-series.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/insert-options.ts","../../api/move-overwrite.ts","../../api/multi-selection.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table-auto-expansion.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/calculated-column-fill.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/chart-actions.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/fill-options.atom.ts","../../atoms/fill-series-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/insert-cells-dialog.atom.ts","../../atoms/insert-options.atom.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/move-chart-dialog.atom.ts","../../atoms/move-overwrite-confirm.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/selected-chart-series.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/sparkline-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/table-auto-expansion.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculated-column-smart-tag/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/line-height.ts","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/chart-sheet-view/index.tsx","../../components/context-menu/embed-context-menu.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-function-menu.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/fill-series-dialog/index.tsx","../../components/filter-box/date-tree.ts","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-cells-dialog/index.tsx","../../components/insert-function-dialog/index.tsx","../../components/insert-options-smart-tag/index.tsx","../../components/loading-indicator/index.tsx","../../components/move-chart-dialog/index.tsx","../../components/move-overwrite-confirm-dialog/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/fill-options-menu.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/sparkline-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/table-auto-expansion-smart-tag/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/sparkline-actions.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-editor.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/export-range-tiles.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-chart-clipboard.ts","../../hooks/use-chart-source-ranges.ts","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-reveal-chart-embed.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-hit-zones.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/copy-as-picture.ts","../../utils/maybe.ts","../../utils/pivot-chart-field-buttons.ts","../../utils/z-order.ts"],"version":"5.8.3"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAoDA,OAAO,KASN,MAAM,OAAO,CAAC;AAqNf,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAoBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/canvas-grid/index.tsx"],"names":[],"mappings":"AAoDA,OAAO,KASN,MAAM,OAAO,CAAC;AAqNf,OAAO,KAAK,EAGV,QAAQ,EAWT,MAAM,aAAa,CAAC;AAoBrB,OAAO,KAAK,EACV,wBAAwB,EACxB,iBAAiB,EACjB,eAAe,EAEhB,MAAM,WAAW,CAAC;AAw5LnB,eAAO,MAAM,UAAU,EAA4C,CACjE,CAAC,SAAS,QAAQ,CAAC,GAAG,CAAC,EAEvB,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GACvB,wBAAwB,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CAAE,KAChE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC"}
|
|
@@ -116,8 +116,18 @@ import { getNestedPropertyNames } from "./helpers";
|
|
|
116
116
|
*/
|
|
117
117
|
/** Where the grid focuses when no cell is given (A1); mirrors spreadsheet-state's `defaultCellCoords` without importing it — that package depends on this one. */
|
|
118
118
|
const defaultCellCoords = { rowIndex: 1, columnIndex: 1 };
|
|
119
|
+
/**
|
|
120
|
+
* Whether a registered editor's DOM has been removed: an input that unmounted while focused
|
|
121
|
+
* gets no blur from Chromium, so its `activeEditor` registration can outlive it. Such an editor
|
|
122
|
+
* cannot hold focus, so the grid treats it as absent (rowsncolumns/spreadsheet#1131). An editor
|
|
123
|
+
* that exposes no element is trusted as live.
|
|
124
|
+
*/
|
|
125
|
+
function isDetachedEditor(editor) {
|
|
126
|
+
const element = editor.el?.();
|
|
127
|
+
return element != null && !element.isConnected;
|
|
128
|
+
}
|
|
119
129
|
function CanvasGridComponent(props, forwardedRef) {
|
|
120
|
-
const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
|
|
130
|
+
const { licenseKey, sheetId, sheetType, ChartSheetView: ChartSheetViewComponent = ChartSheetView, instanceId, activeCell = DEFAULT_ACTIVE_CELL, selections = DEFAULT_ARRAY, frozenColumnCount = 0, frozenRowCount = 0, rowCount = DEFAULT_ROW_COUNT, columnCount = DEFAULT_COLUMN_COUNT, autoFocus, basicFilter, tables, namedRanges, bandedRanges = DEFAULT_ARRAY, tableBorderColor = "#008000", filterIconColor = "#008000", conditionalFormats, showFilterIcon = true, showCalculatedColumnIcon = true, showHeaders = true, defaultColumnWidth = DEFAULT_COLUMN_WIDTH, defaultRowHeight = DEFAULT_ROW_HEIGHT, lineHeightMode = "fontMetrics", columnHeaderHeight = COLUMN_HEADER_HEIGHT, rowHeaderWidth = ROW_HEADER_WIDTH, gridLineColor = GRIDLINE_COLOR, cellBackgroundColor = DEFAULT_CELL_BACKGROUND_COLOR, cellColor = DEFAULT_CELL_COLOR, headerBorderColor = DEFAULT_HEADER_BORDER_COLOR, headerBackgroundColor = DEFAULT_HEADER_BG, headerColor = DEFAULT_HEADER_COLOR, headerActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_BG, headerSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_BG, headerSelectedColor = "white", headerTableBackgroundColor = DEFAULT_HEADER_TABLE_BG, headerTableActiveBackgroundColor = DEFAULT_HEADER_ACTIVE_TABLE_BG, headerTableSelectedBackgroundColor = DEFAULT_HEADER_SELECTED_TABLE_BG, frozenShadowColor = headerBorderColor, frozenShadowThickness = 1, selectionBackgroundColor = SELECTION_BG, selectionBorderColor = SELECTION_BORDER, selectionDragBorderColor = SELECTION_BORDER, chartSelectedColor, chipBackgroundColor = CHIP_COLOR, merges = DEFAULT_ARRAY, borderStyles, protectedRanges, isWorkbookProtected: isWorkbookProtectedProp = false, getSheetProtection, pivotTables, charts, onUpdateChart, onChangeZOrder, embeds, slicers, rowMetadata = DEFAULT_ARRAY, columnMetadata = DEFAULT_ARRAY, scale = 1, zoomSpeed = 1, overscanCount = 3, enableEditOnEnterKey = true, enableTextOverflow = true, showGridLines: _showGridLines, showFormulas = false, protectFormulas = false, showFrozenSeparator = true, HeaderCell = DefaultHeaderCell, Cell = DefaultCell, SelectionTitleComponent = SelectionTitle, CellEditor = DefaultCellEditor, CellTooltip, ContextMenu = DefaultContextMenu, ContextMenuWrapper = DefaultContextMenuWrapper, FilterBox = DefaultFilterBox, HeaderMoveDragComponent = DefaultHeaderMoveDragComponent, SuggestionsDropdown, stickyEditor = true, scrollSnap = false, scrollThrottleTimeout, preventBrowserDefaultScroll, mouseMoveThrottleTimeout = 60, tooltipIntentInterval = 60, selectionPolicy, users, userId, renderCollaboratorCursor, functionDescriptions, showHeaderMenuButton = true, scrollbarSize = SCROLLBAR_SIZE, theme = defaultSpreadsheetTheme, showNotes = true, showComments = true, locale, formulaLocale: formulaLocaleProp, agentSuggestions, onReviewSuggestion, onShowFormulas, getDataRowCount, getDataRegion, getChartComponent, getEmbedComponent, getSlicerComponent, onChange, onChangeBatch, onExpandCollapse, onPivotDrillDown, onDelete, onChangeEditorValue, onFill, onRequestCalculate, onChangeActiveCell, onChangeActiveSheet, onChangeSelections, getSheetName, getSheetId, getCellData, getNote: getNoteProp, getTextFormatRuns, getDataValidation, getEffectiveFormat, getFormattedValue: getFormattedValueProp, getTooltipContent, errorResolutionComponent, getEffectiveValue: getEffectiveValueProp, getSparklineGroup, getUserEnteredExtendedValue, getEffectiveExtendedValue, getSheetRowCount, getSheetColumnCount, getCellPopoverContent, onScroll, onViewPortChange, windowConditionalFormats = false, engineConditionalFormatResults = false, onResize, onAutoResize, onHideColumn, onHideRow, onShowColumn, onShowRow, onGroupRows, onUngroupRows, onCollapseRowGroup, onExpandRowGroup, onGroupColumns, onUngroupColumns, onCollapseColumnGroup, onExpandColumnGroup, onSetOutlineDepth, onDeleteRow, onDeleteColumn, onInsertRow, onInsertColumn, onChangeAutoExpandTables, onChangeAutoCalculatedColumns, onInsertCellsShiftDown, onInsertCellsShiftRight, onDeleteCellsShiftLeft, onDeleteCellsShiftUp, onClearContents, onMoveColumns, onMoveRows, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onKeyDown, onChangeFormatting, onRepeatFormatting, onClearFormatting, onRequestEditProtectedRange, onMoveChart, onResizeChart, onDeleteChart, onCutChart, onCopyChart, onMoveEmbed, onResizeEmbed, onDeleteEmbed, onRequestEditEmbed, onMoveSlicer, onResizeSlicer, onDeleteSlicer, onRequestEditSlicer, onFillRange, disableFillRightShortcut, keymap, onCalculateNow, onRequestGoTo, onMoveSelection, onInsertCutCells, onInsertTime, onInsertDate, onInsertDateTime, onInsertAutoSum, onUndo, onRedo, batchHistory, onPaste, onCopy, onCut, onSortColumn, onSortTable, onFilterTable, onFilterPivot, onResizeTable, onUndoTableAutoExpansion, onUndoCalculatedColumn, onOverwriteCalculatedColumn, onRequestEditTable, onRequestEditPivotTable, onRequestDeletePivotTable, onRequestCreatePivotChart, onRemoveTable, onCreateTable, onRequestCreateTable, onInsertTableColumn, onDeleteTableColumn, onInsertTableRow, onDeleteTableRow, onUpdateTable, onRequestResizeTable, onRequestInsertSlicer, onCreateBasicFilter, onRequestDefineNamedRange, onRequestFormatCells, onRequestConditionalFormat, onRequestDataValidation, onRequestInsertComment, onRequestInsertLink, onFreezeColumn, onFreezeRow, onUpdateNote, onProtectRange, onUnProtectRange, onSortRange, onRequestSearch, onRequestReplace, onRequestResize, getRowHeaderText = getDefaultRowHeader, getColumnHeaderText = getDefaultColumnHeader, getAdditionalCellSpacing, tokenizer: defaultTokenizer = defaultFormulaTokenizer, onChangeScale, onRemoveLink, onSelectLink, onSplitTextToColumns, onRemoveDuplicates, onGoalSeek, onSubtotal, onAdvancedFilter, onRequestExpand, cellExpandPredicate, StructuredResult = DefaultStructuredResult, getMentions, getStructuredProperties: getStructuredPropertiesProp, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, showSelectionResizeHandles = true, enableMagicFill, enableQuickEdit = true, MagicFillComponent, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, HiddenRowMarkers, HiddenColumnMarkers, enableResizerOverflow, className, defaultFontSizePoint = DEFAULT_FONT_SIZE_PT, defaultCellFormat, readonly, isComparing = false, getCellDiff, enableDataBoundaryNavigation, footerHeight, footerComponent, arrowComponents,
|
|
121
131
|
// Host-driven filter props. `hostHiddenRowRanges`
|
|
122
132
|
// supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
|
|
123
133
|
// column's distinct values. Both let a million-row filter render without scanning
|
|
@@ -696,10 +706,20 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
696
706
|
!gridContainer.contains(activeElement)) {
|
|
697
707
|
return;
|
|
698
708
|
}
|
|
699
|
-
|
|
709
|
+
// An editor whose DOM is gone cannot be the one holding focus: a host that unmounted an
|
|
710
|
+
// input without a blur (Chromium fires none for a removed focused element) can leave a
|
|
711
|
+
// stale `activeEditor` behind, and honouring it would lock the grid out of keyboard input
|
|
712
|
+
// (rowsncolumns/spreadsheet#1131).
|
|
713
|
+
if (!activeEditor ||
|
|
714
|
+
activeEditor === cellEditorInstance ||
|
|
715
|
+
isDetachedEditor(activeEditor)) {
|
|
700
716
|
cellEditorInstance?.focus();
|
|
701
717
|
}
|
|
702
718
|
}, [activeEditor, cellEditorInstance]);
|
|
719
|
+
/**
|
|
720
|
+
* Container and total size of the grid, as the grid measures them
|
|
721
|
+
*/
|
|
722
|
+
const getGridDimensions = useCallback(() => gridRef.current?.getDimensions(), []);
|
|
703
723
|
/**
|
|
704
724
|
* Canvas layers
|
|
705
725
|
*/
|
|
@@ -1332,19 +1352,19 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
1332
1352
|
sheetId,
|
|
1333
1353
|
cellBackgroundColor,
|
|
1334
1354
|
gridLineWidth,
|
|
1355
|
+
frozenRows,
|
|
1356
|
+
frozenColumns,
|
|
1335
1357
|
getCanvasLayers,
|
|
1336
1358
|
getRowHeaderCanvasLayer,
|
|
1337
1359
|
getColumnHeaderCanvasLayer,
|
|
1338
|
-
getCellOffsetFromCoords,
|
|
1339
1360
|
getR1C1AddressFromSelection,
|
|
1340
1361
|
getSheetName,
|
|
1341
1362
|
getScrollPosition,
|
|
1342
|
-
getViewPort,
|
|
1343
1363
|
getRowOffset,
|
|
1344
1364
|
getColumnOffset,
|
|
1345
1365
|
getSheetDimensions,
|
|
1366
|
+
getGridDimensions,
|
|
1346
1367
|
scrollTo,
|
|
1347
|
-
scrollToCell,
|
|
1348
1368
|
scale,
|
|
1349
1369
|
onChangeScale,
|
|
1350
1370
|
});
|
|
@@ -1877,6 +1897,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
1877
1897
|
// Measure with the same font the painter draws with (#1117).
|
|
1878
1898
|
fontFamily: defaultFontFamily,
|
|
1879
1899
|
fontSize: defaultFontSize,
|
|
1900
|
+
lineHeightMode,
|
|
1880
1901
|
resizeStrategy: "full",
|
|
1881
1902
|
});
|
|
1882
1903
|
/**
|
|
@@ -2400,10 +2421,12 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2400
2421
|
focus: focusSheet,
|
|
2401
2422
|
scrollToCell,
|
|
2402
2423
|
isMergedCell,
|
|
2403
|
-
|
|
2424
|
+
// A readonly grid gets no write handler: a fill-handle drag or a
|
|
2425
|
+
// selection drag-move then changes nothing, whatever started the gesture.
|
|
2426
|
+
onFill: readonly ? undefined : onFill,
|
|
2404
2427
|
onFillHandleRelease: handleFillHandleRelease,
|
|
2405
|
-
onFillShrink: handleFillShrink,
|
|
2406
|
-
onMoveSelection,
|
|
2428
|
+
onFillShrink: readonly ? undefined : handleFillShrink,
|
|
2429
|
+
onMoveSelection: readonly ? undefined : onMoveSelection,
|
|
2407
2430
|
onInsertCutCells,
|
|
2408
2431
|
confirmMoveOverwrite,
|
|
2409
2432
|
isHiddenColumn,
|
|
@@ -2422,6 +2445,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2422
2445
|
activeCell,
|
|
2423
2446
|
selections,
|
|
2424
2447
|
sheetId,
|
|
2448
|
+
readonly,
|
|
2425
2449
|
focusSheet,
|
|
2426
2450
|
onPaste,
|
|
2427
2451
|
onCopy,
|
|
@@ -2662,6 +2686,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
2662
2686
|
showValidationAlert,
|
|
2663
2687
|
selections,
|
|
2664
2688
|
onChangeBatch,
|
|
2689
|
+
batchHistory,
|
|
2665
2690
|
formulaLocale,
|
|
2666
2691
|
});
|
|
2667
2692
|
/**
|
|
@@ -3065,14 +3090,15 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3065
3090
|
selectionTopBound,
|
|
3066
3091
|
showHeaderMenuButton,
|
|
3067
3092
|
scale,
|
|
3068
|
-
|
|
3093
|
+
// Column widths and row heights are sheet writes too
|
|
3094
|
+
onResize: readonly ? undefined : onResize,
|
|
3069
3095
|
focusSheet,
|
|
3070
3096
|
isRowHeader,
|
|
3071
3097
|
isColumnHeader,
|
|
3072
3098
|
isHiddenColumn,
|
|
3073
3099
|
containerWidth: width - scrollbarSize,
|
|
3074
3100
|
containerHeight: height - scrollbarSize,
|
|
3075
|
-
onAutoFit: handleAutoFit,
|
|
3101
|
+
onAutoFit: readonly ? undefined : handleAutoFit,
|
|
3076
3102
|
backgroundColor: selectionBorderColor,
|
|
3077
3103
|
sheetId,
|
|
3078
3104
|
selectedRowHeadersIds,
|
|
@@ -3580,6 +3606,7 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3580
3606
|
onCheckboxClick: handleCheckboxClick,
|
|
3581
3607
|
onExpandCollapse: handleExpandCollapse,
|
|
3582
3608
|
defaultFontSizePoint: defaultFontSize,
|
|
3609
|
+
lineHeightMode,
|
|
3583
3610
|
Cell,
|
|
3584
3611
|
HeaderCell,
|
|
3585
3612
|
theme,
|
|
@@ -3653,8 +3680,10 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
3653
3680
|
* Hide fill handle
|
|
3654
3681
|
* 1. When user is in edit mode
|
|
3655
3682
|
* 2. When user is in formula mode and user has made selections
|
|
3683
|
+
* 3. When the grid is readonly — a fill is a write
|
|
3656
3684
|
*/
|
|
3657
|
-
const showFillHandle = !
|
|
3685
|
+
const showFillHandle = !readonly &&
|
|
3686
|
+
!isSelectionInProgress &&
|
|
3658
3687
|
!isEditInProgress &&
|
|
3659
3688
|
!isResizingTable &&
|
|
3660
3689
|
!(formulaMode && formulaSelections.length);
|
|
@@ -4108,12 +4137,14 @@ function CanvasGridComponent(props, forwardedRef) {
|
|
|
4108
4137
|
popoverComponent,
|
|
4109
4138
|
popoverRange,
|
|
4110
4139
|
cellExpandComponent,
|
|
4140
|
+
arrowComponents,
|
|
4111
4141
|
});
|
|
4112
4142
|
/**
|
|
4113
4143
|
* Only enable selection drag if user is not editing and not
|
|
4114
|
-
* in formula mode
|
|
4144
|
+
* in formula mode. A readonly grid has nothing to move, so the
|
|
4145
|
+
* gesture does not start at all (no move cursor, no selection jump).
|
|
4115
4146
|
*/
|
|
4116
|
-
const enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
|
|
4147
|
+
const enableSelectionDrag = !readonly && !isSelectionInProgress && !isEditInProgress && !formulaMode;
|
|
4117
4148
|
// A chartsheet IS its chart: no grid, headers, editor or cell menus — only the chart and its
|
|
4118
4149
|
// context menu (Excel).
|
|
4119
4150
|
if (sheetType === "chartsheet") {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CalculatorFunction } from "@rowsncolumns/common-types";
|
|
2
2
|
import type { FormulaResult } from "@rowsncolumns/fast-formula-parser";
|
|
3
|
-
import type { Align, AreaStyle, CellInterface, CellPosition, Direction, GridProps, GridRange, GridRef, OptionalCellInterface, ScrollCoords, SelectionArea, Style, ViewPortProps } from "@rowsncolumns/grid";
|
|
3
|
+
import type { Align, AreaStyle, CellInterface, CellPosition, Direction, GridProps, GridRange, GridRef, LineHeightMode, OptionalCellInterface, ScrollCoords, SelectionArea, Style, ViewPortProps } from "@rowsncolumns/grid";
|
|
4
4
|
import type { Mention, MentionTagComponentProps, OptionItem, ProseMirrorEditorProps, TextFormatRun } from "@rowsncolumns/ui";
|
|
5
5
|
import type { FormulaLocale, FormulaLocaleInput } from "@rowsncolumns/utils";
|
|
6
6
|
import type { CellDiff } from "@rowsncolumns/version-comparison";
|
|
@@ -231,6 +231,14 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
|
|
|
231
231
|
* Default row height
|
|
232
232
|
*/
|
|
233
233
|
defaultRowHeight?: number;
|
|
234
|
+
/**
|
|
235
|
+
* Where the height of one line of cell text comes from, for both the
|
|
236
|
+
* painter and row auto-fit. `fontMetrics` (default) measures each font's
|
|
237
|
+
* bounding box (`fontBoundingBoxAscent + fontBoundingBoxDescent`) once
|
|
238
|
+
* and stacks lines with Excel's 2px leading, so wrapped rows fit like
|
|
239
|
+
* Excel's; `fixed` keeps the pre-#1141 `fontSize * 1.2` line box.
|
|
240
|
+
*/
|
|
241
|
+
lineHeightMode?: LineHeightMode;
|
|
234
242
|
/**
|
|
235
243
|
* Default column width
|
|
236
244
|
*/
|
|
@@ -1277,6 +1285,15 @@ export type CanvasGridProps<T extends CellData = CellData<any, any>> = {
|
|
|
1277
1285
|
* User tries to redo an action
|
|
1278
1286
|
*/
|
|
1279
1287
|
onRedo?(): void;
|
|
1288
|
+
/**
|
|
1289
|
+
* Run `action` with every write it issues recorded as ONE undo entry — the `batchHistory` of
|
|
1290
|
+
* `useSpreadsheetState` / `useSpreadsheetEngine`, so a host spreading its state into the grid
|
|
1291
|
+
* passes it for free. The grid uses it for gestures that are one step in Excel but several writes
|
|
1292
|
+
* here: Ctrl+Enter commits the active cell through `onChange` and spreads the entry into the rest
|
|
1293
|
+
* of the selection through `onChangeBatch`, one call per rectangle. Without it each write is its
|
|
1294
|
+
* own undo entry.
|
|
1295
|
+
*/
|
|
1296
|
+
batchHistory?<R>(action: () => R): R;
|
|
1280
1297
|
/**
|
|
1281
1298
|
* Callback when user paste a set of cells
|
|
1282
1299
|
* @param e Browser event
|