{"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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"}