@gridsheet/preact-core 3.0.4 → 3.0.6
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/{hooks-DPIr6WaL.mjs → hooks-DKULalw8.mjs} +60 -2
- package/dist/hooks-DKULalw8.mjs.map +1 -0
- package/dist/index.js +67 -17
- package/dist/index.js.map +1 -1
- package/dist/spellbook.js +1 -1
- package/dist/store/actions.d.ts +4 -0
- package/package.json +3 -3
- package/dist/hooks-DPIr6WaL.mjs.map +0 -1
|
@@ -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;
|
|
@@ -1186,6 +1231,10 @@ class RemoveRowsAction extends CoreAction {
|
|
|
1186
1231
|
}
|
|
1187
1232
|
const removeRows = new RemoveRowsAction().bind();
|
|
1188
1233
|
class RemoveColsAction extends CoreAction {
|
|
1234
|
+
constructor() {
|
|
1235
|
+
super(...arguments);
|
|
1236
|
+
this.mutation = true;
|
|
1237
|
+
}
|
|
1189
1238
|
reduce(store, payload) {
|
|
1190
1239
|
const { numCols, x, operator } = payload;
|
|
1191
1240
|
const { sheetReactive: sheetRef, selectingZone, choosing, editorRef } = store;
|
|
@@ -1217,6 +1266,10 @@ class RemoveColsAction extends CoreAction {
|
|
|
1217
1266
|
}
|
|
1218
1267
|
const removeCols = new RemoveColsAction().bind();
|
|
1219
1268
|
class SortRowsAction extends CoreAction {
|
|
1269
|
+
constructor() {
|
|
1270
|
+
super(...arguments);
|
|
1271
|
+
this.mutation = true;
|
|
1272
|
+
}
|
|
1220
1273
|
reduce(store, payload) {
|
|
1221
1274
|
const { x, direction } = payload;
|
|
1222
1275
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1238,6 +1291,10 @@ class SortRowsAction extends CoreAction {
|
|
|
1238
1291
|
}
|
|
1239
1292
|
const sortRows = new SortRowsAction().bind();
|
|
1240
1293
|
class FilterRowsAction extends CoreAction {
|
|
1294
|
+
constructor() {
|
|
1295
|
+
super(...arguments);
|
|
1296
|
+
this.mutation = true;
|
|
1297
|
+
}
|
|
1241
1298
|
reduce(store, payload) {
|
|
1242
1299
|
const { x, filter } = payload;
|
|
1243
1300
|
const { sheetReactive: sheetRef, selectingZone, choosing } = store;
|
|
@@ -1403,7 +1460,8 @@ export {
|
|
|
1403
1460
|
setSearchRange as T,
|
|
1404
1461
|
useBook as U,
|
|
1405
1462
|
reducer as V,
|
|
1406
|
-
|
|
1463
|
+
isMutationAction as W,
|
|
1464
|
+
userActions as X,
|
|
1407
1465
|
setInputting as a,
|
|
1408
1466
|
updateSheet as b,
|
|
1409
1467
|
undo as c,
|
|
@@ -1431,4 +1489,4 @@ export {
|
|
|
1431
1489
|
removeRows as y,
|
|
1432
1490
|
insertColsRight as z
|
|
1433
1491
|
};
|
|
1434
|
-
//# sourceMappingURL=hooks-
|
|
1492
|
+
//# sourceMappingURL=hooks-DKULalw8.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-DKULalw8.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 return {\n ...store,\n sheetReactive: { current: sheet },\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 return {\n ...store,\n sheetReactive: { current: sheet },\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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"}
|
package/dist/index.js
CHANGED
|
@@ -4,8 +4,8 @@ import { BaseFunction, BaseFunctionAsync, DEFAULT_HISTORY_LIMIT, FormulaError as
|
|
|
4
4
|
import { jsxs, jsx, Fragment } from "preact/compat/jsx-runtime";
|
|
5
5
|
import React, { createContext, useRef, useContext, useLayoutEffect, useState, useMemo, useCallback, createPortal, memo, useEffect, createRef, useReducer } from "preact/compat";
|
|
6
6
|
import { Children, Component, Fragment as Fragment2, PureComponent, StrictMode, Suspense, SuspenseList, cloneElement, render as render2, createContext as createContext2, createElement, createFactory, createPortal as createPortal2, createRef as createRef2, findDOMNode, forwardRef, hydrate, isValidElement, lazy, memo as memo2, unmountComponentAtNode, unstable_batchedUpdates, useCallback as useCallback2, useContext as useContext2, useDebugValue, useEffect as useEffect2, useImperativeHandle, useLayoutEffect as useLayoutEffect2, useMemo as useMemo2, useReducer as useReducer2, useRef as useRef2, useState as useState2, version } from "preact/compat";
|
|
7
|
-
import { u as useBrowser, s as setEditingAddress, w as write, a as setInputting, b as updateSheet, r as redo, c as undo, d as cut, e as setSearchQuery, f as setEntering, g as copy, h as select, i as arrow, j as escape, k as clear, l as walk, p as paste, m as setEditorHovering, n as setStore, o as setResizingPositionY, q as setResizingPositionX, t as filterRows, v as sortRows, x as removeCols, y as removeRows, z as insertColsRight, A as insertColsLeft, B as insertRowsBelow, C as insertRowsAbove, D as setContextMenuPosition, E as setColumnMenu, F as setRowMenu, G as isXSheetFocused, H as setEditorRect, I as choose, J as drag, K as setDragging, L as submitAutofill, M as setAutofillDraggingTo, N as selectCols, O as useDebounceCallback, P as selectRows, Q as search, R as setSearchCaseSensitive, S as setSearchRegex, T as setSearchRange, U as useBook, V as reducer } from "./hooks-
|
|
8
|
-
import {
|
|
7
|
+
import { u as useBrowser, s as setEditingAddress, w as write, a as setInputting, b as updateSheet, r as redo, c as undo, d as cut, e as setSearchQuery, f as setEntering, g as copy, h as select, i as arrow, j as escape, k as clear, l as walk, p as paste, m as setEditorHovering, n as setStore, o as setResizingPositionY, q as setResizingPositionX, t as filterRows, v as sortRows, x as removeCols, y as removeRows, z as insertColsRight, A as insertColsLeft, B as insertRowsBelow, C as insertRowsAbove, D as setContextMenuPosition, E as setColumnMenu, F as setRowMenu, G as isXSheetFocused, H as setEditorRect, I as choose, J as drag, K as setDragging, L as submitAutofill, M as setAutofillDraggingTo, N as selectCols, O as useDebounceCallback, P as selectRows, Q as search, R as setSearchCaseSensitive, S as setSearchRegex, T as setSearchRange, U as useBook, V as reducer, W as isMutationAction } from "./hooks-DKULalw8.mjs";
|
|
8
|
+
import { X } from "./hooks-DKULalw8.mjs";
|
|
9
9
|
const Context = createContext(
|
|
10
10
|
{}
|
|
11
11
|
);
|
|
@@ -720,6 +720,7 @@ const Editor = ({ mode }) => {
|
|
|
720
720
|
const [shiftKey, setShiftKey] = useState(false);
|
|
721
721
|
const [selectionStart, setSelectionStart] = useState(0);
|
|
722
722
|
const [isFocused, setIsFocused] = useState(false);
|
|
723
|
+
const composingRef = useRef(false);
|
|
723
724
|
const {
|
|
724
725
|
choosing,
|
|
725
726
|
inputting,
|
|
@@ -889,6 +890,9 @@ const Editor = ({ mode }) => {
|
|
|
889
890
|
if (!sheet) {
|
|
890
891
|
return;
|
|
891
892
|
}
|
|
893
|
+
if (e.nativeEvent.isComposing || composingRef.current) {
|
|
894
|
+
return;
|
|
895
|
+
}
|
|
892
896
|
if (isKeyDown) {
|
|
893
897
|
return;
|
|
894
898
|
}
|
|
@@ -1367,6 +1371,17 @@ const Editor = ({ mode }) => {
|
|
|
1367
1371
|
onPaste: handlePaste,
|
|
1368
1372
|
onKeyDown: handleKeyDown,
|
|
1369
1373
|
onKeyUp: handleKeyUpInternal,
|
|
1374
|
+
onCompositionStart: () => {
|
|
1375
|
+
composingRef.current = true;
|
|
1376
|
+
if (!editing) {
|
|
1377
|
+
dispatch(setEditingAddress(address));
|
|
1378
|
+
dispatch(setInputting(""));
|
|
1379
|
+
}
|
|
1380
|
+
},
|
|
1381
|
+
onCompositionEnd: (e) => {
|
|
1382
|
+
composingRef.current = false;
|
|
1383
|
+
dispatch(setInputting(e.currentTarget.value));
|
|
1384
|
+
},
|
|
1370
1385
|
onMouseEnter: () => {
|
|
1371
1386
|
dispatch(setEditorHovering(true));
|
|
1372
1387
|
},
|
|
@@ -4246,7 +4261,14 @@ const Tabular = () => {
|
|
|
4246
4261
|
return;
|
|
4247
4262
|
}
|
|
4248
4263
|
setVirtualized(virtualize(sheet, tabularRef.current));
|
|
4249
|
-
}, [
|
|
4264
|
+
}, [
|
|
4265
|
+
tabularRef.current,
|
|
4266
|
+
sheetReactive,
|
|
4267
|
+
(_a = mainRef.current) == null ? void 0 : _a.clientHeight,
|
|
4268
|
+
(_b = mainRef.current) == null ? void 0 : _b.clientWidth,
|
|
4269
|
+
sheetHeight,
|
|
4270
|
+
sheetWidth
|
|
4271
|
+
]);
|
|
4250
4272
|
useEffect(() => {
|
|
4251
4273
|
const el = tabularRef.current;
|
|
4252
4274
|
if (!el) {
|
|
@@ -4266,8 +4288,8 @@ const Tabular = () => {
|
|
|
4266
4288
|
{
|
|
4267
4289
|
className: "gs-tabular",
|
|
4268
4290
|
style: {
|
|
4269
|
-
width: sheetWidth === -1 ? void 0 : sheetWidth,
|
|
4270
|
-
height: sheetHeight === -1 ? void 0 : sheetHeight
|
|
4291
|
+
width: sheetWidth === -1 ? void 0 : Math.min(sheetWidth, sheet.totalWidth),
|
|
4292
|
+
height: sheetHeight === -1 ? void 0 : Math.min(sheetHeight, sheet.totalHeight)
|
|
4271
4293
|
},
|
|
4272
4294
|
ref: tabularRef,
|
|
4273
4295
|
onMouseMove: handleMouseMove,
|
|
@@ -4443,6 +4465,7 @@ const FormulaBar = ({ ready }) => {
|
|
|
4443
4465
|
optionsAll,
|
|
4444
4466
|
functions: sheet == null ? void 0 : sheet.registry.functions
|
|
4445
4467
|
});
|
|
4468
|
+
const composingRef = useRef(false);
|
|
4446
4469
|
const largeInput = largeEditorRef.current;
|
|
4447
4470
|
const handleInput = useCallback((e) => {
|
|
4448
4471
|
dispatch(setInputting(e.currentTarget.value));
|
|
@@ -4485,6 +4508,9 @@ const FormulaBar = ({ ready }) => {
|
|
|
4485
4508
|
);
|
|
4486
4509
|
const handleKeyDown = useCallback(
|
|
4487
4510
|
(e) => {
|
|
4511
|
+
if (e.nativeEvent.isComposing || composingRef.current) {
|
|
4512
|
+
return;
|
|
4513
|
+
}
|
|
4488
4514
|
if (e.ctrlKey || !sheet) {
|
|
4489
4515
|
return true;
|
|
4490
4516
|
}
|
|
@@ -4716,6 +4742,13 @@ const FormulaBar = ({ ready }) => {
|
|
|
4716
4742
|
},
|
|
4717
4743
|
onKeyDown: handleKeyDown,
|
|
4718
4744
|
onKeyUp: updateScroll,
|
|
4745
|
+
onCompositionStart: () => {
|
|
4746
|
+
composingRef.current = true;
|
|
4747
|
+
},
|
|
4748
|
+
onCompositionEnd: (e) => {
|
|
4749
|
+
composingRef.current = false;
|
|
4750
|
+
dispatch(setInputting(e.currentTarget.value));
|
|
4751
|
+
},
|
|
4719
4752
|
onScroll: updateScroll,
|
|
4720
4753
|
onMouseEnter: (e) => {
|
|
4721
4754
|
dispatch(setEditorHovering(true));
|
|
@@ -4960,7 +4993,7 @@ function GridSheet({
|
|
|
4960
4993
|
style,
|
|
4961
4994
|
book: initialBook
|
|
4962
4995
|
}) {
|
|
4963
|
-
var _a, _b, _c
|
|
4996
|
+
var _a, _b, _c;
|
|
4964
4997
|
const { sheetResize, showFormulaBar = true, mode = "light" } = options;
|
|
4965
4998
|
const rootRef = useRef(null);
|
|
4966
4999
|
const flashRef = useRef(null);
|
|
@@ -5065,12 +5098,9 @@ function GridSheet({
|
|
|
5065
5098
|
first = false;
|
|
5066
5099
|
return;
|
|
5067
5100
|
}
|
|
5068
|
-
|
|
5069
|
-
|
|
5070
|
-
|
|
5071
|
-
if (!options.sheetWidth) {
|
|
5072
|
-
setSheetWidth(el.clientWidth);
|
|
5073
|
-
}
|
|
5101
|
+
const root = rootRef.current;
|
|
5102
|
+
setSheetHeight(root ? Math.min(el.clientHeight, root.clientHeight) : el.clientHeight);
|
|
5103
|
+
setSheetWidth(root ? Math.min(el.clientWidth, root.clientWidth) : el.clientWidth);
|
|
5074
5104
|
});
|
|
5075
5105
|
ro.observe(el);
|
|
5076
5106
|
return () => ro.disconnect();
|
|
@@ -5085,7 +5115,26 @@ function GridSheet({
|
|
|
5085
5115
|
setSheetWidth(options.sheetWidth);
|
|
5086
5116
|
}
|
|
5087
5117
|
}, [options.sheetWidth]);
|
|
5088
|
-
|
|
5118
|
+
const [loading, setLoading] = useState(false);
|
|
5119
|
+
useEffect(() => {
|
|
5120
|
+
if (loading) {
|
|
5121
|
+
setLoading(false);
|
|
5122
|
+
}
|
|
5123
|
+
});
|
|
5124
|
+
const wrappedDispatch = useCallback(
|
|
5125
|
+
(action) => {
|
|
5126
|
+
if (!isMutationAction(action.type)) {
|
|
5127
|
+
dispatch(action);
|
|
5128
|
+
return;
|
|
5129
|
+
}
|
|
5130
|
+
setLoading(true);
|
|
5131
|
+
requestAnimationFrame(() => {
|
|
5132
|
+
dispatch(action);
|
|
5133
|
+
});
|
|
5134
|
+
},
|
|
5135
|
+
[dispatch]
|
|
5136
|
+
);
|
|
5137
|
+
return /* @__PURE__ */ jsx(Context.Provider, { value: { store, dispatch: wrappedDispatch }, children: /* @__PURE__ */ jsxs(
|
|
5089
5138
|
"div",
|
|
5090
5139
|
{
|
|
5091
5140
|
className: `gs-root1 ${registry.ready ? "gs-initialized" : ""}`,
|
|
@@ -5107,8 +5156,8 @@ function GridSheet({
|
|
|
5107
5156
|
ref: mainRef,
|
|
5108
5157
|
style: {
|
|
5109
5158
|
//width: '100%',
|
|
5110
|
-
maxWidth:
|
|
5111
|
-
maxHeight: (((
|
|
5159
|
+
maxWidth: "100%",
|
|
5160
|
+
maxHeight: mainRef.current ? window.innerHeight - mainRef.current.getBoundingClientRect().top : (((_c = store.sheetReactive.current) == null ? void 0 : _c.fullHeight) || 0) + 2,
|
|
5112
5161
|
resize: sheetResize,
|
|
5113
5162
|
...style
|
|
5114
5163
|
},
|
|
@@ -5120,7 +5169,8 @@ function GridSheet({
|
|
|
5120
5169
|
/* @__PURE__ */ jsx(ColumnMenu, {}),
|
|
5121
5170
|
/* @__PURE__ */ jsx(RowMenu, {}),
|
|
5122
5171
|
/* @__PURE__ */ jsx(Resizer, {}),
|
|
5123
|
-
/* @__PURE__ */ jsx(Emitter, {})
|
|
5172
|
+
/* @__PURE__ */ jsx(Emitter, {}),
|
|
5173
|
+
loading && /* @__PURE__ */ jsx("div", { className: "gs-loading-overlay", children: /* @__PURE__ */ jsx("div", { className: "gs-loading-spinner" }) })
|
|
5124
5174
|
]
|
|
5125
5175
|
}
|
|
5126
5176
|
)
|
|
@@ -5299,7 +5349,7 @@ export {
|
|
|
5299
5349
|
useSheetRef,
|
|
5300
5350
|
useState2 as useState,
|
|
5301
5351
|
useStoreRef,
|
|
5302
|
-
|
|
5352
|
+
X as userActions,
|
|
5303
5353
|
version,
|
|
5304
5354
|
x2c2 as x2c,
|
|
5305
5355
|
y2r2 as y2r,
|