@rowsncolumns/spreadsheet-state 28.0.74 → 28.0.75
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/api/datatype.d.ts.map +1 -1
- package/dist/cjs/api/datatype.js +8 -1
- package/dist/cjs/api/fill-series-spec.d.ts +35 -0
- package/dist/cjs/api/fill-series-spec.d.ts.map +1 -0
- package/dist/cjs/api/fill-series-spec.js +164 -0
- package/dist/cjs/api/fill.d.ts +95 -3
- package/dist/cjs/api/fill.d.ts.map +1 -1
- package/dist/cjs/api/fill.js +1186 -418
- package/dist/cjs/api/immer-utils.d.ts.map +1 -1
- package/dist/cjs/api/immer-utils.js +20 -15
- package/dist/cjs/api/intl.d.ts.map +1 -1
- package/dist/cjs/api/paint-format.d.ts +15 -1
- package/dist/cjs/api/paint-format.d.ts.map +1 -1
- package/dist/cjs/api/paint-format.js +69 -10
- package/dist/cjs/commands.d.ts +11 -1
- package/dist/cjs/commands.d.ts.map +1 -1
- package/dist/cjs/hooks/use-calculation.d.ts +1 -1
- package/dist/cjs/hooks/use-on-fill.d.ts +13 -4
- package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/cjs/hooks/use-on-fill.js +28 -7
- package/dist/cjs/hooks/use-paint-format.d.ts.map +1 -1
- package/dist/cjs/hooks/use-paint-format.js +10 -7
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/cjs/hooks/use-spreadsheet-state.js +12 -1
- package/dist/cjs/interface/apply-fill.d.ts +3 -3
- package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
- package/dist/cjs/interface/apply-fill.js +100 -53
- package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/cjs/sheet-cell.d.ts.map +1 -1
- package/dist/cjs/sheet-cell.js +30 -6
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/api/datatype.d.ts.map +1 -1
- package/dist/esm/api/datatype.js +8 -1
- package/dist/esm/api/fill-series-spec.d.ts +35 -0
- package/dist/esm/api/fill-series-spec.d.ts.map +1 -0
- package/dist/esm/api/fill-series-spec.js +160 -0
- package/dist/esm/api/fill.d.ts +95 -3
- package/dist/esm/api/fill.d.ts.map +1 -1
- package/dist/esm/api/fill.js +1158 -418
- package/dist/esm/api/immer-utils.d.ts.map +1 -1
- package/dist/esm/api/immer-utils.js +20 -15
- package/dist/esm/api/intl.d.ts.map +1 -1
- package/dist/esm/api/paint-format.d.ts +15 -1
- package/dist/esm/api/paint-format.d.ts.map +1 -1
- package/dist/esm/api/paint-format.js +46 -1
- package/dist/esm/commands.d.ts +11 -1
- package/dist/esm/commands.d.ts.map +1 -1
- package/dist/esm/hooks/use-calculation.d.ts +1 -1
- package/dist/esm/hooks/use-on-fill.d.ts +13 -4
- package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
- package/dist/esm/hooks/use-on-fill.js +24 -4
- package/dist/esm/hooks/use-paint-format.d.ts.map +1 -1
- package/dist/esm/hooks/use-paint-format.js +10 -7
- package/dist/esm/hooks/use-spreadsheet-state.d.ts +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
- package/dist/esm/hooks/use-spreadsheet-state.js +12 -1
- package/dist/esm/interface/apply-fill.d.ts +3 -3
- package/dist/esm/interface/apply-fill.d.ts.map +1 -1
- package/dist/esm/interface/apply-fill.js +93 -48
- package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
- package/dist/esm/sheet-cell.d.ts.map +1 -1
- package/dist/esm/sheet-cell.js +30 -6
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +10 -10
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Direction } from "@rowsncolumns/common-types";
|
|
2
2
|
import { selectionFromActiveCell } from "@rowsncolumns/utils";
|
|
3
3
|
import { produceWithPatches } from "immer";
|
|
4
|
+
import { FILL_UNTOUCHED } from "../api/fill";
|
|
4
5
|
import { createSheetCellIdentifier } from "../api/formula";
|
|
5
6
|
import { createSheetDraft } from "../api/immer-utils";
|
|
6
7
|
import { defaultCellCoords, defaultSheetId, SheetCell } from "../sheet-cell";
|
|
7
8
|
import { getFillDirection } from "./../api/selection";
|
|
8
9
|
import { collectDataValidationTarget, extendDataValidationRanges, } from "./data-validation-utils";
|
|
9
|
-
export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDataValidationById, getCellData, getEffectiveValue, getFormattedValue, getAutoFillValues, getSheetName, enqueueCalculation, enqueueStructureChange, onChangeSheetData, createHistory, onChangeDataValidations, }) => {
|
|
10
|
+
export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDataValidationById, getCellData, getEffectiveValue, getFormattedValue, getAutoFillValues, getSheetName, enqueueCalculation, enqueueStructureChange, onChangeSheetData, createHistory, onChangeDataValidations, getMerges, onFillMerges, }) => {
|
|
10
11
|
return async (
|
|
11
12
|
// Active sheet ID
|
|
12
13
|
sheetId,
|
|
@@ -17,7 +18,9 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
17
18
|
// Current selections of the user
|
|
18
19
|
selections, fillableSelections,
|
|
19
20
|
// Fill type - if not specified, will auto-detect
|
|
20
|
-
fillType
|
|
21
|
+
fillType,
|
|
22
|
+
// Ctrl/Cmd toggle held on the fill handle and/or Series-dialog parameters
|
|
23
|
+
options) => {
|
|
21
24
|
const finalSelections = selections.length
|
|
22
25
|
? selections
|
|
23
26
|
: selectionFromActiveCell(activeCell);
|
|
@@ -41,12 +44,47 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
41
44
|
locale,
|
|
42
45
|
cellXfsRegistry,
|
|
43
46
|
getDataValidationById,
|
|
44
|
-
|
|
47
|
+
merges: getMerges?.(sheetId),
|
|
48
|
+
fillType: fillType ?? options?.fillType,
|
|
49
|
+
modifier: options?.modifier,
|
|
50
|
+
series: options?.series,
|
|
45
51
|
});
|
|
52
|
+
// A merged seed snaps the fill extent to whole blocks — that is the area written (and the
|
|
53
|
+
// selection left behind); the drag's raw extent only feeds the cache invalidation below.
|
|
54
|
+
const targetBounds = fillValues.snappedFillBounds ?? fillBounds;
|
|
55
|
+
const filledArea = direction === Direction.Down
|
|
56
|
+
? {
|
|
57
|
+
startRowIndex: selection.range.endRowIndex + 1,
|
|
58
|
+
endRowIndex: targetBounds.endRowIndex,
|
|
59
|
+
startColumnIndex: selection.range.startColumnIndex,
|
|
60
|
+
endColumnIndex: selection.range.endColumnIndex,
|
|
61
|
+
}
|
|
62
|
+
: direction === Direction.Up
|
|
63
|
+
? {
|
|
64
|
+
startRowIndex: targetBounds.startRowIndex,
|
|
65
|
+
endRowIndex: selection.range.startRowIndex - 1,
|
|
66
|
+
startColumnIndex: selection.range.startColumnIndex,
|
|
67
|
+
endColumnIndex: selection.range.endColumnIndex,
|
|
68
|
+
}
|
|
69
|
+
: direction === Direction.Right
|
|
70
|
+
? {
|
|
71
|
+
startRowIndex: selection.range.startRowIndex,
|
|
72
|
+
endRowIndex: selection.range.endRowIndex,
|
|
73
|
+
startColumnIndex: selection.range.endColumnIndex + 1,
|
|
74
|
+
endColumnIndex: targetBounds.endColumnIndex,
|
|
75
|
+
}
|
|
76
|
+
: {
|
|
77
|
+
startRowIndex: selection.range.startRowIndex,
|
|
78
|
+
endRowIndex: selection.range.endRowIndex,
|
|
79
|
+
startColumnIndex: targetBounds.startColumnIndex,
|
|
80
|
+
endColumnIndex: selection.range.startColumnIndex - 1,
|
|
81
|
+
};
|
|
46
82
|
// Sample cell
|
|
47
83
|
const sheetCell = new SheetCell(defaultSheetId, defaultCellCoords, undefined, { locale, cellXfsRegistry, getDataValidationById });
|
|
48
84
|
const getFillValue = (rowIndex, columnIndex) => {
|
|
49
|
-
const fillValue = fillValues[rowIndex][columnIndex];
|
|
85
|
+
const fillValue = fillValues[rowIndex]?.[columnIndex];
|
|
86
|
+
if (fillValue === FILL_UNTOUCHED)
|
|
87
|
+
return FILL_UNTOUCHED;
|
|
50
88
|
if (typeof fillValue !== "object") {
|
|
51
89
|
sheetCell.setUserEnteredValue(fillValue);
|
|
52
90
|
sharedStringRegistry?.registerCell(sheetCell);
|
|
@@ -55,6 +93,37 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
55
93
|
}
|
|
56
94
|
return fillValue;
|
|
57
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* Write one cell of the fill into the draft and register it for validation, recalculation and
|
|
98
|
+
* history — the single write path for filled targets and rewritten seeds.
|
|
99
|
+
*/
|
|
100
|
+
const writeCell = (draft, rowIndex, columnIndex, cellData) => {
|
|
101
|
+
const newSheet = createSheetDraft(draft, sheetId, rowIndex);
|
|
102
|
+
newSheet[rowIndex].values[columnIndex] = cellData;
|
|
103
|
+
collectDataValidationTarget(dataValidationTargets, sheetId, rowIndex, columnIndex, cellData);
|
|
104
|
+
enqueueCalculation({
|
|
105
|
+
position: { rowIndex, columnIndex, sheetId },
|
|
106
|
+
type: "add",
|
|
107
|
+
force: true,
|
|
108
|
+
});
|
|
109
|
+
recalcCells.set(createSheetCellIdentifier(sheetId, rowIndex, columnIndex), {
|
|
110
|
+
rowIndex,
|
|
111
|
+
columnIndex,
|
|
112
|
+
sheetId,
|
|
113
|
+
force: true,
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Write the fill value at `[rollingRowIndex][rollingColumnIndex]` into the target cell. A
|
|
118
|
+
* Series-dialog `stop` reached before the selection's end marks the target untouched — Excel
|
|
119
|
+
* writes nothing there, so neither do we.
|
|
120
|
+
*/
|
|
121
|
+
const writeFilledCell = (draft, rowIndex, columnIndex, rollingRowIndex, rollingColumnIndex) => {
|
|
122
|
+
const cellData = getFillValue(rollingRowIndex, rollingColumnIndex);
|
|
123
|
+
if (cellData === FILL_UNTOUCHED)
|
|
124
|
+
return;
|
|
125
|
+
writeCell(draft, rowIndex, columnIndex, cellData);
|
|
126
|
+
};
|
|
58
127
|
// Fill writes through `onChangeSheetData` directly. The calculator
|
|
59
128
|
// only invalidates `rangeCache` for cells it recomputes, so the
|
|
60
129
|
// freshly-filled positions stay cached until we tell it otherwise.
|
|
@@ -74,7 +143,7 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
74
143
|
switch (direction) {
|
|
75
144
|
case Direction.Down: {
|
|
76
145
|
const start = selection.range.endRowIndex + 1;
|
|
77
|
-
const end =
|
|
146
|
+
const end = targetBounds.endRowIndex;
|
|
78
147
|
let counter = 0;
|
|
79
148
|
for (let i = start; i <= end; i++) {
|
|
80
149
|
let rowIndex = selection.range.startRowIndex + counter;
|
|
@@ -85,16 +154,7 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
85
154
|
const rollingRowIndex = i - start;
|
|
86
155
|
for (let columnIndex = selection.range.startColumnIndex; columnIndex <= selection.range.endColumnIndex; columnIndex++) {
|
|
87
156
|
const rollingColumnIndex = columnIndex - selection.range.startColumnIndex;
|
|
88
|
-
|
|
89
|
-
const newCellData = getFillValue(rollingRowIndex, rollingColumnIndex);
|
|
90
|
-
newSheet[i].values[columnIndex] = newCellData;
|
|
91
|
-
collectDataValidationTarget(dataValidationTargets, sheetId, i, columnIndex, newCellData);
|
|
92
|
-
enqueueCalculation({
|
|
93
|
-
position: { rowIndex: i, columnIndex, sheetId },
|
|
94
|
-
type: "add",
|
|
95
|
-
force: true,
|
|
96
|
-
});
|
|
97
|
-
recalcCells.set(createSheetCellIdentifier(sheetId, i, columnIndex), { rowIndex: i, columnIndex, sheetId, force: true });
|
|
157
|
+
writeFilledCell(draft, i, columnIndex, rollingRowIndex, rollingColumnIndex);
|
|
98
158
|
}
|
|
99
159
|
counter++;
|
|
100
160
|
}
|
|
@@ -102,20 +162,12 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
102
162
|
}
|
|
103
163
|
case Direction.Up: {
|
|
104
164
|
const start = selection.range.startRowIndex - 1;
|
|
105
|
-
const end =
|
|
165
|
+
const end = targetBounds.startRowIndex;
|
|
106
166
|
for (let i = start; i >= end; i--) {
|
|
107
|
-
const rollingRowIndex = i -
|
|
167
|
+
const rollingRowIndex = i - targetBounds.startRowIndex;
|
|
108
168
|
for (let columnIndex = selection.range.startColumnIndex; columnIndex <= selection.range.endColumnIndex; columnIndex++) {
|
|
109
169
|
const rollingColumnIndex = columnIndex - selection.range.startColumnIndex;
|
|
110
|
-
|
|
111
|
-
newSheet[i].values[columnIndex] = getFillValue(rollingRowIndex, rollingColumnIndex);
|
|
112
|
-
collectDataValidationTarget(dataValidationTargets, sheetId, i, columnIndex, newSheet[i].values[columnIndex]);
|
|
113
|
-
enqueueCalculation({
|
|
114
|
-
position: { rowIndex: i, columnIndex, sheetId },
|
|
115
|
-
type: "add",
|
|
116
|
-
force: true,
|
|
117
|
-
});
|
|
118
|
-
recalcCells.set(createSheetCellIdentifier(sheetId, i, columnIndex), { rowIndex: i, columnIndex, sheetId, force: true });
|
|
170
|
+
writeFilledCell(draft, i, columnIndex, rollingRowIndex, rollingColumnIndex);
|
|
119
171
|
}
|
|
120
172
|
}
|
|
121
173
|
break;
|
|
@@ -123,7 +175,7 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
123
175
|
case Direction.Right: {
|
|
124
176
|
for (let rowIndex = selection.range.startRowIndex; rowIndex <= selection.range.endRowIndex; rowIndex++) {
|
|
125
177
|
const start = selection.range.endColumnIndex + 1;
|
|
126
|
-
const end =
|
|
178
|
+
const end = targetBounds.endColumnIndex;
|
|
127
179
|
let counter = 0;
|
|
128
180
|
const rollingRowIndex = rowIndex - selection.range.startRowIndex;
|
|
129
181
|
for (let j = start; j <= end; j++) {
|
|
@@ -133,15 +185,7 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
133
185
|
columnIndex = selection.range.startColumnIndex;
|
|
134
186
|
}
|
|
135
187
|
const rollingColumnIndex = j - start;
|
|
136
|
-
|
|
137
|
-
newSheet[rowIndex].values[j] = getFillValue(rollingRowIndex, rollingColumnIndex);
|
|
138
|
-
collectDataValidationTarget(dataValidationTargets, sheetId, rowIndex, j, newSheet[rowIndex].values[j]);
|
|
139
|
-
enqueueCalculation({
|
|
140
|
-
position: { rowIndex, columnIndex: j, sheetId },
|
|
141
|
-
type: "add",
|
|
142
|
-
force: true,
|
|
143
|
-
});
|
|
144
|
-
recalcCells.set(createSheetCellIdentifier(sheetId, rowIndex, j), { rowIndex, columnIndex: j, sheetId, force: true });
|
|
188
|
+
writeFilledCell(draft, rowIndex, j, rollingRowIndex, rollingColumnIndex);
|
|
145
189
|
counter++;
|
|
146
190
|
}
|
|
147
191
|
}
|
|
@@ -150,7 +194,7 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
150
194
|
case Direction.Left: {
|
|
151
195
|
for (let rowIndex = selection.range.startRowIndex; rowIndex <= selection.range.endRowIndex; rowIndex++) {
|
|
152
196
|
const start = selection.range.startColumnIndex - 1;
|
|
153
|
-
const end =
|
|
197
|
+
const end = targetBounds.startColumnIndex;
|
|
154
198
|
const rollingRowIndex = rowIndex - selection.range.startRowIndex;
|
|
155
199
|
let counter = 0;
|
|
156
200
|
for (let j = start; j >= end; j--) {
|
|
@@ -159,22 +203,18 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
159
203
|
counter = 0;
|
|
160
204
|
columnIndex = selection.range.endColumnIndex;
|
|
161
205
|
}
|
|
162
|
-
const rollingColumnIndex = j -
|
|
163
|
-
|
|
164
|
-
newSheet[rowIndex].values[j] = getFillValue(rollingRowIndex, rollingColumnIndex);
|
|
165
|
-
collectDataValidationTarget(dataValidationTargets, sheetId, rowIndex, j, newSheet[rowIndex].values[j]);
|
|
166
|
-
enqueueCalculation({
|
|
167
|
-
position: { rowIndex, columnIndex: j, sheetId },
|
|
168
|
-
type: "add",
|
|
169
|
-
force: true,
|
|
170
|
-
});
|
|
171
|
-
recalcCells.set(createSheetCellIdentifier(sheetId, rowIndex, j), { rowIndex, columnIndex: j, sheetId, force: true });
|
|
206
|
+
const rollingColumnIndex = j - targetBounds.startColumnIndex;
|
|
207
|
+
writeFilledCell(draft, rowIndex, j, rollingRowIndex, rollingColumnIndex);
|
|
172
208
|
counter--;
|
|
173
209
|
}
|
|
174
210
|
}
|
|
175
211
|
break;
|
|
176
212
|
}
|
|
177
213
|
}
|
|
214
|
+
// Series-dialog Trend: the seed cells Excel replaces with the fitted values.
|
|
215
|
+
for (const seed of fillValues.seedCells ?? []) {
|
|
216
|
+
writeCell(draft, seed.rowIndex, seed.columnIndex, seed.cell);
|
|
217
|
+
}
|
|
178
218
|
});
|
|
179
219
|
// Save history
|
|
180
220
|
saveHistory({
|
|
@@ -184,12 +224,17 @@ export const applyFill = ({ locale, cellXfsRegistry, sharedStringRegistry, getDa
|
|
|
184
224
|
activeCell: { undo: activeCell, redo: activeCell },
|
|
185
225
|
selections: {
|
|
186
226
|
undo: fillableSelections ?? selections,
|
|
187
|
-
redo: [fillSelection],
|
|
227
|
+
redo: [{ ...fillSelection, range: targetBounds }],
|
|
188
228
|
},
|
|
189
229
|
});
|
|
190
230
|
extendDataValidationRanges(dataValidationTargets, onChangeDataValidations, saveHistory);
|
|
191
231
|
sharedStringRegistry?.getPatches(saveHistory);
|
|
192
232
|
return nextState;
|
|
193
233
|
});
|
|
234
|
+
// A merged seed replicates its block shape over the filled area (Excel).
|
|
235
|
+
const fillMerges = fillValues.fillMerges;
|
|
236
|
+
if (fillMerges?.length) {
|
|
237
|
+
onFillMerges?.(sheetId, activeCell, filledArea, fillMerges, targetBounds);
|
|
238
|
+
}
|
|
194
239
|
};
|
|
195
240
|
};
|
|
@@ -212,7 +212,7 @@ export declare class Spreadsheet<T extends CellData = CellData, S extends Sheet
|
|
|
212
212
|
* @param variableName
|
|
213
213
|
* @returns
|
|
214
214
|
*/
|
|
215
|
-
getSelectionFromNamedRange: (variableName: string) => string | number | boolean | import("@rowsncolumns/common-types").HyperlinkResult | import("@rowsncolumns/common-types").SparkLineResult | import("@rowsncolumns/common-types").ImageResult | import("@rowsncolumns/common-types").ExtensibleStructuredResult |
|
|
215
|
+
getSelectionFromNamedRange: (variableName: string) => string | number | boolean | Date | import("@rowsncolumns/common-types").HyperlinkResult | import("@rowsncolumns/common-types").SparkLineResult | import("@rowsncolumns/common-types").ImageResult | import("@rowsncolumns/common-types").ExtensibleStructuredResult | FormulaError | import("@rowsncolumns/fast-formula-parser").FormulaResultArray | import("@rowsncolumns/fast-formula-parser").RecursiveFormula | import("@rowsncolumns/calculator").DataSource | {
|
|
216
216
|
range: SheetRange;
|
|
217
217
|
sheetName: string | undefined;
|
|
218
218
|
} | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet-cell.d.ts","sourceRoot":"","sources":["../../sheet-cell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,SAAS,EACT,cAAc,EACf,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EACV,MAAM,EACN,OAAO,EACP,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA2BtD,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAuBnC,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"sheet-cell.d.ts","sourceRoot":"","sources":["../../sheet-cell.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/sheet-cell.js
CHANGED
|
@@ -7,7 +7,7 @@ import { isDataValidationFormulaRule } from "./api/data-validation";
|
|
|
7
7
|
import { checkBooleanRule } from "./api/validation";
|
|
8
8
|
import { createFormattedValue, createNumberValue, detectNumberFormatPattern, detectNumberFormatType, detectValueType, detectValueTypeAndPattern, isMultiline, isNumber, isValidURLorEmail, } from "./api/datatype";
|
|
9
9
|
import { changeDecimals, getDecimalPlaces, pattern_number, pattern_number_thousands, } from "./api/decimals";
|
|
10
|
-
import { formulaToRelativeReference, updateColumnName, updateNamedRangeName, updateSheetName, } from "./api/formula";
|
|
10
|
+
import { ERROR_REFERENCE, formulaToRelativeReference, updateColumnName, updateNamedRangeName, updateSheetName, } from "./api/formula";
|
|
11
11
|
import { getLocaleSeparators } from "./api/intl";
|
|
12
12
|
import { AWAITING_CALCULATION } from "./helpers";
|
|
13
13
|
export const defaultSheetId = 1;
|
|
@@ -65,6 +65,14 @@ const hasGeneralPattern = (format) => !format.pattern || format.pattern === "Gen
|
|
|
65
65
|
* format is preserved as-is.
|
|
66
66
|
*/
|
|
67
67
|
const isGeneralNumberFormat = (format) => !format || (hasGeneralType(format) && hasGeneralPattern(format));
|
|
68
|
+
/**
|
|
69
|
+
* The explicit "General" format (Excel numFmtId 0). Written when the user
|
|
70
|
+
* picks General so the cell stops deriving a format from its formula.
|
|
71
|
+
*/
|
|
72
|
+
const GENERAL_NUMBER_FORMAT = {
|
|
73
|
+
type: "GENERAL",
|
|
74
|
+
pattern: "General",
|
|
75
|
+
};
|
|
68
76
|
const stripExcelTextPrefix = (value) => value.slice(1);
|
|
69
77
|
const getHyperlinkTarget = (hyperlink) => {
|
|
70
78
|
if (typeof hyperlink === "string") {
|
|
@@ -495,6 +503,13 @@ export class SheetCell {
|
|
|
495
503
|
catch (err) {
|
|
496
504
|
console.log("Error moving formula", err, this.formula, from, to);
|
|
497
505
|
if (err instanceof FormulaError) {
|
|
506
|
+
// A relative reference pushed off the grid has no address: Excel writes the `#REF!`
|
|
507
|
+
// token into the formula itself (`=A2` filled left from B2 becomes `=#REF!`). The error
|
|
508
|
+
// carries that rewritten text — keeping the unshifted source would leave a formula that
|
|
509
|
+
// silently references the wrong (here: its own) cell.
|
|
510
|
+
if (err.message === ERROR_REFERENCE && typeof err.details === "string") {
|
|
511
|
+
this.userEnteredValue = { fv: err.details };
|
|
512
|
+
}
|
|
498
513
|
this.effectiveValue = {
|
|
499
514
|
ev: {
|
|
500
515
|
type: "Error",
|
|
@@ -1461,25 +1476,34 @@ export class SheetCell {
|
|
|
1461
1476
|
}
|
|
1462
1477
|
setNumberFormat(value) {
|
|
1463
1478
|
const previousFormatType = this.userEnteredFormat?.numberFormat?.type;
|
|
1464
|
-
|
|
1479
|
+
// A nullish patch means "the user chose General" (the toolbar's General
|
|
1480
|
+
// item, programmatic callers). Persist it as the explicit General
|
|
1481
|
+
// sentinel rather than deleting the slot: with NO `numberFormat` a
|
|
1482
|
+
// formula cell keeps deriving its format from the formula (`=DATE()` →
|
|
1483
|
+
// date), so General could never win over the derived date. Excel stamps
|
|
1484
|
+
// numFmtId 0 and shows the serial. `isGeneralNumberFormat` still treats
|
|
1485
|
+
// the sentinel as General, so typed input keeps auto-formatting.
|
|
1486
|
+
const numberFormat = value ?? { ...GENERAL_NUMBER_FORMAT };
|
|
1487
|
+
const numberFormatType = numberFormat.type;
|
|
1465
1488
|
const hasUserEnteredValue = this.getUserEnteredValue() !== undefined;
|
|
1466
1489
|
if (!isNil(this.sharedStringIndex) &&
|
|
1467
1490
|
numberFormatType &&
|
|
1468
|
-
numberFormatType !== "TEXT"
|
|
1491
|
+
numberFormatType !== "TEXT" &&
|
|
1492
|
+
numberFormatType !== "GENERAL") {
|
|
1469
1493
|
return;
|
|
1470
1494
|
}
|
|
1471
|
-
set(this, "userEnteredFormat.numberFormat",
|
|
1495
|
+
set(this, "userEnteredFormat.numberFormat", numberFormat);
|
|
1472
1496
|
const effectiveValue = this.getEffectiveValue();
|
|
1473
1497
|
if (effectiveValue === null || effectiveValue === undefined) {
|
|
1474
1498
|
return;
|
|
1475
1499
|
}
|
|
1476
1500
|
if (numberFormatType === "TEXT") {
|
|
1477
1501
|
const userValue = this.getUserEnteredValue();
|
|
1478
|
-
this.formatAsText(userValue ?? effectiveValue,
|
|
1502
|
+
this.formatAsText(userValue ?? effectiveValue, numberFormat, !hasUserEnteredValue);
|
|
1479
1503
|
}
|
|
1480
1504
|
else {
|
|
1481
1505
|
const preserveUserEnteredText = previousFormatType === "TEXT";
|
|
1482
|
-
this.formatAsNumber(effectiveValue,
|
|
1506
|
+
this.formatAsNumber(effectiveValue, numberFormat, preserveUserEnteredText, !hasUserEnteredValue);
|
|
1483
1507
|
}
|
|
1484
1508
|
}
|
|
1485
1509
|
formatAsText(effectiveValue, numberFormat, keepUserEnteredUnset = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../cellxfs-registry.ts","../../commands.ts","../../generated-names.ts","../../helpers.ts","../../index.ts","../../server-utils.ts","../../server.browser.ts","../../server.ts","../../shared-string-registry.ts","../../sheet-cell.ts","../../test-setup.ts","../../types.ts","../../vitest.config.ts","../../api/advanced-filter.ts","../../api/border.ts","../../api/conditional-format.ts","../../api/copy-paste.ts","../../api/data-validation.ts","../../api/datatype.ts","../../api/date.ts","../../api/decimals.ts","../../api/dependency.ts","../../api/fill.ts","../../api/filter-range.ts","../../api/filter.ts","../../api/format-caches.ts","../../api/formula.ts","../../api/goal-seek.ts","../../api/immer-utils.ts","../../api/intl.ts","../../api/merges.ts","../../api/outline.ts","../../api/paint-format.ts","../../api/parse-html.ts","../../api/paste-special.ts","../../api/patches.ts","../../api/pivot-range.ts","../../api/range-rule-helpers.ts","../../api/range.ts","../../api/rename-sheet.ts","../../api/selection.ts","../../api/sort.ts","../../api/split-text.ts","../../api/structural-formula-update.ts","../../api/subtotal.ts","../../api/table.ts","../../api/validation.ts","../../api/xlsx-source.ts","../../atoms/delete-sheet-atom.ts","../../atoms/dialog-state.atom.ts","../../atoms/editing-data-validation-id.atom.ts","../../atoms/editing-embed.atom.ts","../../atoms/editing-table.atom.ts","../../atoms/error-state.atom.ts","../../atoms/index.ts","../../atoms/insert-image-state.atom.ts","../../atoms/named-range.atom.ts","../../atoms/resize-dimension.atom.ts","../../atoms/sheet-observer.atom.ts","../../components/index.tsx","../../components/dialogs/delete-sheet-confirmation.tsx","../../components/dialogs/error-state.tsx","../../components/editors/cell-format-editor.tsx","../../components/editors/conditional-format-editor.tsx","../../components/editors/conditional-format-rule-editor.tsx","../../components/editors/data-validation-editor.tsx","../../components/editors/data-validation-rule-editor.tsx","../../components/editors/embed-editor.tsx","../../components/editors/insert-image-editor.tsx","../../components/editors/insert-link-editor.tsx","../../components/editors/named-range-editor.tsx","../../components/editors/resize-dimension-editor.tsx","../../components/editors/sheet-filter.tsx","../../components/editors/table-editor.tsx","../../helpers/iterative-calculation.ts","../../helpers/sheet-title.ts","../../hooks/use-async-datasource.ts","../../hooks/use-calculation-initialize.ts","../../hooks/use-calculation-process-array.ts","../../hooks/use-calculation-queue.ts","../../hooks/use-calculation-worker.ts","../../hooks/use-calculation.ts","../../hooks/use-can-edit-cellrange.ts","../../hooks/use-cellxfs-registry.ts","../../hooks/use-citations.ts","../../hooks/use-comments.ts","../../hooks/use-conditional-formatting-rules.ts","../../hooks/use-data-validation-rules.ts","../../hooks/use-deferred-calculation-flush.ts","../../hooks/use-idle-scheduler.ts","../../hooks/use-indent.ts","../../hooks/use-named-range.ts","../../hooks/use-on-adjust-row-height.ts","../../hooks/use-on-advanced-filter.ts","../../hooks/use-on-autoresize.ts","../../hooks/use-on-banded-ranges.ts","../../hooks/use-on-calculation-begin.ts","../../hooks/use-on-calculation-success.ts","../../hooks/use-on-change-batch-stream.ts","../../hooks/use-on-change-batch.ts","../../hooks/use-on-change-calculated-column.ts","../../hooks/use-on-change-decimals.ts","../../hooks/use-on-change-formatting.ts","../../hooks/use-on-change-sheet-tabcolor.ts","../../hooks/use-on-change-table-column.ts","../../hooks/use-on-change-theme.ts","../../hooks/use-on-change.ts","../../hooks/use-on-clear-formatting.ts","../../hooks/use-on-collapse-column-group.ts","../../hooks/use-on-collapse-row-group.ts","../../hooks/use-on-copy.ts","../../hooks/use-on-create-named-range.ts","../../hooks/use-on-create-sheet.ts","../../hooks/use-on-delete-cells-shift-left.ts","../../hooks/use-on-delete-cells-shift-up.ts","../../hooks/use-on-delete-column.ts","../../hooks/use-on-delete-named-range.ts","../../hooks/use-on-delete-row.ts","../../hooks/use-on-delete-sheet.ts","../../hooks/use-on-delete-table-row.ts","../../hooks/use-on-delete.ts","../../hooks/use-on-drag-n-drop.ts","../../hooks/use-on-duplicate-sheet.ts","../../hooks/use-on-embeds.ts","../../hooks/use-on-expand-column-group.ts","../../hooks/use-on-expand-row-group.ts","../../hooks/use-on-fill-range.ts","../../hooks/use-on-fill.ts","../../hooks/use-on-filter-table.ts","../../hooks/use-on-find-replace.ts","../../hooks/use-on-freeze.ts","../../hooks/use-on-goal-seek.ts","../../hooks/use-on-group-columns.ts","../../hooks/use-on-group-rows.ts","../../hooks/use-on-hide-column.ts","../../hooks/use-on-hide-row.ts","../../hooks/use-on-hide-show-sheet.ts","../../hooks/use-on-import-csv-legacy.ts","../../hooks/use-on-import-csv.ts","../../hooks/use-on-import-excel.ts","../../hooks/use-on-insert-autosum.ts","../../hooks/use-on-insert-cells-shift-down.ts","../../hooks/use-on-insert-cells-shift-right.ts","../../hooks/use-on-insert-checkbox.ts","../../hooks/use-on-insert-column.ts","../../hooks/use-on-insert-date-time.ts","../../hooks/use-on-insert-date.ts","../../hooks/use-on-insert-image.ts","../../hooks/use-on-insert-link.ts","../../hooks/use-on-insert-note.ts","../../hooks/use-on-insert-row.ts","../../hooks/use-on-insert-table-row.ts","../../hooks/use-on-insert-time.ts","../../hooks/use-on-locale-change.ts","../../hooks/use-on-merge-unmerge-cells.ts","../../hooks/use-on-move-columns.ts","../../hooks/use-on-move-rows.ts","../../hooks/use-on-move-selection.ts","../../hooks/use-on-move-sheet.ts","../../hooks/use-on-move-table-columns.ts","../../hooks/use-on-paste.ts","../../hooks/use-on-protect-range.ts","../../hooks/use-on-protect-sheet.ts","../../hooks/use-on-remove-duplicates.ts","../../hooks/use-on-rename-sheet.ts","../../hooks/use-on-request-calculate-wrapper.ts","../../hooks/use-on-request-conditional-format.ts","../../hooks/use-on-request-data-validation.ts","../../hooks/use-on-request-define-named-range.ts","../../hooks/use-on-request-delete-sheet.ts","../../hooks/use-on-request-edit-table.ts","../../hooks/use-on-request-format-cells.ts","../../hooks/use-on-request-insert-image.ts","../../hooks/use-on-request-insert-link.ts","../../hooks/use-on-request-resize.ts","../../hooks/use-on-request-update-named-range.ts","../../hooks/use-on-resize-table.ts","../../hooks/use-on-resize.ts","../../hooks/use-on-set-outline-depth.ts","../../hooks/use-on-show-column.ts","../../hooks/use-on-show-row.ts","../../hooks/use-on-sort-column.ts","../../hooks/use-on-sort-range.ts","../../hooks/use-on-sort-table.ts","../../hooks/use-on-subtotal.ts","../../hooks/use-on-table.ts","../../hooks/use-on-trace-dependents-precedents.tsx","../../hooks/use-on-ungroup-columns.ts","../../hooks/use-on-ungroup-rows.ts","../../hooks/use-on-update-named-range.ts","../../hooks/use-on-update-note.ts","../../hooks/use-on-update-sheet.ts","../../hooks/use-paint-format.ts","../../hooks/use-search.ts","../../hooks/use-select-next-prev-sheet.ts","../../hooks/use-sheet-observer.ts","../../hooks/use-sheet-properties.ts","../../hooks/use-sheet-state.ts","../../hooks/use-sheetdata-subscriber.ts","../../hooks/use-slicers.ts","../../hooks/use-split-text-to-columns.ts","../../hooks/use-spreadsheet-state.ts","../../hooks/use-ss-registry.ts","../../hooks/use-structured-reference.ts","../../hooks/use-undo-redo-actions.ts","../../hooks/use-undo-redo.ts","../../hooks/utils/frozen-sort.ts","../../hooks/utils/sort-rows.ts","../../interface/apply-fill.ts","../../interface/auto-resize.ts","../../interface/calculation-interface.ts","../../interface/change-batch-stream.ts","../../interface/change-batch.ts","../../interface/change-border.ts","../../interface/change-calculated-column.ts","../../interface/change-decimals.ts","../../interface/change-formatting.ts","../../interface/change-sheet-tabcolor.ts","../../interface/change-table-column.ts","../../interface/change-theme.ts","../../interface/chart-extensions.ts","../../interface/citations.ts","../../interface/clear-formatting.ts","../../interface/conditional-formatting-rules.ts","../../interface/create-table.ts","../../interface/data-validation-rules.ts","../../interface/data-validation-utils.ts","../../interface/delete-cells-shift-left.ts","../../interface/delete-cells-shift-up.ts","../../interface/delete-cells.ts","../../interface/delete-column.ts","../../interface/delete-row.ts","../../interface/delete-sheet.ts","../../interface/delete-table-column.ts","../../interface/delete-table-row.ts","../../interface/duplicate-sheet.ts","../../interface/embeds.ts","../../interface/freeze.ts","../../interface/helpers.ts","../../interface/hide-column.ts","../../interface/hide-row.ts","../../interface/indent.ts","../../interface/insert-cells-shift-down.ts","../../interface/insert-cells-shift-right.ts","../../interface/insert-column.ts","../../interface/insert-note.ts","../../interface/insert-row.ts","../../interface/insert-table-row.ts","../../interface/interface-cli.ts","../../interface/named-range-operations.ts","../../interface/new-sheet.ts","../../interface/pivot-extensions.ts","../../interface/remove-duplicates.ts","../../interface/remove-table.ts","../../interface/resize-utils.ts","../../interface/resize.ts","../../interface/slicers.ts","../../interface/split-text.ts","../../interface/spreadsheet-interface.ts","../../interface/table-totalrow.ts","../../interface/table-utils.ts","../../interface/update-sheet.ts","../../interface/update-table.ts","../../validation-schema/table.schema.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../cellxfs-registry.ts","../../commands.ts","../../generated-names.ts","../../helpers.ts","../../index.ts","../../server-utils.ts","../../server.browser.ts","../../server.ts","../../shared-string-registry.ts","../../sheet-cell.ts","../../test-setup.ts","../../types.ts","../../vitest.config.ts","../../api/advanced-filter.ts","../../api/border.ts","../../api/conditional-format.ts","../../api/copy-paste.ts","../../api/data-validation.ts","../../api/datatype.ts","../../api/date.ts","../../api/decimals.ts","../../api/dependency.ts","../../api/fill-series-spec.ts","../../api/fill.ts","../../api/filter-range.ts","../../api/filter.ts","../../api/format-caches.ts","../../api/formula.ts","../../api/goal-seek.ts","../../api/immer-utils.ts","../../api/intl.ts","../../api/merges.ts","../../api/outline.ts","../../api/paint-format.ts","../../api/parse-html.ts","../../api/paste-special.ts","../../api/patches.ts","../../api/pivot-range.ts","../../api/range-rule-helpers.ts","../../api/range.ts","../../api/rename-sheet.ts","../../api/selection.ts","../../api/sort.ts","../../api/split-text.ts","../../api/structural-formula-update.ts","../../api/subtotal.ts","../../api/table.ts","../../api/validation.ts","../../api/xlsx-source.ts","../../atoms/delete-sheet-atom.ts","../../atoms/dialog-state.atom.ts","../../atoms/editing-data-validation-id.atom.ts","../../atoms/editing-embed.atom.ts","../../atoms/editing-table.atom.ts","../../atoms/error-state.atom.ts","../../atoms/index.ts","../../atoms/insert-image-state.atom.ts","../../atoms/named-range.atom.ts","../../atoms/resize-dimension.atom.ts","../../atoms/sheet-observer.atom.ts","../../components/index.tsx","../../components/dialogs/delete-sheet-confirmation.tsx","../../components/dialogs/error-state.tsx","../../components/editors/cell-format-editor.tsx","../../components/editors/conditional-format-editor.tsx","../../components/editors/conditional-format-rule-editor.tsx","../../components/editors/data-validation-editor.tsx","../../components/editors/data-validation-rule-editor.tsx","../../components/editors/embed-editor.tsx","../../components/editors/insert-image-editor.tsx","../../components/editors/insert-link-editor.tsx","../../components/editors/named-range-editor.tsx","../../components/editors/resize-dimension-editor.tsx","../../components/editors/sheet-filter.tsx","../../components/editors/table-editor.tsx","../../helpers/iterative-calculation.ts","../../helpers/sheet-title.ts","../../hooks/use-async-datasource.ts","../../hooks/use-calculation-initialize.ts","../../hooks/use-calculation-process-array.ts","../../hooks/use-calculation-queue.ts","../../hooks/use-calculation-worker.ts","../../hooks/use-calculation.ts","../../hooks/use-can-edit-cellrange.ts","../../hooks/use-cellxfs-registry.ts","../../hooks/use-citations.ts","../../hooks/use-comments.ts","../../hooks/use-conditional-formatting-rules.ts","../../hooks/use-data-validation-rules.ts","../../hooks/use-deferred-calculation-flush.ts","../../hooks/use-idle-scheduler.ts","../../hooks/use-indent.ts","../../hooks/use-named-range.ts","../../hooks/use-on-adjust-row-height.ts","../../hooks/use-on-advanced-filter.ts","../../hooks/use-on-autoresize.ts","../../hooks/use-on-banded-ranges.ts","../../hooks/use-on-calculation-begin.ts","../../hooks/use-on-calculation-success.ts","../../hooks/use-on-change-batch-stream.ts","../../hooks/use-on-change-batch.ts","../../hooks/use-on-change-calculated-column.ts","../../hooks/use-on-change-decimals.ts","../../hooks/use-on-change-formatting.ts","../../hooks/use-on-change-sheet-tabcolor.ts","../../hooks/use-on-change-table-column.ts","../../hooks/use-on-change-theme.ts","../../hooks/use-on-change.ts","../../hooks/use-on-clear-formatting.ts","../../hooks/use-on-collapse-column-group.ts","../../hooks/use-on-collapse-row-group.ts","../../hooks/use-on-copy.ts","../../hooks/use-on-create-named-range.ts","../../hooks/use-on-create-sheet.ts","../../hooks/use-on-delete-cells-shift-left.ts","../../hooks/use-on-delete-cells-shift-up.ts","../../hooks/use-on-delete-column.ts","../../hooks/use-on-delete-named-range.ts","../../hooks/use-on-delete-row.ts","../../hooks/use-on-delete-sheet.ts","../../hooks/use-on-delete-table-row.ts","../../hooks/use-on-delete.ts","../../hooks/use-on-drag-n-drop.ts","../../hooks/use-on-duplicate-sheet.ts","../../hooks/use-on-embeds.ts","../../hooks/use-on-expand-column-group.ts","../../hooks/use-on-expand-row-group.ts","../../hooks/use-on-fill-range.ts","../../hooks/use-on-fill.ts","../../hooks/use-on-filter-table.ts","../../hooks/use-on-find-replace.ts","../../hooks/use-on-freeze.ts","../../hooks/use-on-goal-seek.ts","../../hooks/use-on-group-columns.ts","../../hooks/use-on-group-rows.ts","../../hooks/use-on-hide-column.ts","../../hooks/use-on-hide-row.ts","../../hooks/use-on-hide-show-sheet.ts","../../hooks/use-on-import-csv-legacy.ts","../../hooks/use-on-import-csv.ts","../../hooks/use-on-import-excel.ts","../../hooks/use-on-insert-autosum.ts","../../hooks/use-on-insert-cells-shift-down.ts","../../hooks/use-on-insert-cells-shift-right.ts","../../hooks/use-on-insert-checkbox.ts","../../hooks/use-on-insert-column.ts","../../hooks/use-on-insert-date-time.ts","../../hooks/use-on-insert-date.ts","../../hooks/use-on-insert-image.ts","../../hooks/use-on-insert-link.ts","../../hooks/use-on-insert-note.ts","../../hooks/use-on-insert-row.ts","../../hooks/use-on-insert-table-row.ts","../../hooks/use-on-insert-time.ts","../../hooks/use-on-locale-change.ts","../../hooks/use-on-merge-unmerge-cells.ts","../../hooks/use-on-move-columns.ts","../../hooks/use-on-move-rows.ts","../../hooks/use-on-move-selection.ts","../../hooks/use-on-move-sheet.ts","../../hooks/use-on-move-table-columns.ts","../../hooks/use-on-paste.ts","../../hooks/use-on-protect-range.ts","../../hooks/use-on-protect-sheet.ts","../../hooks/use-on-remove-duplicates.ts","../../hooks/use-on-rename-sheet.ts","../../hooks/use-on-request-calculate-wrapper.ts","../../hooks/use-on-request-conditional-format.ts","../../hooks/use-on-request-data-validation.ts","../../hooks/use-on-request-define-named-range.ts","../../hooks/use-on-request-delete-sheet.ts","../../hooks/use-on-request-edit-table.ts","../../hooks/use-on-request-format-cells.ts","../../hooks/use-on-request-insert-image.ts","../../hooks/use-on-request-insert-link.ts","../../hooks/use-on-request-resize.ts","../../hooks/use-on-request-update-named-range.ts","../../hooks/use-on-resize-table.ts","../../hooks/use-on-resize.ts","../../hooks/use-on-set-outline-depth.ts","../../hooks/use-on-show-column.ts","../../hooks/use-on-show-row.ts","../../hooks/use-on-sort-column.ts","../../hooks/use-on-sort-range.ts","../../hooks/use-on-sort-table.ts","../../hooks/use-on-subtotal.ts","../../hooks/use-on-table.ts","../../hooks/use-on-trace-dependents-precedents.tsx","../../hooks/use-on-ungroup-columns.ts","../../hooks/use-on-ungroup-rows.ts","../../hooks/use-on-update-named-range.ts","../../hooks/use-on-update-note.ts","../../hooks/use-on-update-sheet.ts","../../hooks/use-paint-format.ts","../../hooks/use-search.ts","../../hooks/use-select-next-prev-sheet.ts","../../hooks/use-sheet-observer.ts","../../hooks/use-sheet-properties.ts","../../hooks/use-sheet-state.ts","../../hooks/use-sheetdata-subscriber.ts","../../hooks/use-slicers.ts","../../hooks/use-split-text-to-columns.ts","../../hooks/use-spreadsheet-state.ts","../../hooks/use-ss-registry.ts","../../hooks/use-structured-reference.ts","../../hooks/use-undo-redo-actions.ts","../../hooks/use-undo-redo.ts","../../hooks/utils/frozen-sort.ts","../../hooks/utils/sort-rows.ts","../../interface/apply-fill.ts","../../interface/auto-resize.ts","../../interface/calculation-interface.ts","../../interface/change-batch-stream.ts","../../interface/change-batch.ts","../../interface/change-border.ts","../../interface/change-calculated-column.ts","../../interface/change-decimals.ts","../../interface/change-formatting.ts","../../interface/change-sheet-tabcolor.ts","../../interface/change-table-column.ts","../../interface/change-theme.ts","../../interface/chart-extensions.ts","../../interface/citations.ts","../../interface/clear-formatting.ts","../../interface/conditional-formatting-rules.ts","../../interface/create-table.ts","../../interface/data-validation-rules.ts","../../interface/data-validation-utils.ts","../../interface/delete-cells-shift-left.ts","../../interface/delete-cells-shift-up.ts","../../interface/delete-cells.ts","../../interface/delete-column.ts","../../interface/delete-row.ts","../../interface/delete-sheet.ts","../../interface/delete-table-column.ts","../../interface/delete-table-row.ts","../../interface/duplicate-sheet.ts","../../interface/embeds.ts","../../interface/freeze.ts","../../interface/helpers.ts","../../interface/hide-column.ts","../../interface/hide-row.ts","../../interface/indent.ts","../../interface/insert-cells-shift-down.ts","../../interface/insert-cells-shift-right.ts","../../interface/insert-column.ts","../../interface/insert-note.ts","../../interface/insert-row.ts","../../interface/insert-table-row.ts","../../interface/interface-cli.ts","../../interface/named-range-operations.ts","../../interface/new-sheet.ts","../../interface/pivot-extensions.ts","../../interface/remove-duplicates.ts","../../interface/remove-table.ts","../../interface/resize-utils.ts","../../interface/resize.ts","../../interface/slicers.ts","../../interface/split-text.ts","../../interface/spreadsheet-interface.ts","../../interface/table-totalrow.ts","../../interface/table-utils.ts","../../interface/update-sheet.ts","../../interface/update-table.ts","../../validation-schema/table.schema.ts"],"version":"5.8.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rowsncolumns/spreadsheet-state",
|
|
3
|
-
"version": "28.0.
|
|
3
|
+
"version": "28.0.75",
|
|
4
4
|
"main": "./dist/cjs/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/esm/index.d.ts",
|
|
@@ -55,29 +55,29 @@
|
|
|
55
55
|
"@rowsncolumns/calculator": ">=7.2.32",
|
|
56
56
|
"@rowsncolumns/common-types": ">=5.2.32",
|
|
57
57
|
"@rowsncolumns/dag": ">=7.2.30",
|
|
58
|
-
"@rowsncolumns/fast-formula-parser": "6.2.
|
|
58
|
+
"@rowsncolumns/fast-formula-parser": "6.2.38",
|
|
59
59
|
"@rowsncolumns/grid": ">=13.2.33",
|
|
60
60
|
"@rowsncolumns/icons": ">=7.2.32",
|
|
61
|
-
"@rowsncolumns/spreadsheet": ">=10.2.
|
|
61
|
+
"@rowsncolumns/spreadsheet": ">=10.2.76",
|
|
62
62
|
"@rowsncolumns/toolkit": ">=24.4.4",
|
|
63
|
-
"@rowsncolumns/ui": ">=15.0.
|
|
64
|
-
"@rowsncolumns/utils": ">=9.2.
|
|
63
|
+
"@rowsncolumns/ui": ">=15.0.42",
|
|
64
|
+
"@rowsncolumns/utils": ">=9.2.43"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@rowsncolumns/calculator": ">=7.2.32",
|
|
68
68
|
"@rowsncolumns/common-types": ">=5.2.32",
|
|
69
69
|
"@rowsncolumns/dag": ">=7.2.30",
|
|
70
|
-
"@rowsncolumns/fast-formula-parser": ">=6.2.
|
|
70
|
+
"@rowsncolumns/fast-formula-parser": ">=6.2.38",
|
|
71
71
|
"@rowsncolumns/grid": ">=13.2.33",
|
|
72
72
|
"@rowsncolumns/icons": ">=7.2.32",
|
|
73
|
-
"@rowsncolumns/spreadsheet": ">=10.2.
|
|
74
|
-
"@rowsncolumns/ui": ">=15.0.
|
|
75
|
-
"@rowsncolumns/utils": ">=9.2.
|
|
73
|
+
"@rowsncolumns/spreadsheet": ">=10.2.76",
|
|
74
|
+
"@rowsncolumns/ui": ">=15.0.42",
|
|
75
|
+
"@rowsncolumns/utils": ">=9.2.43"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
78
|
"@rowsncolumns/calculation-worker": ">=9.0.33",
|
|
79
79
|
"@rowsncolumns/date-parser": ">=12.0.32",
|
|
80
|
-
"@rowsncolumns/functions": ">=14.0.
|
|
80
|
+
"@rowsncolumns/functions": ">=14.0.33",
|
|
81
81
|
"@rowsncolumns/toolkit": ">=24.4.4",
|
|
82
82
|
"formik": "^2.4.6",
|
|
83
83
|
"immer": "^10.1.1",
|