@gridsheet/react-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/components/Editor.d.ts.map +1 -1
- package/dist/components/FormulaBar.d.ts.map +1 -1
- package/dist/components/GridSheet.d.ts.map +1 -1
- package/dist/components/Tabular.d.ts.map +1 -1
- package/dist/hooks-CcD8I6FA.mjs +1147 -0
- package/dist/hooks-CcD8I6FA.mjs.map +1 -0
- package/dist/index.js +1993 -1953
- package/dist/index.js.map +1 -1
- package/dist/spellbook.js +1 -1
- package/dist/store/actions.d.ts +4 -0
- package/dist/store/actions.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/hooks-Y7BI_RNj.mjs +0 -1103
- package/dist/hooks-Y7BI_RNj.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks-CcD8I6FA.mjs","sources":["../src/store/helpers.ts","../src/store/actions.ts","../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":["compactReflection","reflection","result","restrictPoints","store","sheet","choosing","selectingZone","y","x","y1","x1","y2","x2","numRows","numCols","FLASH_CLASS","FLASH_DURATION_MS","flashSheet","el","flashWithCallback","callback","s","initSearchStatement","searchQuery","searchCaseSensitive","searchRegex","searchRange","matchingCells","matcher","flags","regex","v","q","startY","endY","startX","endX","x2c","y2r","matchingCellIndex","address","a2p","isXSheetFocused","sheetId","sheetRef","resetZone","actions","reducer","action","act","registry","_a","_b","cached","newStore","_CoreAction","payload","CoreAction","isMutationAction","type","SetSearchQueryAction","setSearchQuery","SetSearchCaseSensitiveAction","setSearchCaseSensitive","SetSearchRegexAction","setSearchRegex","SetSearchRangeAction","setSearchRange","SetEditingAddressAction","setEditingAddress","SetAutofillDraggingToAction","setAutofillDraggingTo","SubmitAutofillAction","autofill","Autofill","areaToZone","submitAutofill","SetContextMenuPositionAction","setContextMenuPosition","SetResizingPositionYAction","setResizingPositionY","SetResizingPositionXAction","setResizingPositionX","SetEnteringAction","setEntering","UpdateSheetAction","updateSheet","SetEditorRectAction","setEditorRect","SetDragging","setDragging","BlurAction","blur","CopyAction","copy","CutAction","cut","PasteAction","dstSheetRef","dstSheet","copyingSheetId","copyingZone","cutting","srcSheet","selectingArea","zoneToArea","copyingArea","matrix","onlyValue","src","dy","dx","areaDiff","dst","nextSelectingZone","restrictZone","newSheet","height","width","matrixShape","superposed","superposeArea","paste","EscapeAction","escape","ChooseAction","choose","SelectAction","select","SelectRowsAction","range","start","end","choosingY","selectRows","SelectColsAction","selectCols","DragAction","drag","SearchAction","search","WriteAction","value","point","write","ClearAction","top","left","bottom","right","diff","diffCount","cell","p2a","prevention","clear","UndoAction","history","dispatch","dstStore","setStore","undo","RedoAction","redo","ArrowAction","shiftKey","deltaY","deltaX","tabularRef","dragEndY","dragEndX","nextY","nextX","resolvedY","dir","editorTop","editorLeft","i","DEFAULT_HEIGHT","_c","DEFAULT_WIDTH","_d","smartScroll","arrow","WalkAction","gridOuterRef","lo","hi","walk","SetInputtingAction","setInputting","InsertRowsAboveAction","operator","insertRowsAbove","InsertRowsBelowAction","editorRef","nextChoosing","insertRowsBelow","InsertColsLeftAction","insertColsLeft","InsertColsRightAction","insertColsRight","RemoveRowsAction","removeRows","RemoveColsAction","removeCols","SortRowsAction","direction","sortRows","FilterRowsAction","filter","newChoosing","t","filterRows","SetColumnMenuAction","setColumnMenu","SetRowMenuAction","setRowMenu","SetEditorHoveringAction","setEditorHovering","setStoreAction","userActions","useBrowser","ok","setOk","useState","useEffect","useDebounceCallback","delay","debouncedCallback","useRef","timerRef","args","useBook","props","book","setBook","createBook","patch"],"mappings":"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"}
|