@gridsheet/preact-core 3.0.5 → 3.0.7
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/components/StoreObserver.d.ts +3 -1
- package/dist/{hooks-DPIr6WaL.mjs → hooks-ykrgAwg5.mjs} +103 -4
- package/dist/hooks-ykrgAwg5.mjs.map +1 -0
- package/dist/index.js +97 -20
- package/dist/index.js.map +1 -1
- package/dist/spellbook.js +1 -1
- package/dist/store/actions.d.ts +4 -0
- package/dist/types.d.ts +2 -2
- package/package.json +3 -3
- package/dist/hooks-DPIr6WaL.mjs.map +0 -1
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { FC, MutableRefObject } from 'react';
|
|
2
2
|
import { OptionsType, SheetHandle, StoreHandle } from '../types';
|
|
3
|
-
type StoreObserverProps = OptionsType & {
|
|
3
|
+
type StoreObserverProps = Omit<OptionsType, 'sheetHeight' | 'sheetWidth'> & {
|
|
4
|
+
sheetHeight?: number;
|
|
5
|
+
sheetWidth?: number;
|
|
4
6
|
sheetName?: string;
|
|
5
7
|
sheetRef?: MutableRefObject<SheetHandle | null>;
|
|
6
8
|
storeRef?: MutableRefObject<StoreHandle | null>;
|
|
@@ -147,6 +147,7 @@ const reducer = (store, action) => {
|
|
|
147
147
|
const _CoreAction = class _CoreAction {
|
|
148
148
|
constructor() {
|
|
149
149
|
this.actionId = 1;
|
|
150
|
+
this.mutation = false;
|
|
150
151
|
}
|
|
151
152
|
reduce(store, payload) {
|
|
152
153
|
return store;
|
|
@@ -165,6 +166,10 @@ const _CoreAction = class _CoreAction {
|
|
|
165
166
|
};
|
|
166
167
|
_CoreAction.head = 1;
|
|
167
168
|
let CoreAction = _CoreAction;
|
|
169
|
+
const isMutationAction = (type) => {
|
|
170
|
+
var _a;
|
|
171
|
+
return ((_a = actions[type]) == null ? void 0 : _a.mutation) === true;
|
|
172
|
+
};
|
|
168
173
|
class SetSearchQueryAction extends CoreAction {
|
|
169
174
|
reduce(store, payload) {
|
|
170
175
|
const searchQuery = payload;
|
|
@@ -356,6 +361,10 @@ class CopyAction extends CoreAction {
|
|
|
356
361
|
}
|
|
357
362
|
const copy = new CopyAction().bind();
|
|
358
363
|
class CutAction extends CoreAction {
|
|
364
|
+
constructor() {
|
|
365
|
+
super(...arguments);
|
|
366
|
+
this.mutation = true;
|
|
367
|
+
}
|
|
359
368
|
reduce(store, payload) {
|
|
360
369
|
const { sheetReactive: sheetRef } = store;
|
|
361
370
|
const sheet = sheetRef.current;
|
|
@@ -376,6 +385,10 @@ class CutAction extends CoreAction {
|
|
|
376
385
|
}
|
|
377
386
|
const cut = new CutAction().bind();
|
|
378
387
|
class PasteAction extends CoreAction {
|
|
388
|
+
constructor() {
|
|
389
|
+
super(...arguments);
|
|
390
|
+
this.mutation = true;
|
|
391
|
+
}
|
|
379
392
|
reduce(store, payload) {
|
|
380
393
|
const { choosing, selectingZone, sheetReactive: dstSheetRef } = store;
|
|
381
394
|
const dstSheet = dstSheetRef.current;
|
|
@@ -688,6 +701,10 @@ class WriteAction extends CoreAction {
|
|
|
688
701
|
}
|
|
689
702
|
const write = new WriteAction().bind();
|
|
690
703
|
class ClearAction extends CoreAction {
|
|
704
|
+
constructor() {
|
|
705
|
+
super(...arguments);
|
|
706
|
+
this.mutation = true;
|
|
707
|
+
}
|
|
691
708
|
reduce(store, payload) {
|
|
692
709
|
var _a;
|
|
693
710
|
const { choosing, selectingZone, sheetReactive: sheetRef } = store;
|
|
@@ -749,6 +766,10 @@ class ClearAction extends CoreAction {
|
|
|
749
766
|
}
|
|
750
767
|
const clear = new ClearAction().bind();
|
|
751
768
|
class UndoAction extends CoreAction {
|
|
769
|
+
constructor() {
|
|
770
|
+
super(...arguments);
|
|
771
|
+
this.mutation = true;
|
|
772
|
+
}
|
|
752
773
|
reduce(store, payload) {
|
|
753
774
|
const { sheetReactive: sheetRef } = store;
|
|
754
775
|
const sheet = sheetRef.current;
|
|
@@ -789,6 +810,10 @@ class UndoAction extends CoreAction {
|
|
|
789
810
|
}
|
|
790
811
|
const undo = new UndoAction().bind();
|
|
791
812
|
class RedoAction extends CoreAction {
|
|
813
|
+
constructor() {
|
|
814
|
+
super(...arguments);
|
|
815
|
+
this.mutation = true;
|
|
816
|
+
}
|
|
792
817
|
reduce(store, payload) {
|
|
793
818
|
const { sheetReactive: sheetRef } = store;
|
|
794
819
|
const sheet = sheetRef.current;
|
|
@@ -1013,6 +1038,10 @@ class SetInputtingAction extends CoreAction {
|
|
|
1013
1038
|
}
|
|
1014
1039
|
const setInputting = new SetInputtingAction().bind();
|
|
1015
1040
|
class InsertRowsAboveAction extends CoreAction {
|
|
1041
|
+
constructor() {
|
|
1042
|
+
super(...arguments);
|
|
1043
|
+
this.mutation = true;
|
|
1044
|
+
}
|
|
1016
1045
|
reduce(store, payload) {
|
|
1017
1046
|
const { numRows, y, operator } = payload;
|
|
1018
1047
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1044,6 +1073,10 @@ class InsertRowsAboveAction extends CoreAction {
|
|
|
1044
1073
|
}
|
|
1045
1074
|
const insertRowsAbove = new InsertRowsAboveAction().bind();
|
|
1046
1075
|
class InsertRowsBelowAction extends CoreAction {
|
|
1076
|
+
constructor() {
|
|
1077
|
+
super(...arguments);
|
|
1078
|
+
this.mutation = true;
|
|
1079
|
+
}
|
|
1047
1080
|
reduce(store, payload) {
|
|
1048
1081
|
const { numRows, y, operator } = payload;
|
|
1049
1082
|
const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;
|
|
@@ -1083,6 +1116,10 @@ class InsertRowsBelowAction extends CoreAction {
|
|
|
1083
1116
|
}
|
|
1084
1117
|
const insertRowsBelow = new InsertRowsBelowAction().bind();
|
|
1085
1118
|
class InsertColsLeftAction extends CoreAction {
|
|
1119
|
+
constructor() {
|
|
1120
|
+
super(...arguments);
|
|
1121
|
+
this.mutation = true;
|
|
1122
|
+
}
|
|
1086
1123
|
reduce(store, payload) {
|
|
1087
1124
|
const { numCols, x, operator } = payload;
|
|
1088
1125
|
const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;
|
|
@@ -1114,6 +1151,10 @@ class InsertColsLeftAction extends CoreAction {
|
|
|
1114
1151
|
}
|
|
1115
1152
|
const insertColsLeft = new InsertColsLeftAction().bind();
|
|
1116
1153
|
class InsertColsRightAction extends CoreAction {
|
|
1154
|
+
constructor() {
|
|
1155
|
+
super(...arguments);
|
|
1156
|
+
this.mutation = true;
|
|
1157
|
+
}
|
|
1117
1158
|
reduce(store, payload) {
|
|
1118
1159
|
const { numCols, x, operator } = payload;
|
|
1119
1160
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1155,6 +1196,10 @@ class InsertColsRightAction extends CoreAction {
|
|
|
1155
1196
|
}
|
|
1156
1197
|
const insertColsRight = new InsertColsRightAction().bind();
|
|
1157
1198
|
class RemoveRowsAction extends CoreAction {
|
|
1199
|
+
constructor() {
|
|
1200
|
+
super(...arguments);
|
|
1201
|
+
this.mutation = true;
|
|
1202
|
+
}
|
|
1158
1203
|
reduce(store, payload) {
|
|
1159
1204
|
const { numRows, y, operator } = payload;
|
|
1160
1205
|
const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;
|
|
@@ -1178,14 +1223,45 @@ class RemoveRowsAction extends CoreAction {
|
|
|
1178
1223
|
choosing
|
|
1179
1224
|
})
|
|
1180
1225
|
});
|
|
1226
|
+
const numRows2 = sheet.numRows;
|
|
1227
|
+
const numCols2 = sheet.numCols;
|
|
1228
|
+
let adjY = Math.max(1, Math.min(y, numRows2));
|
|
1229
|
+
if (sheet.isRowFiltered(adjY)) {
|
|
1230
|
+
let found = -1;
|
|
1231
|
+
for (let yy = adjY; yy <= numRows2; yy++) {
|
|
1232
|
+
if (!sheet.isRowFiltered(yy)) {
|
|
1233
|
+
found = yy;
|
|
1234
|
+
break;
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1237
|
+
if (found === -1) {
|
|
1238
|
+
for (let yy = adjY; yy >= 1; yy--) {
|
|
1239
|
+
if (!sheet.isRowFiltered(yy)) {
|
|
1240
|
+
found = yy;
|
|
1241
|
+
break;
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
if (found !== -1) {
|
|
1246
|
+
adjY = found;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1181
1249
|
return {
|
|
1182
1250
|
...store,
|
|
1183
|
-
sheetReactive: { current: sheet }
|
|
1251
|
+
sheetReactive: { current: sheet },
|
|
1252
|
+
selectingZone: { startY: adjY, startX: 1, endY: adjY, endX: numCols2 },
|
|
1253
|
+
choosing: { y: adjY, x: 1 },
|
|
1254
|
+
leftHeaderSelecting: true,
|
|
1255
|
+
topHeaderSelecting: false
|
|
1184
1256
|
};
|
|
1185
1257
|
}
|
|
1186
1258
|
}
|
|
1187
1259
|
const removeRows = new RemoveRowsAction().bind();
|
|
1188
1260
|
class RemoveColsAction extends CoreAction {
|
|
1261
|
+
constructor() {
|
|
1262
|
+
super(...arguments);
|
|
1263
|
+
this.mutation = true;
|
|
1264
|
+
}
|
|
1189
1265
|
reduce(store, payload) {
|
|
1190
1266
|
const { numCols, x, operator } = payload;
|
|
1191
1267
|
const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;
|
|
@@ -1209,14 +1285,32 @@ class RemoveColsAction extends CoreAction {
|
|
|
1209
1285
|
choosing
|
|
1210
1286
|
})
|
|
1211
1287
|
});
|
|
1288
|
+
const numCols2 = sheet.numCols;
|
|
1289
|
+
const numRows2 = sheet.numRows;
|
|
1290
|
+
const adjX = Math.max(1, Math.min(x, numCols2));
|
|
1291
|
+
let choosingY = 1;
|
|
1292
|
+
for (let yy = 1; yy <= numRows2; yy++) {
|
|
1293
|
+
if (!sheet.isRowFiltered(yy)) {
|
|
1294
|
+
choosingY = yy;
|
|
1295
|
+
break;
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1212
1298
|
return {
|
|
1213
1299
|
...store,
|
|
1214
|
-
sheetReactive: { current: sheet }
|
|
1300
|
+
sheetReactive: { current: sheet },
|
|
1301
|
+
selectingZone: { startY: 1, startX: adjX, endY: numRows2, endX: adjX },
|
|
1302
|
+
choosing: { y: choosingY, x: adjX },
|
|
1303
|
+
leftHeaderSelecting: false,
|
|
1304
|
+
topHeaderSelecting: true
|
|
1215
1305
|
};
|
|
1216
1306
|
}
|
|
1217
1307
|
}
|
|
1218
1308
|
const removeCols = new RemoveColsAction().bind();
|
|
1219
1309
|
class SortRowsAction extends CoreAction {
|
|
1310
|
+
constructor() {
|
|
1311
|
+
super(...arguments);
|
|
1312
|
+
this.mutation = true;
|
|
1313
|
+
}
|
|
1220
1314
|
reduce(store, payload) {
|
|
1221
1315
|
const { x, direction } = payload;
|
|
1222
1316
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1238,6 +1332,10 @@ class SortRowsAction extends CoreAction {
|
|
|
1238
1332
|
}
|
|
1239
1333
|
const sortRows = new SortRowsAction().bind();
|
|
1240
1334
|
class FilterRowsAction extends CoreAction {
|
|
1335
|
+
constructor() {
|
|
1336
|
+
super(...arguments);
|
|
1337
|
+
this.mutation = true;
|
|
1338
|
+
}
|
|
1241
1339
|
reduce(store, payload) {
|
|
1242
1340
|
const { x, filter } = payload;
|
|
1243
1341
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1403,7 +1501,8 @@ export {
|
|
|
1403
1501
|
setSearchRange as T,
|
|
1404
1502
|
useBook as U,
|
|
1405
1503
|
reducer as V,
|
|
1406
|
-
|
|
1504
|
+
isMutationAction as W,
|
|
1505
|
+
userActions as X,
|
|
1407
1506
|
setInputting as a,
|
|
1408
1507
|
updateSheet as b,
|
|
1409
1508
|
undo as c,
|
|
@@ -1431,4 +1530,4 @@ export {
|
|
|
1431
1530
|
removeRows as y,
|
|
1432
1531
|
insertColsRight as z
|
|
1433
1532
|
};
|
|
1434
|
-
//# sourceMappingURL=hooks-
|
|
1533
|
+
//# sourceMappingURL=hooks-ykrgAwg5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-ykrgAwg5.mjs","sources":["../../react-core/src/store/helpers.ts","../../react-core/src/store/actions.ts","../../react-core/src/lib/hooks.ts"],"sourcesContent":["import { a2p, x2c, y2r } from '@gridsheet/core';\nimport { Sheet } from '@gridsheet/core';\nimport type { Address, PointType, StorePatchType, StoreType } from '../types';\n\n/**\n * Strip redundant fields from a StorePatchType before recording in history.\n * - selectingZone with endY === -1 && endX === -1 is a no-selection sentinel and need not be stored.\n */\nexport const compactReflection = (reflection: StorePatchType): StorePatchType => {\n const result = { ...reflection };\n if (result.selectingZone != null && result.selectingZone.endY === -1 && result.selectingZone.endX === -1) {\n delete result.selectingZone;\n }\n return result;\n};\n\nexport const restrictPoints = (store: StoreType, sheet: Sheet) => {\n const { choosing, selectingZone } = store;\n let { y, x } = choosing;\n let { startY: y1, startX: x1, endY: y2, endX: x2 } = selectingZone;\n const [numRows, numCols] = [sheet.numRows, sheet.numCols];\n if (y > numRows) {\n y = numRows;\n }\n if (x > numCols) {\n x = numCols;\n }\n if (y1 > numRows) {\n y1 = numRows;\n }\n if (y2 > numRows) {\n y2 = numRows;\n }\n if (x1 > numCols) {\n x1 = numCols;\n }\n if (x2 > numCols) {\n x2 = numCols;\n }\n return {\n choosing: { y, x } as PointType,\n selectingZone: { startY: y1, startX: x1, endY: y2, endX: x2 },\n };\n};\n\nconst FLASH_CLASS = 'gs-flash-overlay--active';\nconst FLASH_DURATION_MS = 600;\nexport const flashSheet = (el: HTMLElement | null) => {\n if (!el) {\n return;\n }\n el.classList.remove(FLASH_CLASS);\n // force reflow to restart animation when called consecutively\n void el.offsetWidth;\n el.classList.add(FLASH_CLASS);\n setTimeout(() => el.classList.remove(FLASH_CLASS), FLASH_DURATION_MS);\n};\n\nexport const flashWithCallback = (\n store: StoreType,\n sheet: Sheet,\n callback: ((s: StoreType) => void) | undefined,\n): StoreType & { callback?: (store: StoreType) => void } => ({\n ...store,\n sheetReactive: { current: sheet },\n callback: (s: StoreType) => {\n callback?.(s);\n flashSheet(store.flashRef.current);\n },\n});\n\nexport const initSearchStatement = (sheet: Sheet, store: StoreType) => {\n const { searchQuery, searchCaseSensitive, searchRegex, searchRange } = store;\n let { choosing } = store;\n if (!searchQuery) {\n return { matchingCells: [] };\n }\n const matchingCells: Address[] = [];\n\n let matcher: (value: string) => boolean;\n if (searchRegex) {\n try {\n const flags = searchCaseSensitive ? '' : 'i';\n const regex = new RegExp(searchQuery, flags);\n matcher = (v: string) => regex.test(v);\n } catch (e) {\n // Invalid regex, treat as literal string\n const q = searchCaseSensitive ? searchQuery : searchQuery.toLowerCase();\n matcher = (v: string) => {\n const s = searchCaseSensitive ? v : v.toLowerCase();\n return s.indexOf(q) !== -1;\n };\n }\n } else {\n const q = searchCaseSensitive ? searchQuery : searchQuery.toLowerCase();\n matcher = (v: string) => {\n const s = searchCaseSensitive ? v : v.toLowerCase();\n return s.indexOf(q) !== -1;\n };\n }\n\n // Determine search range\n let startY = 1,\n endY = sheet.bottom;\n let startX = 1,\n endX = sheet.right;\n if (searchRange) {\n startY = searchRange.startY;\n endY = searchRange.endY;\n startX = searchRange.startX;\n endX = searchRange.endX;\n }\n\n for (let y = startY; y <= endY; y++) {\n for (let x = startX; x <= endX; x++) {\n const v = sheet.getSerializedValue({ point: { y, x } });\n if (matcher(v)) {\n matchingCells.push(`${x2c(x)}${y2r(y)}`);\n }\n }\n }\n const matchingCellIndex = matchingCells.length === store.matchingCells.length ? store.matchingCellIndex : 0;\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { matchingCells, searchQuery, matchingCellIndex, choosing };\n};\n\nexport const isXSheetFocused = (store: StoreType) => {\n const { sheetId, sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n return false;\n }\n if (sheetId === sheet.registry.editingSheetId) {\n return false;\n }\n return !!sheet.registry.editingAddress;\n};\n","import {\n StoreType,\n RectType,\n ZoneType,\n PointType,\n RangeType,\n FeedbackType,\n CellsByAddressType,\n AreaType,\n PositionType,\n ModeType,\n RawCellType,\n OperatorType,\n FilterConfig,\n} from '../types';\nimport { zoneToArea, superposeArea, matrixShape, areaShape, areaDiff, areaToZone, restrictZone } from '@gridsheet/core';\nimport { Sheet } from '@gridsheet/core';\n\nimport { p2a, a2p } from '@gridsheet/core';\nimport { DEFAULT_HEIGHT, DEFAULT_WIDTH } from '@gridsheet/core';\nimport { initSearchStatement, restrictPoints, flashSheet, flashWithCallback, compactReflection } from './helpers';\nimport { smartScroll } from '@gridsheet/core';\nimport { operations as prevention } from '@gridsheet/core';\nimport { Autofill } from '@gridsheet/core';\n\nconst resetZone: ZoneType = { startY: -1, startX: -1, endY: -1, endX: -1 };\n\nconst actions: { [s: string]: CoreAction<any> } = {};\n\ntype StoreWithCallback = StoreType & {\n callback?: (store: StoreType) => void;\n};\n\nexport const reducer = <T>(store: StoreType, action: { type: number; value: T }): StoreType => {\n const act: CoreAction<T> | undefined = actions[action.type];\n if (act == null) {\n return store;\n }\n\n // React StrictMode calls reducers twice per dispatch to detect side effects.\n // Since Sheet is a mutable object, the second call re-applies operations (double undo, etc.).\n // Guard: React passes the SAME action object reference to both calls, so we use object identity\n // to distinguish a StrictMode second-call (same reference) from a new dispatch (new reference).\n // Using a Map allows multiple batched dispatches to each have their own cached result,\n // preventing the single-slot cache from being overwritten when actions are processed together.\n const registry = store.sheetReactive.current?.registry;\n if (registry?._strictModeCache?.has(action)) {\n const cached = registry._strictModeCache.get(action) as StoreType;\n registry._strictModeCache.delete(action);\n return cached;\n }\n\n const { callback, ...newStore } = act.reduce(store, action.value);\n callback?.(newStore);\n const result = { ...store, ...newStore };\n\n if (registry) {\n if (!registry._strictModeCache) {\n registry._strictModeCache = new Map();\n }\n registry._strictModeCache.set(action, result);\n queueMicrotask(() => {\n registry._strictModeCache?.delete(action);\n });\n }\n\n return result;\n};\n\nexport class CoreAction<T> {\n static head = 1;\n private actionId: number = 1;\n /** Whether this action mutates sheet data (triggers loading indicator). */\n public mutation = false;\n\n public reduce(store: StoreType, payload: T): StoreWithCallback {\n return store;\n }\n public call(payload: T): { type: number; value: T } {\n return {\n type: this.actionId,\n value: payload,\n };\n }\n public bind() {\n this.actionId = CoreAction.head++;\n actions[this.actionId] = this;\n return this.call.bind(this);\n }\n}\n\n/** Returns true if the given action type is a mutation (heavy operation). */\nexport const isMutationAction = (type: number): boolean => {\n return actions[type]?.mutation === true;\n};\n\nclass SetSearchQueryAction<T extends string | undefined> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchQuery = payload;\n const { sheetReactive: sheetRef } = store;\n if (sheetRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(sheetRef.current, { ...store, searchQuery }),\n searchQuery,\n };\n }\n}\nexport const setSearchQuery = new SetSearchQueryAction().bind();\n\nclass SetSearchCaseSensitiveAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchCaseSensitive = payload;\n const { sheetReactive: sheetRef } = store;\n if (sheetRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(sheetRef.current, { ...store, searchCaseSensitive }),\n searchCaseSensitive,\n };\n }\n}\nexport const setSearchCaseSensitive = new SetSearchCaseSensitiveAction().bind();\n\nclass SetSearchRegexAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchRegex = payload;\n const { sheetReactive: sheetRef } = store;\n if (sheetRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(sheetRef.current, { ...store, searchRegex }),\n searchRegex,\n };\n }\n}\nexport const setSearchRegex = new SetSearchRegexAction().bind();\n\nclass SetSearchRangeAction<T extends ZoneType | undefined> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const searchRange = payload;\n const { sheetReactive: sheetRef } = store;\n if (sheetRef.current == null) {\n return store;\n }\n return {\n ...store,\n ...initSearchStatement(sheetRef.current, { ...store, searchRange }),\n searchRange,\n };\n }\n}\nexport const setSearchRange = new SetSearchRangeAction().bind();\n\nclass SetEditingAddressAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: payload,\n };\n }\n}\nexport const setEditingAddress = new SetEditingAddressAction().bind();\n\nclass SetAutofillDraggingToAction<T extends PointType | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n autofillDraggingTo: payload,\n };\n }\n}\nexport const setAutofillDraggingTo = new SetAutofillDraggingToAction().bind();\n\nclass SubmitAutofillAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const autofill = new Autofill(store, payload);\n const sheet = autofill.applied;\n const selectingZone = areaToZone(autofill.wholeArea);\n\n return {\n ...store,\n sheetReactive: { current: sheet },\n ...initSearchStatement(sheet, store),\n ...restrictPoints(store, sheet),\n selectingZone,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n autofillDraggingTo: null,\n };\n }\n}\nexport const submitAutofill = new SubmitAutofillAction().bind();\n\nclass SetContextMenuPositionAction<T extends PositionType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n contextMenuPosition: payload,\n };\n }\n}\nexport const setContextMenuPosition = new SetContextMenuPositionAction().bind();\n\nclass SetResizingPositionYAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionY: payload,\n };\n }\n}\nexport const setResizingPositionY = new SetResizingPositionYAction().bind();\n\nclass SetResizingPositionXAction<T extends [number, number, number]> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n resizingPositionX: payload,\n };\n }\n}\nexport const setResizingPositionX = new SetResizingPositionXAction().bind();\n\nclass SetEnteringAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n entering: payload,\n };\n }\n}\nexport const setEntering = new SetEnteringAction().bind();\n\nclass UpdateSheetAction<T extends Sheet> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n sheetReactive: { current: payload },\n ...initSearchStatement(payload, store),\n ...restrictPoints(store, payload),\n };\n }\n}\nexport const updateSheet = new UpdateSheetAction().bind();\n\nclass SetEditorRectAction<T extends RectType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editorRect: payload,\n };\n }\n}\nexport const setEditorRect = new SetEditorRectAction().bind();\n\nclass SetDragging<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n dragging: payload,\n };\n }\n}\nexport const setDragging = new SetDragging().bind();\n\nclass BlurAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editingAddress: '',\n };\n }\n}\nexport const blur = new BlurAction().bind();\n\nclass CopyAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n return store;\n }\n return {\n ...store,\n callback: ({ sheetReactive: sheetRef }) => {\n sheet.registry.transmit({\n copyingSheetId: sheet.id,\n copyingZone: payload,\n cutting: false,\n });\n },\n };\n }\n}\nexport const copy = new CopyAction().bind();\n\nclass CutAction<T extends ZoneType> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n return store;\n }\n return {\n ...store,\n callback: ({ sheetReactive: sheetRef }) => {\n sheet.registry.transmit({\n copyingSheetId: sheet.id,\n copyingZone: payload,\n cutting: true,\n });\n },\n };\n }\n}\nexport const cut = new CutAction().bind();\n\nclass PasteAction<T extends { matrix: RawCellType[][]; onlyValue: boolean }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, sheetReactive: dstSheetRef } = store;\n const dstSheet = dstSheetRef.current;\n if (!dstSheet) {\n return store;\n }\n const { registry } = dstSheet;\n const { copyingSheetId, copyingZone, cutting } = registry;\n const srcSheet = dstSheet.getSheetBySheetId(copyingSheetId);\n\n let selectingArea = zoneToArea(selectingZone);\n const copyingArea = zoneToArea(copyingZone);\n const { matrix, onlyValue } = payload;\n\n if (cutting) {\n if (!srcSheet) {\n return store;\n }\n const src = copyingArea;\n const { rows: dy, cols: dx } = areaDiff(copyingArea);\n const dst: AreaType =\n selectingArea.top !== -1\n ? {\n top: selectingArea.top,\n left: selectingArea.left,\n bottom: selectingArea.top + dy,\n right: selectingArea.left + dx,\n }\n : {\n top: choosing.y,\n left: choosing.x,\n bottom: choosing.y + dy,\n right: choosing.x + dx,\n };\n\n const nextSelectingZone = restrictZone(areaToZone(dst));\n const newSheet = dstSheet.move({\n srcSheet,\n src,\n dst,\n operator: 'USER',\n undoReflection: compactReflection({\n sheetId: srcSheet.id,\n selectingZone: nextSelectingZone,\n choosing,\n transmit: { copyingSheetId: srcSheet.id, copyingZone, cutting: true },\n }),\n redoReflection: compactReflection({\n sheetId: srcSheet.id,\n choosing,\n transmit: { copyingSheetId: srcSheet.id, copyingZone: resetZone },\n }),\n });\n\n return {\n ...store,\n ...initSearchStatement(newSheet, store),\n sheetReactive: { current: newSheet },\n selectingZone: nextSelectingZone,\n inputting: newSheet.getSerializedValue({ point: choosing, resolution: 'RAW' }),\n callback: ({ sheetReactive: sheetRef }) => {\n registry.transmit({\n cutting: false,\n copyingZone: resetZone,\n });\n },\n };\n }\n\n let newSheet: Sheet;\n let { y, x } = choosing;\n\n if (copyingArea.top === -1) {\n const { rows: height, cols: width } = matrixShape({ matrix, base: -1 });\n selectingArea = {\n top: y,\n left: x,\n bottom: y + height,\n right: x + width,\n };\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n newSheet = dstSheet.writeRawCellMatrix({\n point: { y, x },\n matrix,\n onlyValue,\n undoReflection: compactReflection({\n sheetId: dstSheet.id,\n selectingZone: nextSelectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: dstSheet.id,\n selectingZone: nextSelectingZone,\n choosing,\n }),\n });\n } else {\n if (srcSheet == null) {\n return store;\n }\n let { rows: dy, cols: dx } = areaDiff(copyingArea);\n if (selectingArea.top !== -1) {\n y = selectingArea.top;\n x = selectingArea.left;\n const superposed = superposeArea(selectingArea, copyingArea);\n dy = superposed.rows;\n dx = superposed.cols;\n }\n selectingArea = { top: y, left: x, bottom: y + dy, right: x + dx };\n newSheet = dstSheet.copy({\n srcSheet,\n src: copyingArea,\n dst: selectingArea,\n onlyValue,\n operator: 'USER',\n undoReflection: compactReflection({\n sheetId: srcSheet.id,\n transmit: { copyingZone },\n choosing,\n selectingZone,\n }),\n redoReflection: compactReflection({\n sheetId: srcSheet.id,\n transmit: { copyingSheetId: srcSheet.id, copyingZone: resetZone },\n choosing,\n selectingZone: areaToZone(selectingArea),\n }),\n });\n }\n\n const nextSelectingZone = restrictZone(areaToZone(selectingArea));\n nextSelectingZone.endX = Math.min(nextSelectingZone.endX, newSheet.numCols);\n nextSelectingZone.endY = Math.min(nextSelectingZone.endY, newSheet.numRows);\n return {\n ...store,\n sheetReactive: { current: newSheet },\n selectingZone: nextSelectingZone,\n inputting: newSheet.getSerializedValue({ point: choosing, resolution: 'RAW' }),\n ...initSearchStatement(newSheet, store),\n callback: ({ sheetReactive: sheetRef }) => {\n registry.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const paste = new PasteAction().bind();\n\nclass EscapeAction<T extends null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { sheetReactive: sheetRef } = store;\n return {\n ...store,\n editingAddress: '',\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n callback: ({ sheetReactive: sheetRef }) => {\n sheetRef.current!.registry.transmit({\n copyingZone: resetZone,\n cutting: false,\n });\n },\n };\n }\n}\nexport const escape = new EscapeAction().bind();\n\nclass ChooseAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n choosing: payload,\n entering: true,\n };\n }\n}\nexport const choose = new ChooseAction().bind();\n\nclass SelectAction<T extends ZoneType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n selectingZone: payload,\n leftHeaderSelecting: false,\n topHeaderSelecting: false,\n };\n }\n}\nexport const select = new SelectAction().bind();\n\nclass SelectRowsAction<T extends { range: RangeType; numCols: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numCols } = payload;\n const { start, end } = range;\n const sheet = store.sheetReactive.current;\n const selectingZone = {\n startY: start,\n startX: 1,\n endY: end,\n endX: numCols,\n };\n // Find the first non-filtered row in the selection for choosing\n let choosingY = start;\n if (sheet) {\n for (let y = start; y <= end; y++) {\n if (!sheet.isRowFiltered(y)) {\n choosingY = y;\n break;\n }\n }\n }\n return {\n ...store,\n selectingZone,\n choosing: { y: choosingY, x: 1 },\n leftHeaderSelecting: true,\n topHeaderSelecting: false,\n };\n }\n}\nexport const selectRows = new SelectRowsAction().bind();\n\nclass SelectColsAction<T extends { range: RangeType; numRows: number }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { range, numRows } = payload;\n const { start, end } = range;\n const sheet = store.sheetReactive.current;\n const selectingZone = {\n startY: 1,\n startX: start,\n endY: numRows,\n endX: end,\n };\n // Find the first non-filtered row (y=1 is always visible for columns, use y=1)\n // For columns there is no column-level filter, so choosing y=1 (first data row visible)\n let choosingY = 1;\n if (sheet) {\n for (let y = 1; y <= numRows; y++) {\n if (!sheet.isRowFiltered(y)) {\n choosingY = y;\n break;\n }\n }\n }\n return {\n ...store,\n selectingZone,\n choosing: { y: choosingY, x: start },\n leftHeaderSelecting: false,\n topHeaderSelecting: true,\n };\n }\n}\nexport const selectCols = new SelectColsAction().bind();\n\nclass DragAction<T extends PointType> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { startY, startX } = store.selectingZone;\n const selectingZone = {\n startY,\n startX,\n endY: payload.y,\n endX: payload.x,\n };\n if (startY === payload.y && startX === payload.x) {\n selectingZone.endY = -1;\n selectingZone.endX = -1;\n }\n return { ...store, selectingZone };\n }\n}\nexport const drag = new DragAction().bind();\n\nclass SearchAction<T extends number> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { matchingCells } = store;\n let { matchingCellIndex, choosing } = store;\n matchingCellIndex += payload;\n if (matchingCellIndex >= matchingCells.length) {\n matchingCellIndex = 0;\n } else if (matchingCellIndex < 0) {\n matchingCellIndex = matchingCells.length - 1;\n }\n\n if (matchingCells.length > 0) {\n const address = matchingCells[matchingCellIndex];\n choosing = a2p(address);\n }\n return { ...store, matchingCells, matchingCellIndex, choosing };\n }\n}\nexport const search = new SearchAction().bind();\n\nclass WriteAction<T extends { value: string; point?: PointType }> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n let { value, point } = payload;\n const { choosing, selectingZone, sheetReactive: sheetRef } = store;\n if (point == null) {\n point = choosing;\n }\n const sheet = sheetRef.current;\n if (!sheet) {\n return store;\n }\n const newSheet = sheet.write({\n point: point,\n value,\n operator: 'USER',\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing: point,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing: point,\n }),\n });\n return {\n ...store,\n ...initSearchStatement(newSheet, store),\n sheetReactive: { current: newSheet },\n callback: ({ sheetReactive: sheetRef }) => {\n sheet.registry.transmit({\n copyingZone: resetZone,\n });\n },\n };\n }\n}\nexport const write = new WriteAction().bind();\n\nclass ClearAction<T extends null> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { choosing, selectingZone, sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n return store;\n }\n\n let selectingArea = zoneToArea(selectingZone);\n if (selectingArea.top === -1) {\n const { y, x } = choosing;\n selectingArea = { top: y, left: x, bottom: y, right: x };\n }\n const { top, left, bottom, right } = selectingArea;\n const diff: CellsByAddressType = {};\n let diffCount = 0;\n for (let y = top; y <= bottom; y++) {\n if (sheet.isRowFiltered(y)) {\n continue;\n }\n for (let x = left; x <= right; x++) {\n const cell = sheet.getCell({ y, x }, { resolution: 'SYSTEM' });\n const address = p2a({ y, x });\n if (prevention.hasOperation(cell?.prevention, prevention.Write)) {\n continue;\n }\n // Spilled cells are derived from the origin cell's formula and should\n // not be cleared independently — doing so would blank the FormulaBar\n // while the spill re-populates the value on next evaluation.\n if (sheet.getSystem({ y, x })?.spilledFrom != null) {\n continue;\n }\n if (cell?.value != null) {\n diff[address] = { value: undefined };\n diffCount++;\n }\n }\n }\n if (diffCount === 0) {\n return store;\n }\n sheet.update({\n diff,\n partial: true,\n operator: 'USER',\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n });\n return {\n ...store,\n ...initSearchStatement(sheet, store),\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const clear = new ClearAction().bind();\n\nclass UndoAction<T extends null> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n return store;\n }\n const { history, callback } = sheet.undo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== sheet.id) {\n const { dispatch, store: dstStore } = sheet.registry.contextsBySheetId[history.dstSheetId];\n dispatch(\n setStore({\n ...dstStore,\n ...history.undoReflection,\n sheetReactive: { current: dstStore.sheetReactive.current },\n }),\n );\n flashSheet(dstStore.flashRef.current);\n // For cross-sheet MOVE: the src (current) sheet's lastChangedAddresses was also updated.\n // Return updated sheetReactive so this sheet's Emitter fires onChange.\n if (history.srcSheetId === sheet.id) {\n return flashWithCallback(store, sheet, callback);\n }\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, sheet),\n ...history.undoReflection,\n ...initSearchStatement(sheet, store),\n sheetReactive: { current: sheet },\n callback: (s: StoreType) => {\n callback?.(s);\n flashSheet(store.flashRef.current);\n },\n };\n }\n}\nexport const undo = new UndoAction().bind();\n\nclass RedoAction<T extends null> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { sheetReactive: sheetRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n const { history, newSheet, callback } = sheet.redo();\n if (history == null) {\n return store;\n }\n if (history.dstSheetId !== sheet.id) {\n const { dispatch, store: dstStore } = sheet.registry.contextsBySheetId[history.dstSheetId];\n dispatch(\n setStore({\n ...dstStore,\n ...history.redoReflection,\n sheetReactive: { current: dstStore.sheetReactive.current },\n }),\n );\n flashSheet(dstStore.flashRef.current);\n // For cross-sheet MOVE: the src (current) sheet's lastChangedAddresses was also updated.\n // Return updated sheetReactive so this sheet's Emitter fires onChange.\n if (history.srcSheetId === sheet.id) {\n return flashWithCallback(store, sheet, callback);\n }\n return store;\n }\n return {\n ...store,\n ...restrictPoints(store, sheet),\n ...history.redoReflection,\n ...initSearchStatement(sheet, store),\n sheetReactive: { current: sheet },\n callback: (s: StoreType) => {\n callback?.(s);\n flashSheet(store.flashRef.current);\n },\n };\n }\n}\nexport const redo = new RedoAction().bind();\n\nclass ArrowAction<\n T extends {\n shiftKey: boolean;\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { shiftKey, deltaY, deltaX, numRows, numCols } = payload;\n const { choosing, sheetReactive: sheetRef, tabularRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n let { selectingZone } = store;\n const { y, x } = choosing;\n if (shiftKey) {\n const [dragEndY, dragEndX] = [\n selectingZone.endY === -1 ? y : selectingZone.endY,\n selectingZone.endX === -1 ? x : selectingZone.endX,\n ];\n const [nextY, nextX] = [dragEndY + deltaY, dragEndX + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n selectingZone =\n y === nextY && x === nextX\n ? { startY: -1, startX: -1, endY: -1, endX: -1 }\n : { startY: y, startX: x, endY: nextY, endX: nextX };\n return {\n ...store,\n selectingZone,\n };\n }\n const [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n // Skip hidden rows\n let resolvedY = nextY;\n if (sheet.isRowFiltered(resolvedY)) {\n const dir = deltaY >= 0 ? 1 : -1;\n while (resolvedY >= 1 && resolvedY <= numRows && sheet.isRowFiltered(resolvedY)) {\n resolvedY += dir;\n }\n if (resolvedY < 1 || resolvedY > numRows) {\n return store; // no visible row in that direction\n }\n }\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n if (deltaY > 0) {\n for (let i = y; i < resolvedY; i++) {\n editorTop += sheet.getCell({ y: i, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= resolvedY; i--) {\n editorTop -= sheet.getCell({ y: i, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += sheet.getCell({ y: 0, x: i }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= sheet.getCell({ y: 0, x: i }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n }\n }\n\n const cell = sheet.getCell({ y: resolvedY, x: nextX }, { resolution: 'SYSTEM' });\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n\n smartScroll(sheet, tabularRef.current, { y: resolvedY, x: nextX });\n return {\n ...store,\n selectingZone: { startY: -1, startX: -1, endY: -1, endX: -1 },\n choosing: { y: resolvedY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const arrow = new ArrowAction().bind();\n\nclass WalkAction<\n T extends {\n deltaY: number;\n deltaX: number;\n numRows: number;\n numCols: number;\n },\n> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, numCols } = payload;\n let { deltaY, deltaX } = payload;\n const { choosing, selectingZone, sheetReactive: sheetRef, tabularRef: gridOuterRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n\n let { y: editorTop, x: editorLeft, height, width } = store.editorRect;\n const { y, x } = choosing;\n const selectingArea = zoneToArea(selectingZone);\n const { top, left, bottom, right } = selectingArea;\n let [nextY, nextX] = [y + deltaY, x + deltaX];\n if (nextY < top && top !== -1) {\n deltaY = bottom - nextY;\n nextY = bottom;\n if (nextX > left) {\n nextX--;\n deltaX--;\n } else {\n deltaX = right - nextX;\n nextX = right;\n }\n }\n if (nextY > bottom && bottom !== -1) {\n deltaY = top - nextY;\n nextY = top;\n if (nextX < right) {\n nextX++;\n deltaX++;\n } else {\n deltaX = left - nextX;\n nextX = left;\n }\n }\n if (nextX < left && left !== -1) {\n deltaX = right - nextX;\n nextX = right;\n if (nextY > top) {\n nextY--;\n deltaY--;\n } else {\n deltaY = bottom - nextY;\n nextY = bottom;\n }\n }\n if (nextX > right && right !== -1) {\n deltaX = left - nextX;\n nextX = left;\n if (nextY < bottom) {\n nextY++;\n deltaY++;\n } else {\n deltaY = top - nextY;\n nextY = top;\n }\n }\n\n if (nextY < 1 || numRows < nextY || nextX < 1 || numCols < nextX) {\n return store;\n }\n\n // Skip hidden rows\n if (sheet.isRowFiltered(nextY)) {\n const dir = deltaY >= 0 ? 1 : -1;\n const lo = top !== -1 ? top : 1;\n const hi = bottom !== -1 ? bottom : numRows;\n while (nextY >= lo && nextY <= hi && sheet.isRowFiltered(nextY)) {\n nextY += dir;\n }\n if (nextY < lo || nextY > hi || sheet.isRowFiltered(nextY)) {\n return store; // no visible row in range\n }\n }\n\n if (deltaY > 0) {\n for (let i = y; i < nextY; i++) {\n editorTop += sheet.getCell({ y: i, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n }\n } else if (deltaY < 0) {\n for (let i = y - 1; i >= nextY; i--) {\n editorTop -= sheet.getCell({ y: i, x: 0 }, { resolution: 'SYSTEM' })?.height || DEFAULT_HEIGHT;\n }\n }\n if (deltaX > 0) {\n for (let i = x; i < nextX; i++) {\n editorLeft += sheet.getCell({ y: 0, x: i }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n }\n } else if (deltaX < 0) {\n for (let i = x - 1; i >= nextX; i--) {\n editorLeft -= sheet.getCell({ y: 0, x: i }, { resolution: 'SYSTEM' })?.width || DEFAULT_WIDTH;\n }\n }\n const cell = sheet.getCell({ y: nextY, x: nextX }, { resolution: 'SYSTEM' });\n height = cell?.height || DEFAULT_HEIGHT;\n width = cell?.width || DEFAULT_WIDTH;\n smartScroll(sheet, gridOuterRef.current, { y: nextY, x: nextX });\n return {\n ...store,\n choosing: { y: nextY, x: nextX } as PointType,\n editorRect: { y: editorTop, x: editorLeft, height, width },\n };\n }\n}\nexport const walk = new WalkAction().bind();\n\nclass SetInputtingAction<T extends string> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n inputting: payload,\n };\n }\n}\n\nexport const setInputting = new SetInputtingAction().bind();\n\nclass InsertRowsAboveAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n sheet.insertRows({\n y,\n numRows,\n baseY: y,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n });\n return {\n ...store,\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const insertRowsAbove = new InsertRowsAboveAction().bind();\n\nclass InsertRowsBelowAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startY: selectingZone.startY + numRows,\n endY: selectingZone.endY + numRows,\n };\n const nextChoosing = { ...choosing, y: choosing.y + numRows };\n\n sheet.insertRows({\n y: y + 1,\n numRows,\n baseY: y,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n }),\n });\n return {\n ...store,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const insertRowsBelow = new InsertRowsBelowAction().bind();\n\nclass InsertColsLeftAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n\n sheet.insertCols({\n x,\n numCols,\n baseX: x,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n });\n return {\n ...store,\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const insertColsLeft = new InsertColsLeftAction().bind();\n\nclass InsertColsRightAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n const nextSelectingZone = {\n ...selectingZone,\n startX: selectingZone.startX + numCols,\n endX: selectingZone.endX + numCols,\n };\n const nextChoosing = { ...choosing, x: choosing.x + numCols };\n\n selectingZone.startX += numCols;\n selectingZone.endX += numCols;\n\n sheet.insertCols({\n x: x + 1,\n numCols,\n baseX: x,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n }),\n });\n return {\n ...store,\n selectingZone: nextSelectingZone,\n choosing: nextChoosing,\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const insertColsRight = new InsertColsRightAction().bind();\n\nclass RemoveRowsAction<T extends { numRows: number; y: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numRows, y, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n\n sheet.removeRows({\n y,\n numRows,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n sheetHeight: store.sheetHeight,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n });\n\n // Move the selection to the adjacent row that shifted into the deleted position\n // (clamped to the last row), skipping filtered rows so it stays visible.\n const numRows2 = sheet.numRows;\n const numCols2 = sheet.numCols;\n let adjY = Math.max(1, Math.min(y, numRows2));\n if (sheet.isRowFiltered(adjY)) {\n let found = -1;\n for (let yy = adjY; yy <= numRows2; yy++) {\n if (!sheet.isRowFiltered(yy)) {\n found = yy;\n break;\n }\n }\n if (found === -1) {\n for (let yy = adjY; yy >= 1; yy--) {\n if (!sheet.isRowFiltered(yy)) {\n found = yy;\n break;\n }\n }\n }\n if (found !== -1) {\n adjY = found;\n }\n }\n\n return {\n ...store,\n sheetReactive: { current: sheet },\n selectingZone: { startY: adjY, startX: 1, endY: adjY, endX: numCols2 },\n choosing: { y: adjY, x: 1 },\n leftHeaderSelecting: true,\n topHeaderSelecting: false,\n };\n }\n}\nexport const removeRows = new RemoveRowsAction().bind();\n\nclass RemoveColsAction<T extends { numCols: number; x: number; operator?: OperatorType }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { numCols, x, operator } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n\n sheet.removeCols({\n x,\n numCols,\n operator,\n undoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n sheetWidth: store.sheetWidth,\n }),\n redoReflection: compactReflection({\n sheetId: sheet.id,\n selectingZone,\n choosing,\n }),\n });\n\n // Move the selection to the adjacent column that shifted into the deleted position\n // (clamped to the last column). choosing.y lands on the first visible row.\n const numCols2 = sheet.numCols;\n const numRows2 = sheet.numRows;\n const adjX = Math.max(1, Math.min(x, numCols2));\n let choosingY = 1;\n for (let yy = 1; yy <= numRows2; yy++) {\n if (!sheet.isRowFiltered(yy)) {\n choosingY = yy;\n break;\n }\n }\n\n return {\n ...store,\n sheetReactive: { current: sheet },\n selectingZone: { startY: 1, startX: adjX, endY: numRows2, endX: adjX },\n choosing: { y: choosingY, x: adjX },\n leftHeaderSelecting: false,\n topHeaderSelecting: true,\n };\n }\n}\nexport const removeCols = new RemoveColsAction().bind();\n\nclass SortRowsAction<T extends { x: number; direction: 'asc' | 'desc' }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { x, direction } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n sheet.sortRows({ x, direction });\n const reflection = compactReflection({ sheetId: sheet.id, selectingZone, choosing });\n if (sheet.registry.lastHistory) {\n sheet.registry.lastHistory.undoReflection = reflection;\n sheet.registry.lastHistory.redoReflection = reflection;\n }\n return {\n ...store,\n sheetReactive: { current: sheet },\n };\n }\n}\nexport const sortRows = new SortRowsAction().bind();\n\nclass FilterRowsAction<T extends { x?: number; filter?: FilterConfig }> extends CoreAction<T> {\n mutation = true;\n reduce(store: StoreType, payload: T): StoreWithCallback {\n const { x, filter } = payload;\n const { sheetReactive: sheetRef, selectingZone, choosing } = store;\n const sheet = sheetRef.current;\n if (sheet == null) {\n return store;\n }\n sheet.filterRows({ x, filter });\n const reflection = compactReflection({ sheetId: sheet.id, selectingZone, choosing });\n if (sheet.registry.lastHistory) {\n sheet.registry.lastHistory.undoReflection = reflection;\n sheet.registry.lastHistory.redoReflection = reflection;\n }\n let newChoosing = choosing;\n if (sheet.isRowFiltered(choosing.y)) {\n for (let y = 1; y <= sheet.numRows; y++) {\n if (!sheet.isRowFiltered(y)) {\n newChoosing = { y, x: choosing.x };\n break;\n }\n }\n }\n return {\n ...store,\n choosing: newChoosing,\n selectingZone: newChoosing !== choosing ? resetZone : selectingZone,\n sheetReactive: { current: sheet },\n callback: ({ sheetReactive: sheetRef }) => {\n const t = sheetRef.current;\n if (t) {\n t.registry.transmit({\n cutting: false,\n copyingZone: resetZone,\n });\n }\n },\n };\n }\n}\nexport const filterRows = new FilterRowsAction().bind();\n\nclass SetColumnMenuAction<T extends { x: number; position: { y: number; x: number } } | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n columnMenuState: payload,\n };\n }\n}\nexport const setColumnMenu = new SetColumnMenuAction().bind();\n\nclass SetRowMenuAction<T extends { y: number; position: { y: number; x: number } } | null> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n rowMenuState: payload,\n };\n }\n}\nexport const setRowMenu = new SetRowMenuAction().bind();\n\nclass SetEditorHoveringAction<T extends boolean> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n editorHovering: payload,\n };\n }\n}\nexport const setEditorHovering = new SetEditorHoveringAction().bind();\n\nclass setStoreAction<T extends Partial<StoreType>> extends CoreAction<T> {\n reduce(store: StoreType, payload: T): StoreWithCallback {\n return {\n ...store,\n ...payload,\n };\n }\n}\nexport const setStore = new setStoreAction().bind();\n\nexport const userActions = {\n blur,\n copy,\n cut,\n paste,\n escape,\n choose,\n select,\n selectRows,\n selectCols,\n drag,\n search,\n write,\n clear,\n undo,\n redo,\n arrow,\n walk,\n insertRowsAbove,\n insertRowsBelow,\n insertColsLeft,\n insertColsRight,\n removeRows,\n removeCols,\n sortRows,\n filterRows,\n};\n","import { useEffect, useState, useRef } from 'react';\nimport { createBook, type BookType, type RegistryProps, type TransmitProps } from '@gridsheet/core';\nimport { updateSheet } from '../store/actions';\n\n// Return the document object with SSR.\nexport const useBrowser = () => {\n const [ok, setOk] = useState(false);\n useEffect(() => {\n setOk(true);\n }, []);\n if (ok && typeof window !== 'undefined') {\n return { window, document };\n }\n return { window: null, document: null };\n};\n\nexport const useDebounce = <T>(value: T, delay = 100) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n timerRef.current = window.setTimeout(() => setDebouncedValue(value), delay);\n return () => {\n window.clearTimeout(timerRef.current);\n };\n }, [value, delay]);\n return debouncedValue;\n};\n\nexport const useDebounceCallback = (callback: (...args: any[]) => void, delay = 100) => {\n const debouncedCallback = useRef(callback);\n const timerRef = useRef<number>();\n\n useEffect(() => {\n debouncedCallback.current = callback;\n }, [callback]);\n\n return (...args: any[]) => {\n window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => {\n debouncedCallback.current(...args);\n }, delay);\n };\n};\n\nexport const useBook = (props: RegistryProps = {}) => {\n const [book, setBook] = useState<BookType>(() => createBook(props));\n const { registry } = book;\n registry.updateSheet = updateSheet;\n registry.transmit = (patch?: TransmitProps) => {\n Object.assign(registry, patch);\n if (!registry.ready) {\n return;\n }\n requestAnimationFrame(() => setBook({ registry }));\n };\n useEffect(() => {\n Object.assign(registry, props);\n }, [props]);\n return book;\n};\n"],"names":["_a","sheetRef","nextSelectingZone","newSheet","prevention","nextY","nextX"],"mappings":"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"}
|