@rowsncolumns/spreadsheet 10.5.1 → 10.5.3

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.
Files changed (89) hide show
  1. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  2. package/dist/cjs/components/canvas-grid/index.js +103 -71
  3. package/dist/cjs/components/canvas-grid/typings.d.ts +18 -1
  4. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  5. package/dist/cjs/components/cell/cell-text-runs.d.ts +10 -3
  6. package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
  7. package/dist/cjs/components/cell/cell-text-runs.js +21 -9
  8. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  9. package/dist/cjs/components/cell/index.js +9 -5
  10. package/dist/cjs/components/cell/line-height.d.ts +22 -0
  11. package/dist/cjs/components/cell/line-height.d.ts.map +1 -0
  12. package/dist/cjs/components/cell/line-height.js +32 -0
  13. package/dist/cjs/components/cell/typings.d.ts +8 -2
  14. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  15. package/dist/cjs/components/formula-input/index.d.ts.map +1 -1
  16. package/dist/cjs/components/formula-input/index.js +28 -1
  17. package/dist/cjs/hooks/export-range-tiles.d.ts +81 -0
  18. package/dist/cjs/hooks/export-range-tiles.d.ts.map +1 -0
  19. package/dist/cjs/hooks/export-range-tiles.js +171 -0
  20. package/dist/cjs/hooks/use-cell-renderer.d.ts +6 -1
  21. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  22. package/dist/cjs/hooks/use-cell-renderer.js +3 -2
  23. package/dist/cjs/hooks/use-copy-paste-cut.d.ts +5 -1
  24. package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
  25. package/dist/cjs/hooks/use-copy-paste-cut.js +19 -5
  26. package/dist/cjs/hooks/use-editor-submit.d.ts +7 -1
  27. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  28. package/dist/cjs/hooks/use-editor-submit.js +36 -16
  29. package/dist/cjs/hooks/use-export-range.d.ts +14 -6
  30. package/dist/cjs/hooks/use-export-range.d.ts.map +1 -1
  31. package/dist/cjs/hooks/use-export-range.js +240 -158
  32. package/dist/cjs/hooks/use-grid-children.d.ts +4 -1
  33. package/dist/cjs/hooks/use-grid-children.d.ts.map +1 -1
  34. package/dist/cjs/hooks/use-grid-children.js +4 -2
  35. package/dist/cjs/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  36. package/dist/cjs/hooks/use-navigate-sheet-range.js +5 -2
  37. package/dist/cjs/hooks/use-sizer.d.ts +8 -2
  38. package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
  39. package/dist/cjs/hooks/use-sizer.js +54 -33
  40. package/dist/cjs/providers/spreadsheet-provider.d.ts +11 -2
  41. package/dist/cjs/providers/spreadsheet-provider.d.ts.map +1 -1
  42. package/dist/cjs/providers/spreadsheet-provider.js +7 -5
  43. package/dist/cjs/release-date.js +1 -1
  44. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  45. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  46. package/dist/esm/components/canvas-grid/index.js +44 -13
  47. package/dist/esm/components/canvas-grid/typings.d.ts +18 -1
  48. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  49. package/dist/esm/components/cell/cell-text-runs.d.ts +10 -3
  50. package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
  51. package/dist/esm/components/cell/cell-text-runs.js +14 -9
  52. package/dist/esm/components/cell/index.d.ts.map +1 -1
  53. package/dist/esm/components/cell/index.js +7 -3
  54. package/dist/esm/components/cell/line-height.d.ts +22 -0
  55. package/dist/esm/components/cell/line-height.d.ts.map +1 -0
  56. package/dist/esm/components/cell/line-height.js +25 -0
  57. package/dist/esm/components/cell/typings.d.ts +8 -2
  58. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  59. package/dist/esm/components/formula-input/index.d.ts.map +1 -1
  60. package/dist/esm/components/formula-input/index.js +26 -1
  61. package/dist/esm/hooks/export-range-tiles.d.ts +81 -0
  62. package/dist/esm/hooks/export-range-tiles.d.ts.map +1 -0
  63. package/dist/esm/hooks/export-range-tiles.js +126 -0
  64. package/dist/esm/hooks/use-cell-renderer.d.ts +6 -1
  65. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  66. package/dist/esm/hooks/use-cell-renderer.js +3 -2
  67. package/dist/esm/hooks/use-copy-paste-cut.d.ts +5 -1
  68. package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
  69. package/dist/esm/hooks/use-copy-paste-cut.js +17 -3
  70. package/dist/esm/hooks/use-editor-submit.d.ts +7 -1
  71. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  72. package/dist/esm/hooks/use-editor-submit.js +24 -6
  73. package/dist/esm/hooks/use-export-range.d.ts +14 -6
  74. package/dist/esm/hooks/use-export-range.d.ts.map +1 -1
  75. package/dist/esm/hooks/use-export-range.js +158 -120
  76. package/dist/esm/hooks/use-grid-children.d.ts +4 -1
  77. package/dist/esm/hooks/use-grid-children.d.ts.map +1 -1
  78. package/dist/esm/hooks/use-grid-children.js +4 -2
  79. package/dist/esm/hooks/use-navigate-sheet-range.d.ts.map +1 -1
  80. package/dist/esm/hooks/use-navigate-sheet-range.js +5 -2
  81. package/dist/esm/hooks/use-sizer.d.ts +8 -2
  82. package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
  83. package/dist/esm/hooks/use-sizer.js +53 -31
  84. package/dist/esm/providers/spreadsheet-provider.d.ts +11 -2
  85. package/dist/esm/providers/spreadsheet-provider.d.ts.map +1 -1
  86. package/dist/esm/providers/spreadsheet-provider.js +8 -6
  87. package/dist/esm/release-date.js +1 -1
  88. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  89. package/package.json +6 -6
@@ -120,9 +120,20 @@ var helpers_2 = require("./helpers");
120
120
  */
121
121
  /** Where the grid focuses when no cell is given (A1); mirrors spreadsheet-state's `defaultCellCoords` without importing it — that package depends on this one. */
122
122
  var defaultCellCoords = { rowIndex: 1, columnIndex: 1 };
123
+ /**
124
+ * Whether a registered editor's DOM has been removed: an input that unmounted while focused
125
+ * gets no blur from Chromium, so its `activeEditor` registration can outlive it. Such an editor
126
+ * cannot hold focus, so the grid treats it as absent (rowsncolumns/spreadsheet#1131). An editor
127
+ * that exposes no element is trusted as live.
128
+ */
129
+ function isDetachedEditor(editor) {
130
+ var _a;
131
+ var element = (_a = editor.el) === null || _a === void 0 ? void 0 : _a.call(editor);
132
+ return element != null && !element.isConnected;
133
+ }
123
134
  function CanvasGridComponent(props, forwardedRef) {
124
135
  var _a, _b, _c, _d;
125
- var licenseKey = props.licenseKey, sheetId = props.sheetId, sheetType = props.sheetType, _e = props.ChartSheetView, ChartSheetViewComponent = _e === void 0 ? chart_sheet_view_1.ChartSheetView : _e, instanceId = props.instanceId, _f = props.activeCell, activeCell = _f === void 0 ? config_1.DEFAULT_ACTIVE_CELL : _f, _g = props.selections, selections = _g === void 0 ? config_1.DEFAULT_ARRAY : _g, _h = props.frozenColumnCount, frozenColumnCount = _h === void 0 ? 0 : _h, _j = props.frozenRowCount, frozenRowCount = _j === void 0 ? 0 : _j, _k = props.rowCount, rowCount = _k === void 0 ? config_1.DEFAULT_ROW_COUNT : _k, _l = props.columnCount, columnCount = _l === void 0 ? config_1.DEFAULT_COLUMN_COUNT : _l, autoFocus = props.autoFocus, basicFilter = props.basicFilter, tables = props.tables, namedRanges = props.namedRanges, _m = props.bandedRanges, bandedRanges = _m === void 0 ? config_1.DEFAULT_ARRAY : _m, _o = props.tableBorderColor, tableBorderColor = _o === void 0 ? "#008000" : _o, _p = props.filterIconColor, filterIconColor = _p === void 0 ? "#008000" : _p, conditionalFormats = props.conditionalFormats, _q = props.showFilterIcon, showFilterIcon = _q === void 0 ? true : _q, _r = props.showCalculatedColumnIcon, showCalculatedColumnIcon = _r === void 0 ? true : _r, _s = props.showHeaders, showHeaders = _s === void 0 ? true : _s, _t = props.defaultColumnWidth, defaultColumnWidth = _t === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _t, _u = props.defaultRowHeight, defaultRowHeight = _u === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _u, _v = props.columnHeaderHeight, columnHeaderHeight = _v === void 0 ? config_1.COLUMN_HEADER_HEIGHT : _v, _w = props.rowHeaderWidth, rowHeaderWidth = _w === void 0 ? config_1.ROW_HEADER_WIDTH : _w, _x = props.gridLineColor, gridLineColor = _x === void 0 ? config_1.GRIDLINE_COLOR : _x, _y = props.cellBackgroundColor, cellBackgroundColor = _y === void 0 ? config_1.DEFAULT_CELL_BACKGROUND_COLOR : _y, _z = props.cellColor, cellColor = _z === void 0 ? config_1.DEFAULT_CELL_COLOR : _z, _0 = props.headerBorderColor, headerBorderColor = _0 === void 0 ? config_1.DEFAULT_HEADER_BORDER_COLOR : _0, _1 = props.headerBackgroundColor, headerBackgroundColor = _1 === void 0 ? config_1.DEFAULT_HEADER_BG : _1, _2 = props.headerColor, headerColor = _2 === void 0 ? config_1.DEFAULT_HEADER_COLOR : _2, _3 = props.headerActiveBackgroundColor, headerActiveBackgroundColor = _3 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_BG : _3, _4 = props.headerSelectedBackgroundColor, headerSelectedBackgroundColor = _4 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_BG : _4, _5 = props.headerSelectedColor, headerSelectedColor = _5 === void 0 ? "white" : _5, _6 = props.headerTableBackgroundColor, headerTableBackgroundColor = _6 === void 0 ? config_1.DEFAULT_HEADER_TABLE_BG : _6, _7 = props.headerTableActiveBackgroundColor, headerTableActiveBackgroundColor = _7 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_TABLE_BG : _7, _8 = props.headerTableSelectedBackgroundColor, headerTableSelectedBackgroundColor = _8 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_TABLE_BG : _8, _9 = props.frozenShadowColor, frozenShadowColor = _9 === void 0 ? headerBorderColor : _9, _10 = props.frozenShadowThickness, frozenShadowThickness = _10 === void 0 ? 1 : _10, _11 = props.selectionBackgroundColor, selectionBackgroundColor = _11 === void 0 ? config_1.SELECTION_BG : _11, _12 = props.selectionBorderColor, selectionBorderColor = _12 === void 0 ? config_1.SELECTION_BORDER : _12, _13 = props.selectionDragBorderColor, selectionDragBorderColor = _13 === void 0 ? config_1.SELECTION_BORDER : _13, chartSelectedColor = props.chartSelectedColor, _14 = props.chipBackgroundColor, chipBackgroundColor = _14 === void 0 ? config_1.CHIP_COLOR : _14, _15 = props.merges, merges = _15 === void 0 ? config_1.DEFAULT_ARRAY : _15, borderStyles = props.borderStyles, protectedRanges = props.protectedRanges, _16 = props.isWorkbookProtected, isWorkbookProtectedProp = _16 === void 0 ? false : _16, getSheetProtection = props.getSheetProtection, pivotTables = props.pivotTables, charts = props.charts, onUpdateChart = props.onUpdateChart, onChangeZOrder = props.onChangeZOrder, embeds = props.embeds, slicers = props.slicers, _17 = props.rowMetadata, rowMetadata = _17 === void 0 ? config_1.DEFAULT_ARRAY : _17, _18 = props.columnMetadata, columnMetadata = _18 === void 0 ? config_1.DEFAULT_ARRAY : _18, _19 = props.scale, scale = _19 === void 0 ? 1 : _19, _20 = props.zoomSpeed, zoomSpeed = _20 === void 0 ? 1 : _20, _21 = props.overscanCount, overscanCount = _21 === void 0 ? 3 : _21, _22 = props.enableEditOnEnterKey, enableEditOnEnterKey = _22 === void 0 ? true : _22, _23 = props.enableTextOverflow, enableTextOverflow = _23 === void 0 ? true : _23, _showGridLines = props.showGridLines, _24 = props.showFormulas, showFormulas = _24 === void 0 ? false : _24, _25 = props.protectFormulas, protectFormulas = _25 === void 0 ? false : _25, _26 = props.showFrozenSeparator, showFrozenSeparator = _26 === void 0 ? true : _26, _27 = props.HeaderCell, HeaderCell = _27 === void 0 ? header_cell_1.HeaderCell : _27, _28 = props.Cell, Cell = _28 === void 0 ? cell_1.Cell : _28, _29 = props.SelectionTitleComponent, SelectionTitleComponent = _29 === void 0 ? title_1.SelectionTitle : _29, _30 = props.CellEditor, CellEditor = _30 === void 0 ? cell_editor_1.CellEditor : _30, CellTooltip = props.CellTooltip, _31 = props.ContextMenu, ContextMenu = _31 === void 0 ? context_menu_1.ContextMenu : _31, _32 = props.ContextMenuWrapper, ContextMenuWrapper = _32 === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _32, _33 = props.FilterBox, FilterBox = _33 === void 0 ? filter_box_1.FilterBox : _33, _34 = props.HeaderMoveDragComponent, HeaderMoveDragComponent = _34 === void 0 ? header_move_1.HeaderMoveDragComponent : _34, SuggestionsDropdown = props.SuggestionsDropdown, _35 = props.stickyEditor, stickyEditor = _35 === void 0 ? true : _35, _36 = props.scrollSnap, scrollSnap = _36 === void 0 ? false : _36, scrollThrottleTimeout = props.scrollThrottleTimeout, preventBrowserDefaultScroll = props.preventBrowserDefaultScroll, _37 = props.mouseMoveThrottleTimeout, mouseMoveThrottleTimeout = _37 === void 0 ? 60 : _37, _38 = props.tooltipIntentInterval, tooltipIntentInterval = _38 === void 0 ? 60 : _38, selectionPolicy = props.selectionPolicy, users = props.users, userId = props.userId, renderCollaboratorCursor = props.renderCollaboratorCursor, functionDescriptions = props.functionDescriptions, _39 = props.showHeaderMenuButton, showHeaderMenuButton = _39 === void 0 ? true : _39, _40 = props.scrollbarSize, scrollbarSize = _40 === void 0 ? config_1.SCROLLBAR_SIZE : _40, _41 = props.theme, theme = _41 === void 0 ? config_1.defaultSpreadsheetTheme : _41, _42 = props.showNotes, showNotes = _42 === void 0 ? true : _42, _43 = props.showComments, showComments = _43 === void 0 ? true : _43, locale = props.locale, formulaLocaleProp = props.formulaLocale, agentSuggestions = props.agentSuggestions, onReviewSuggestion = props.onReviewSuggestion, onShowFormulas = props.onShowFormulas, getDataRowCount = props.getDataRowCount, getDataRegion = props.getDataRegion, getChartComponent = props.getChartComponent, getEmbedComponent = props.getEmbedComponent, getSlicerComponent = props.getSlicerComponent, onChange = props.onChange, onChangeBatch = props.onChangeBatch, onExpandCollapse = props.onExpandCollapse, onPivotDrillDown = props.onPivotDrillDown, onDelete = props.onDelete, onChangeEditorValue = props.onChangeEditorValue, onFill = props.onFill, onRequestCalculate = props.onRequestCalculate, onChangeActiveCell = props.onChangeActiveCell, onChangeActiveSheet = props.onChangeActiveSheet, onChangeSelections = props.onChangeSelections, getSheetName = props.getSheetName, getSheetId = props.getSheetId, getCellData = props.getCellData, getNoteProp = props.getNote, getTextFormatRuns = props.getTextFormatRuns, getDataValidation = props.getDataValidation, getEffectiveFormat = props.getEffectiveFormat, getFormattedValueProp = props.getFormattedValue, getTooltipContent = props.getTooltipContent, errorResolutionComponent = props.errorResolutionComponent, getEffectiveValueProp = props.getEffectiveValue, getSparklineGroup = props.getSparklineGroup, getUserEnteredExtendedValue = props.getUserEnteredExtendedValue, getEffectiveExtendedValue = props.getEffectiveExtendedValue, getSheetRowCount = props.getSheetRowCount, getSheetColumnCount = props.getSheetColumnCount, getCellPopoverContent = props.getCellPopoverContent, onScroll = props.onScroll, onViewPortChange = props.onViewPortChange, _44 = props.windowConditionalFormats, windowConditionalFormats = _44 === void 0 ? false : _44, _45 = props.engineConditionalFormatResults, engineConditionalFormatResults = _45 === void 0 ? false : _45, onResize = props.onResize, onAutoResize = props.onAutoResize, onHideColumn = props.onHideColumn, onHideRow = props.onHideRow, onShowColumn = props.onShowColumn, onShowRow = props.onShowRow, onGroupRows = props.onGroupRows, onUngroupRows = props.onUngroupRows, onCollapseRowGroup = props.onCollapseRowGroup, onExpandRowGroup = props.onExpandRowGroup, onGroupColumns = props.onGroupColumns, onUngroupColumns = props.onUngroupColumns, onCollapseColumnGroup = props.onCollapseColumnGroup, onExpandColumnGroup = props.onExpandColumnGroup, onSetOutlineDepth = props.onSetOutlineDepth, onDeleteRow = props.onDeleteRow, onDeleteColumn = props.onDeleteColumn, onInsertRow = props.onInsertRow, onInsertColumn = props.onInsertColumn, onChangeAutoExpandTables = props.onChangeAutoExpandTables, onChangeAutoCalculatedColumns = props.onChangeAutoCalculatedColumns, onInsertCellsShiftDown = props.onInsertCellsShiftDown, onInsertCellsShiftRight = props.onInsertCellsShiftRight, onDeleteCellsShiftLeft = props.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = props.onDeleteCellsShiftUp, onClearContents = props.onClearContents, onMoveColumns = props.onMoveColumns, onMoveRows = props.onMoveRows, onSelectNextSheet = props.onSelectNextSheet, onSelectPreviousSheet = props.onSelectPreviousSheet, onCreateNewSheet = props.onCreateNewSheet, onKeyDown = props.onKeyDown, onChangeFormatting = props.onChangeFormatting, onRepeatFormatting = props.onRepeatFormatting, onClearFormatting = props.onClearFormatting, onRequestEditProtectedRange = props.onRequestEditProtectedRange, onMoveChart = props.onMoveChart, onResizeChart = props.onResizeChart, onDeleteChart = props.onDeleteChart, onCutChart = props.onCutChart, onCopyChart = props.onCopyChart, onMoveEmbed = props.onMoveEmbed, onResizeEmbed = props.onResizeEmbed, onDeleteEmbed = props.onDeleteEmbed, onRequestEditEmbed = props.onRequestEditEmbed, onMoveSlicer = props.onMoveSlicer, onResizeSlicer = props.onResizeSlicer, onDeleteSlicer = props.onDeleteSlicer, onRequestEditSlicer = props.onRequestEditSlicer, onFillRange = props.onFillRange, disableFillRightShortcut = props.disableFillRightShortcut, keymap = props.keymap, onCalculateNow = props.onCalculateNow, onRequestGoTo = props.onRequestGoTo, onMoveSelection = props.onMoveSelection, onInsertCutCells = props.onInsertCutCells, onInsertTime = props.onInsertTime, onInsertDate = props.onInsertDate, onInsertDateTime = props.onInsertDateTime, onInsertAutoSum = props.onInsertAutoSum, onUndo = props.onUndo, onRedo = props.onRedo, onPaste = props.onPaste, onCopy = props.onCopy, onCut = props.onCut, onSortColumn = props.onSortColumn, onSortTable = props.onSortTable, onFilterTable = props.onFilterTable, onFilterPivot = props.onFilterPivot, onResizeTable = props.onResizeTable, onUndoTableAutoExpansion = props.onUndoTableAutoExpansion, onUndoCalculatedColumn = props.onUndoCalculatedColumn, onOverwriteCalculatedColumn = props.onOverwriteCalculatedColumn, onRequestEditTable = props.onRequestEditTable, onRequestEditPivotTable = props.onRequestEditPivotTable, onRequestDeletePivotTable = props.onRequestDeletePivotTable, onRequestCreatePivotChart = props.onRequestCreatePivotChart, onRemoveTable = props.onRemoveTable, onCreateTable = props.onCreateTable, onRequestCreateTable = props.onRequestCreateTable, onInsertTableColumn = props.onInsertTableColumn, onDeleteTableColumn = props.onDeleteTableColumn, onInsertTableRow = props.onInsertTableRow, onDeleteTableRow = props.onDeleteTableRow, onUpdateTable = props.onUpdateTable, onRequestResizeTable = props.onRequestResizeTable, onRequestInsertSlicer = props.onRequestInsertSlicer, onCreateBasicFilter = props.onCreateBasicFilter, onRequestDefineNamedRange = props.onRequestDefineNamedRange, onRequestFormatCells = props.onRequestFormatCells, onRequestConditionalFormat = props.onRequestConditionalFormat, onRequestDataValidation = props.onRequestDataValidation, onRequestInsertComment = props.onRequestInsertComment, onRequestInsertLink = props.onRequestInsertLink, onFreezeColumn = props.onFreezeColumn, onFreezeRow = props.onFreezeRow, onUpdateNote = props.onUpdateNote, onProtectRange = props.onProtectRange, onUnProtectRange = props.onUnProtectRange, onSortRange = props.onSortRange, onRequestSearch = props.onRequestSearch, onRequestReplace = props.onRequestReplace, onRequestResize = props.onRequestResize, _46 = props.getRowHeaderText, getRowHeaderText = _46 === void 0 ? helpers_1.getDefaultRowHeader : _46, _47 = props.getColumnHeaderText, getColumnHeaderText = _47 === void 0 ? helpers_1.getDefaultColumnHeader : _47, getAdditionalCellSpacing = props.getAdditionalCellSpacing, _48 = props.tokenizer, defaultTokenizer = _48 === void 0 ? calculator_1.tokenize : _48, onChangeScale = props.onChangeScale, onRemoveLink = props.onRemoveLink, onSelectLink = props.onSelectLink, onSplitTextToColumns = props.onSplitTextToColumns, onRemoveDuplicates = props.onRemoveDuplicates, onGoalSeek = props.onGoalSeek, onSubtotal = props.onSubtotal, onAdvancedFilter = props.onAdvancedFilter, onRequestExpand = props.onRequestExpand, cellExpandPredicate = props.cellExpandPredicate, _49 = props.StructuredResult, StructuredResult = _49 === void 0 ? cell_structured_1.StructuredResultRenderer : _49, getMentions = props.getMentions, getStructuredPropertiesProp = props.getStructuredProperties, getFunctionParameterSuggestions = props.getFunctionParameterSuggestions, shouldFetchFunctionParameters = props.shouldFetchFunctionParameters, MentionTagComponent = props.MentionTagComponent, MentionDropdownItemComponent = props.MentionDropdownItemComponent, _50 = props.showSelectionResizeHandles, showSelectionResizeHandles = _50 === void 0 ? true : _50, enableMagicFill = props.enableMagicFill, _51 = props.enableQuickEdit, enableQuickEdit = _51 === void 0 ? true : _51, MagicFillComponent = props.MagicFillComponent, MagicFillContent = props.MagicFillContent, QuickEdit = props.QuickEdit, PasteMenu = props.PasteMenu, SuggestionAction = props.SuggestionAction, HiddenRowMarkers = props.HiddenRowMarkers, HiddenColumnMarkers = props.HiddenColumnMarkers, enableResizerOverflow = props.enableResizerOverflow, className = props.className, _52 = props.defaultFontSizePoint, defaultFontSizePoint = _52 === void 0 ? config_1.DEFAULT_FONT_SIZE_PT : _52, defaultCellFormat = props.defaultCellFormat, readonly = props.readonly, _53 = props.isComparing, isComparing = _53 === void 0 ? false : _53, getCellDiff = props.getCellDiff, enableDataBoundaryNavigation = props.enableDataBoundaryNavigation, footerHeight = props.footerHeight, footerComponent = props.footerComponent, arrowComponents = props.arrowComponents,
136
+ var licenseKey = props.licenseKey, sheetId = props.sheetId, sheetType = props.sheetType, _e = props.ChartSheetView, ChartSheetViewComponent = _e === void 0 ? chart_sheet_view_1.ChartSheetView : _e, instanceId = props.instanceId, _f = props.activeCell, activeCell = _f === void 0 ? config_1.DEFAULT_ACTIVE_CELL : _f, _g = props.selections, selections = _g === void 0 ? config_1.DEFAULT_ARRAY : _g, _h = props.frozenColumnCount, frozenColumnCount = _h === void 0 ? 0 : _h, _j = props.frozenRowCount, frozenRowCount = _j === void 0 ? 0 : _j, _k = props.rowCount, rowCount = _k === void 0 ? config_1.DEFAULT_ROW_COUNT : _k, _l = props.columnCount, columnCount = _l === void 0 ? config_1.DEFAULT_COLUMN_COUNT : _l, autoFocus = props.autoFocus, basicFilter = props.basicFilter, tables = props.tables, namedRanges = props.namedRanges, _m = props.bandedRanges, bandedRanges = _m === void 0 ? config_1.DEFAULT_ARRAY : _m, _o = props.tableBorderColor, tableBorderColor = _o === void 0 ? "#008000" : _o, _p = props.filterIconColor, filterIconColor = _p === void 0 ? "#008000" : _p, conditionalFormats = props.conditionalFormats, _q = props.showFilterIcon, showFilterIcon = _q === void 0 ? true : _q, _r = props.showCalculatedColumnIcon, showCalculatedColumnIcon = _r === void 0 ? true : _r, _s = props.showHeaders, showHeaders = _s === void 0 ? true : _s, _t = props.defaultColumnWidth, defaultColumnWidth = _t === void 0 ? config_1.DEFAULT_COLUMN_WIDTH : _t, _u = props.defaultRowHeight, defaultRowHeight = _u === void 0 ? config_1.DEFAULT_ROW_HEIGHT : _u, _v = props.lineHeightMode, lineHeightMode = _v === void 0 ? "fontMetrics" : _v, _w = props.columnHeaderHeight, columnHeaderHeight = _w === void 0 ? config_1.COLUMN_HEADER_HEIGHT : _w, _x = props.rowHeaderWidth, rowHeaderWidth = _x === void 0 ? config_1.ROW_HEADER_WIDTH : _x, _y = props.gridLineColor, gridLineColor = _y === void 0 ? config_1.GRIDLINE_COLOR : _y, _z = props.cellBackgroundColor, cellBackgroundColor = _z === void 0 ? config_1.DEFAULT_CELL_BACKGROUND_COLOR : _z, _0 = props.cellColor, cellColor = _0 === void 0 ? config_1.DEFAULT_CELL_COLOR : _0, _1 = props.headerBorderColor, headerBorderColor = _1 === void 0 ? config_1.DEFAULT_HEADER_BORDER_COLOR : _1, _2 = props.headerBackgroundColor, headerBackgroundColor = _2 === void 0 ? config_1.DEFAULT_HEADER_BG : _2, _3 = props.headerColor, headerColor = _3 === void 0 ? config_1.DEFAULT_HEADER_COLOR : _3, _4 = props.headerActiveBackgroundColor, headerActiveBackgroundColor = _4 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_BG : _4, _5 = props.headerSelectedBackgroundColor, headerSelectedBackgroundColor = _5 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_BG : _5, _6 = props.headerSelectedColor, headerSelectedColor = _6 === void 0 ? "white" : _6, _7 = props.headerTableBackgroundColor, headerTableBackgroundColor = _7 === void 0 ? config_1.DEFAULT_HEADER_TABLE_BG : _7, _8 = props.headerTableActiveBackgroundColor, headerTableActiveBackgroundColor = _8 === void 0 ? config_1.DEFAULT_HEADER_ACTIVE_TABLE_BG : _8, _9 = props.headerTableSelectedBackgroundColor, headerTableSelectedBackgroundColor = _9 === void 0 ? config_1.DEFAULT_HEADER_SELECTED_TABLE_BG : _9, _10 = props.frozenShadowColor, frozenShadowColor = _10 === void 0 ? headerBorderColor : _10, _11 = props.frozenShadowThickness, frozenShadowThickness = _11 === void 0 ? 1 : _11, _12 = props.selectionBackgroundColor, selectionBackgroundColor = _12 === void 0 ? config_1.SELECTION_BG : _12, _13 = props.selectionBorderColor, selectionBorderColor = _13 === void 0 ? config_1.SELECTION_BORDER : _13, _14 = props.selectionDragBorderColor, selectionDragBorderColor = _14 === void 0 ? config_1.SELECTION_BORDER : _14, chartSelectedColor = props.chartSelectedColor, _15 = props.chipBackgroundColor, chipBackgroundColor = _15 === void 0 ? config_1.CHIP_COLOR : _15, _16 = props.merges, merges = _16 === void 0 ? config_1.DEFAULT_ARRAY : _16, borderStyles = props.borderStyles, protectedRanges = props.protectedRanges, _17 = props.isWorkbookProtected, isWorkbookProtectedProp = _17 === void 0 ? false : _17, getSheetProtection = props.getSheetProtection, pivotTables = props.pivotTables, charts = props.charts, onUpdateChart = props.onUpdateChart, onChangeZOrder = props.onChangeZOrder, embeds = props.embeds, slicers = props.slicers, _18 = props.rowMetadata, rowMetadata = _18 === void 0 ? config_1.DEFAULT_ARRAY : _18, _19 = props.columnMetadata, columnMetadata = _19 === void 0 ? config_1.DEFAULT_ARRAY : _19, _20 = props.scale, scale = _20 === void 0 ? 1 : _20, _21 = props.zoomSpeed, zoomSpeed = _21 === void 0 ? 1 : _21, _22 = props.overscanCount, overscanCount = _22 === void 0 ? 3 : _22, _23 = props.enableEditOnEnterKey, enableEditOnEnterKey = _23 === void 0 ? true : _23, _24 = props.enableTextOverflow, enableTextOverflow = _24 === void 0 ? true : _24, _showGridLines = props.showGridLines, _25 = props.showFormulas, showFormulas = _25 === void 0 ? false : _25, _26 = props.protectFormulas, protectFormulas = _26 === void 0 ? false : _26, _27 = props.showFrozenSeparator, showFrozenSeparator = _27 === void 0 ? true : _27, _28 = props.HeaderCell, HeaderCell = _28 === void 0 ? header_cell_1.HeaderCell : _28, _29 = props.Cell, Cell = _29 === void 0 ? cell_1.Cell : _29, _30 = props.SelectionTitleComponent, SelectionTitleComponent = _30 === void 0 ? title_1.SelectionTitle : _30, _31 = props.CellEditor, CellEditor = _31 === void 0 ? cell_editor_1.CellEditor : _31, CellTooltip = props.CellTooltip, _32 = props.ContextMenu, ContextMenu = _32 === void 0 ? context_menu_1.ContextMenu : _32, _33 = props.ContextMenuWrapper, ContextMenuWrapper = _33 === void 0 ? use_context_menu_1.DefaultContextMenuWrapper : _33, _34 = props.FilterBox, FilterBox = _34 === void 0 ? filter_box_1.FilterBox : _34, _35 = props.HeaderMoveDragComponent, HeaderMoveDragComponent = _35 === void 0 ? header_move_1.HeaderMoveDragComponent : _35, SuggestionsDropdown = props.SuggestionsDropdown, _36 = props.stickyEditor, stickyEditor = _36 === void 0 ? true : _36, _37 = props.scrollSnap, scrollSnap = _37 === void 0 ? false : _37, scrollThrottleTimeout = props.scrollThrottleTimeout, preventBrowserDefaultScroll = props.preventBrowserDefaultScroll, _38 = props.mouseMoveThrottleTimeout, mouseMoveThrottleTimeout = _38 === void 0 ? 60 : _38, _39 = props.tooltipIntentInterval, tooltipIntentInterval = _39 === void 0 ? 60 : _39, selectionPolicy = props.selectionPolicy, users = props.users, userId = props.userId, renderCollaboratorCursor = props.renderCollaboratorCursor, functionDescriptions = props.functionDescriptions, _40 = props.showHeaderMenuButton, showHeaderMenuButton = _40 === void 0 ? true : _40, _41 = props.scrollbarSize, scrollbarSize = _41 === void 0 ? config_1.SCROLLBAR_SIZE : _41, _42 = props.theme, theme = _42 === void 0 ? config_1.defaultSpreadsheetTheme : _42, _43 = props.showNotes, showNotes = _43 === void 0 ? true : _43, _44 = props.showComments, showComments = _44 === void 0 ? true : _44, locale = props.locale, formulaLocaleProp = props.formulaLocale, agentSuggestions = props.agentSuggestions, onReviewSuggestion = props.onReviewSuggestion, onShowFormulas = props.onShowFormulas, getDataRowCount = props.getDataRowCount, getDataRegion = props.getDataRegion, getChartComponent = props.getChartComponent, getEmbedComponent = props.getEmbedComponent, getSlicerComponent = props.getSlicerComponent, onChange = props.onChange, onChangeBatch = props.onChangeBatch, onExpandCollapse = props.onExpandCollapse, onPivotDrillDown = props.onPivotDrillDown, onDelete = props.onDelete, onChangeEditorValue = props.onChangeEditorValue, onFill = props.onFill, onRequestCalculate = props.onRequestCalculate, onChangeActiveCell = props.onChangeActiveCell, onChangeActiveSheet = props.onChangeActiveSheet, onChangeSelections = props.onChangeSelections, getSheetName = props.getSheetName, getSheetId = props.getSheetId, getCellData = props.getCellData, getNoteProp = props.getNote, getTextFormatRuns = props.getTextFormatRuns, getDataValidation = props.getDataValidation, getEffectiveFormat = props.getEffectiveFormat, getFormattedValueProp = props.getFormattedValue, getTooltipContent = props.getTooltipContent, errorResolutionComponent = props.errorResolutionComponent, getEffectiveValueProp = props.getEffectiveValue, getSparklineGroup = props.getSparklineGroup, getUserEnteredExtendedValue = props.getUserEnteredExtendedValue, getEffectiveExtendedValue = props.getEffectiveExtendedValue, getSheetRowCount = props.getSheetRowCount, getSheetColumnCount = props.getSheetColumnCount, getCellPopoverContent = props.getCellPopoverContent, onScroll = props.onScroll, onViewPortChange = props.onViewPortChange, _45 = props.windowConditionalFormats, windowConditionalFormats = _45 === void 0 ? false : _45, _46 = props.engineConditionalFormatResults, engineConditionalFormatResults = _46 === void 0 ? false : _46, onResize = props.onResize, onAutoResize = props.onAutoResize, onHideColumn = props.onHideColumn, onHideRow = props.onHideRow, onShowColumn = props.onShowColumn, onShowRow = props.onShowRow, onGroupRows = props.onGroupRows, onUngroupRows = props.onUngroupRows, onCollapseRowGroup = props.onCollapseRowGroup, onExpandRowGroup = props.onExpandRowGroup, onGroupColumns = props.onGroupColumns, onUngroupColumns = props.onUngroupColumns, onCollapseColumnGroup = props.onCollapseColumnGroup, onExpandColumnGroup = props.onExpandColumnGroup, onSetOutlineDepth = props.onSetOutlineDepth, onDeleteRow = props.onDeleteRow, onDeleteColumn = props.onDeleteColumn, onInsertRow = props.onInsertRow, onInsertColumn = props.onInsertColumn, onChangeAutoExpandTables = props.onChangeAutoExpandTables, onChangeAutoCalculatedColumns = props.onChangeAutoCalculatedColumns, onInsertCellsShiftDown = props.onInsertCellsShiftDown, onInsertCellsShiftRight = props.onInsertCellsShiftRight, onDeleteCellsShiftLeft = props.onDeleteCellsShiftLeft, onDeleteCellsShiftUp = props.onDeleteCellsShiftUp, onClearContents = props.onClearContents, onMoveColumns = props.onMoveColumns, onMoveRows = props.onMoveRows, onSelectNextSheet = props.onSelectNextSheet, onSelectPreviousSheet = props.onSelectPreviousSheet, onCreateNewSheet = props.onCreateNewSheet, onKeyDown = props.onKeyDown, onChangeFormatting = props.onChangeFormatting, onRepeatFormatting = props.onRepeatFormatting, onClearFormatting = props.onClearFormatting, onRequestEditProtectedRange = props.onRequestEditProtectedRange, onMoveChart = props.onMoveChart, onResizeChart = props.onResizeChart, onDeleteChart = props.onDeleteChart, onCutChart = props.onCutChart, onCopyChart = props.onCopyChart, onMoveEmbed = props.onMoveEmbed, onResizeEmbed = props.onResizeEmbed, onDeleteEmbed = props.onDeleteEmbed, onRequestEditEmbed = props.onRequestEditEmbed, onMoveSlicer = props.onMoveSlicer, onResizeSlicer = props.onResizeSlicer, onDeleteSlicer = props.onDeleteSlicer, onRequestEditSlicer = props.onRequestEditSlicer, onFillRange = props.onFillRange, disableFillRightShortcut = props.disableFillRightShortcut, keymap = props.keymap, onCalculateNow = props.onCalculateNow, onRequestGoTo = props.onRequestGoTo, onMoveSelection = props.onMoveSelection, onInsertCutCells = props.onInsertCutCells, onInsertTime = props.onInsertTime, onInsertDate = props.onInsertDate, onInsertDateTime = props.onInsertDateTime, onInsertAutoSum = props.onInsertAutoSum, onUndo = props.onUndo, onRedo = props.onRedo, batchHistory = props.batchHistory, onPaste = props.onPaste, onCopy = props.onCopy, onCut = props.onCut, onSortColumn = props.onSortColumn, onSortTable = props.onSortTable, onFilterTable = props.onFilterTable, onFilterPivot = props.onFilterPivot, onResizeTable = props.onResizeTable, onUndoTableAutoExpansion = props.onUndoTableAutoExpansion, onUndoCalculatedColumn = props.onUndoCalculatedColumn, onOverwriteCalculatedColumn = props.onOverwriteCalculatedColumn, onRequestEditTable = props.onRequestEditTable, onRequestEditPivotTable = props.onRequestEditPivotTable, onRequestDeletePivotTable = props.onRequestDeletePivotTable, onRequestCreatePivotChart = props.onRequestCreatePivotChart, onRemoveTable = props.onRemoveTable, onCreateTable = props.onCreateTable, onRequestCreateTable = props.onRequestCreateTable, onInsertTableColumn = props.onInsertTableColumn, onDeleteTableColumn = props.onDeleteTableColumn, onInsertTableRow = props.onInsertTableRow, onDeleteTableRow = props.onDeleteTableRow, onUpdateTable = props.onUpdateTable, onRequestResizeTable = props.onRequestResizeTable, onRequestInsertSlicer = props.onRequestInsertSlicer, onCreateBasicFilter = props.onCreateBasicFilter, onRequestDefineNamedRange = props.onRequestDefineNamedRange, onRequestFormatCells = props.onRequestFormatCells, onRequestConditionalFormat = props.onRequestConditionalFormat, onRequestDataValidation = props.onRequestDataValidation, onRequestInsertComment = props.onRequestInsertComment, onRequestInsertLink = props.onRequestInsertLink, onFreezeColumn = props.onFreezeColumn, onFreezeRow = props.onFreezeRow, onUpdateNote = props.onUpdateNote, onProtectRange = props.onProtectRange, onUnProtectRange = props.onUnProtectRange, onSortRange = props.onSortRange, onRequestSearch = props.onRequestSearch, onRequestReplace = props.onRequestReplace, onRequestResize = props.onRequestResize, _47 = props.getRowHeaderText, getRowHeaderText = _47 === void 0 ? helpers_1.getDefaultRowHeader : _47, _48 = props.getColumnHeaderText, getColumnHeaderText = _48 === void 0 ? helpers_1.getDefaultColumnHeader : _48, getAdditionalCellSpacing = props.getAdditionalCellSpacing, _49 = props.tokenizer, defaultTokenizer = _49 === void 0 ? calculator_1.tokenize : _49, onChangeScale = props.onChangeScale, onRemoveLink = props.onRemoveLink, onSelectLink = props.onSelectLink, onSplitTextToColumns = props.onSplitTextToColumns, onRemoveDuplicates = props.onRemoveDuplicates, onGoalSeek = props.onGoalSeek, onSubtotal = props.onSubtotal, onAdvancedFilter = props.onAdvancedFilter, onRequestExpand = props.onRequestExpand, cellExpandPredicate = props.cellExpandPredicate, _50 = props.StructuredResult, StructuredResult = _50 === void 0 ? cell_structured_1.StructuredResultRenderer : _50, getMentions = props.getMentions, getStructuredPropertiesProp = props.getStructuredProperties, getFunctionParameterSuggestions = props.getFunctionParameterSuggestions, shouldFetchFunctionParameters = props.shouldFetchFunctionParameters, MentionTagComponent = props.MentionTagComponent, MentionDropdownItemComponent = props.MentionDropdownItemComponent, _51 = props.showSelectionResizeHandles, showSelectionResizeHandles = _51 === void 0 ? true : _51, enableMagicFill = props.enableMagicFill, _52 = props.enableQuickEdit, enableQuickEdit = _52 === void 0 ? true : _52, MagicFillComponent = props.MagicFillComponent, MagicFillContent = props.MagicFillContent, QuickEdit = props.QuickEdit, PasteMenu = props.PasteMenu, SuggestionAction = props.SuggestionAction, HiddenRowMarkers = props.HiddenRowMarkers, HiddenColumnMarkers = props.HiddenColumnMarkers, enableResizerOverflow = props.enableResizerOverflow, className = props.className, _53 = props.defaultFontSizePoint, defaultFontSizePoint = _53 === void 0 ? config_1.DEFAULT_FONT_SIZE_PT : _53, defaultCellFormat = props.defaultCellFormat, readonly = props.readonly, _54 = props.isComparing, isComparing = _54 === void 0 ? false : _54, getCellDiff = props.getCellDiff, enableDataBoundaryNavigation = props.enableDataBoundaryNavigation, footerHeight = props.footerHeight, footerComponent = props.footerComponent, arrowComponents = props.arrowComponents,
126
137
  // Host-driven filter props. `hostHiddenRowRanges`
127
138
  // supplies compact [start, end] hidden-row tuples; `getFilterValues` supplies a
128
139
  // column's distinct values. Both let a million-row filter render without scanning
@@ -134,7 +145,7 @@ function CanvasGridComponent(props, forwardedRef) {
134
145
  // defaults to `getFormattedValue` inside `useGetValuesFromRange`.
135
146
  getValidationSourceValue = props.getValidationSourceValue,
136
147
  // Unused props only for api
137
- getDataColumnCount = props.getDataColumnCount, onDeleteNamedRange = props.onDeleteNamedRange, onChangeBorder = props.onChangeBorder, onDuplicateSheet = props.onDuplicateSheet, onCreateConditionalFormattingRule = props.onCreateConditionalFormattingRule, onDeleteConditionalFormattingRule = props.onDeleteConditionalFormattingRule, onUpdateConditionalFormattingRule = props.onUpdateConditionalFormattingRule, onCreateDataValidationRule = props.onCreateDataValidationRule, onUpdateDataValidationRule = props.onUpdateDataValidationRule, onDeleteDataValidationRule = props.onDeleteDataValidationRule, onCreateChart = props.onCreateChart, onDeleteSheet = props.onDeleteSheet, onCreateEmbed = props.onCreateEmbed, onDecreaseIndent = props.onDecreaseIndent, onIncreaseIndent = props.onIncreaseIndent, onChangeTheme = props.onChangeTheme, onChangeDecimals = props.onChangeDecimals, onUpdateSheet = props.onUpdateSheet, onChangeBatchStream = props.onChangeBatchStream, onBlur = props.onBlur, rest = tslib_1.__rest(props, ["licenseKey", "sheetId", "sheetType", "ChartSheetView", "instanceId", "activeCell", "selections", "frozenColumnCount", "frozenRowCount", "rowCount", "columnCount", "autoFocus", "basicFilter", "tables", "namedRanges", "bandedRanges", "tableBorderColor", "filterIconColor", "conditionalFormats", "showFilterIcon", "showCalculatedColumnIcon", "showHeaders", "defaultColumnWidth", "defaultRowHeight", "columnHeaderHeight", "rowHeaderWidth", "gridLineColor", "cellBackgroundColor", "cellColor", "headerBorderColor", "headerBackgroundColor", "headerColor", "headerActiveBackgroundColor", "headerSelectedBackgroundColor", "headerSelectedColor", "headerTableBackgroundColor", "headerTableActiveBackgroundColor", "headerTableSelectedBackgroundColor", "frozenShadowColor", "frozenShadowThickness", "selectionBackgroundColor", "selectionBorderColor", "selectionDragBorderColor", "chartSelectedColor", "chipBackgroundColor", "merges", "borderStyles", "protectedRanges", "isWorkbookProtected", "getSheetProtection", "pivotTables", "charts", "onUpdateChart", "onChangeZOrder", "embeds", "slicers", "rowMetadata", "columnMetadata", "scale", "zoomSpeed", "overscanCount", "enableEditOnEnterKey", "enableTextOverflow", "showGridLines", "showFormulas", "protectFormulas", "showFrozenSeparator", "HeaderCell", "Cell", "SelectionTitleComponent", "CellEditor", "CellTooltip", "ContextMenu", "ContextMenuWrapper", "FilterBox", "HeaderMoveDragComponent", "SuggestionsDropdown", "stickyEditor", "scrollSnap", "scrollThrottleTimeout", "preventBrowserDefaultScroll", "mouseMoveThrottleTimeout", "tooltipIntentInterval", "selectionPolicy", "users", "userId", "renderCollaboratorCursor", "functionDescriptions", "showHeaderMenuButton", "scrollbarSize", "theme", "showNotes", "showComments", "locale", "formulaLocale", "agentSuggestions", "onReviewSuggestion", "onShowFormulas", "getDataRowCount", "getDataRegion", "getChartComponent", "getEmbedComponent", "getSlicerComponent", "onChange", "onChangeBatch", "onExpandCollapse", "onPivotDrillDown", "onDelete", "onChangeEditorValue", "onFill", "onRequestCalculate", "onChangeActiveCell", "onChangeActiveSheet", "onChangeSelections", "getSheetName", "getSheetId", "getCellData", "getNote", "getTextFormatRuns", "getDataValidation", "getEffectiveFormat", "getFormattedValue", "getTooltipContent", "errorResolutionComponent", "getEffectiveValue", "getSparklineGroup", "getUserEnteredExtendedValue", "getEffectiveExtendedValue", "getSheetRowCount", "getSheetColumnCount", "getCellPopoverContent", "onScroll", "onViewPortChange", "windowConditionalFormats", "engineConditionalFormatResults", "onResize", "onAutoResize", "onHideColumn", "onHideRow", "onShowColumn", "onShowRow", "onGroupRows", "onUngroupRows", "onCollapseRowGroup", "onExpandRowGroup", "onGroupColumns", "onUngroupColumns", "onCollapseColumnGroup", "onExpandColumnGroup", "onSetOutlineDepth", "onDeleteRow", "onDeleteColumn", "onInsertRow", "onInsertColumn", "onChangeAutoExpandTables", "onChangeAutoCalculatedColumns", "onInsertCellsShiftDown", "onInsertCellsShiftRight", "onDeleteCellsShiftLeft", "onDeleteCellsShiftUp", "onClearContents", "onMoveColumns", "onMoveRows", "onSelectNextSheet", "onSelectPreviousSheet", "onCreateNewSheet", "onKeyDown", "onChangeFormatting", "onRepeatFormatting", "onClearFormatting", "onRequestEditProtectedRange", "onMoveChart", "onResizeChart", "onDeleteChart", "onCutChart", "onCopyChart", "onMoveEmbed", "onResizeEmbed", "onDeleteEmbed", "onRequestEditEmbed", "onMoveSlicer", "onResizeSlicer", "onDeleteSlicer", "onRequestEditSlicer", "onFillRange", "disableFillRightShortcut", "keymap", "onCalculateNow", "onRequestGoTo", "onMoveSelection", "onInsertCutCells", "onInsertTime", "onInsertDate", "onInsertDateTime", "onInsertAutoSum", "onUndo", "onRedo", "onPaste", "onCopy", "onCut", "onSortColumn", "onSortTable", "onFilterTable", "onFilterPivot", "onResizeTable", "onUndoTableAutoExpansion", "onUndoCalculatedColumn", "onOverwriteCalculatedColumn", "onRequestEditTable", "onRequestEditPivotTable", "onRequestDeletePivotTable", "onRequestCreatePivotChart", "onRemoveTable", "onCreateTable", "onRequestCreateTable", "onInsertTableColumn", "onDeleteTableColumn", "onInsertTableRow", "onDeleteTableRow", "onUpdateTable", "onRequestResizeTable", "onRequestInsertSlicer", "onCreateBasicFilter", "onRequestDefineNamedRange", "onRequestFormatCells", "onRequestConditionalFormat", "onRequestDataValidation", "onRequestInsertComment", "onRequestInsertLink", "onFreezeColumn", "onFreezeRow", "onUpdateNote", "onProtectRange", "onUnProtectRange", "onSortRange", "onRequestSearch", "onRequestReplace", "onRequestResize", "getRowHeaderText", "getColumnHeaderText", "getAdditionalCellSpacing", "tokenizer", "onChangeScale", "onRemoveLink", "onSelectLink", "onSplitTextToColumns", "onRemoveDuplicates", "onGoalSeek", "onSubtotal", "onAdvancedFilter", "onRequestExpand", "cellExpandPredicate", "StructuredResult", "getMentions", "getStructuredProperties", "getFunctionParameterSuggestions", "shouldFetchFunctionParameters", "MentionTagComponent", "MentionDropdownItemComponent", "showSelectionResizeHandles", "enableMagicFill", "enableQuickEdit", "MagicFillComponent", "MagicFillContent", "QuickEdit", "PasteMenu", "SuggestionAction", "HiddenRowMarkers", "HiddenColumnMarkers", "enableResizerOverflow", "className", "defaultFontSizePoint", "defaultCellFormat", "readonly", "isComparing", "getCellDiff", "enableDataBoundaryNavigation", "footerHeight", "footerComponent", "arrowComponents", "hostHiddenRowRanges", "getFilterValues", "getFilterColors", "getValidationSourceValue", "getDataColumnCount", "onDeleteNamedRange", "onChangeBorder", "onDuplicateSheet", "onCreateConditionalFormattingRule", "onDeleteConditionalFormattingRule", "onUpdateConditionalFormattingRule", "onCreateDataValidationRule", "onUpdateDataValidationRule", "onDeleteDataValidationRule", "onCreateChart", "onDeleteSheet", "onCreateEmbed", "onDecreaseIndent", "onIncreaseIndent", "onChangeTheme", "onChangeDecimals", "onUpdateSheet", "onChangeBatchStream", "onBlur"]);
148
+ getDataColumnCount = props.getDataColumnCount, onDeleteNamedRange = props.onDeleteNamedRange, onChangeBorder = props.onChangeBorder, onDuplicateSheet = props.onDuplicateSheet, onCreateConditionalFormattingRule = props.onCreateConditionalFormattingRule, onDeleteConditionalFormattingRule = props.onDeleteConditionalFormattingRule, onUpdateConditionalFormattingRule = props.onUpdateConditionalFormattingRule, onCreateDataValidationRule = props.onCreateDataValidationRule, onUpdateDataValidationRule = props.onUpdateDataValidationRule, onDeleteDataValidationRule = props.onDeleteDataValidationRule, onCreateChart = props.onCreateChart, onDeleteSheet = props.onDeleteSheet, onCreateEmbed = props.onCreateEmbed, onDecreaseIndent = props.onDecreaseIndent, onIncreaseIndent = props.onIncreaseIndent, onChangeTheme = props.onChangeTheme, onChangeDecimals = props.onChangeDecimals, onUpdateSheet = props.onUpdateSheet, onChangeBatchStream = props.onChangeBatchStream, onBlur = props.onBlur, rest = tslib_1.__rest(props, ["licenseKey", "sheetId", "sheetType", "ChartSheetView", "instanceId", "activeCell", "selections", "frozenColumnCount", "frozenRowCount", "rowCount", "columnCount", "autoFocus", "basicFilter", "tables", "namedRanges", "bandedRanges", "tableBorderColor", "filterIconColor", "conditionalFormats", "showFilterIcon", "showCalculatedColumnIcon", "showHeaders", "defaultColumnWidth", "defaultRowHeight", "lineHeightMode", "columnHeaderHeight", "rowHeaderWidth", "gridLineColor", "cellBackgroundColor", "cellColor", "headerBorderColor", "headerBackgroundColor", "headerColor", "headerActiveBackgroundColor", "headerSelectedBackgroundColor", "headerSelectedColor", "headerTableBackgroundColor", "headerTableActiveBackgroundColor", "headerTableSelectedBackgroundColor", "frozenShadowColor", "frozenShadowThickness", "selectionBackgroundColor", "selectionBorderColor", "selectionDragBorderColor", "chartSelectedColor", "chipBackgroundColor", "merges", "borderStyles", "protectedRanges", "isWorkbookProtected", "getSheetProtection", "pivotTables", "charts", "onUpdateChart", "onChangeZOrder", "embeds", "slicers", "rowMetadata", "columnMetadata", "scale", "zoomSpeed", "overscanCount", "enableEditOnEnterKey", "enableTextOverflow", "showGridLines", "showFormulas", "protectFormulas", "showFrozenSeparator", "HeaderCell", "Cell", "SelectionTitleComponent", "CellEditor", "CellTooltip", "ContextMenu", "ContextMenuWrapper", "FilterBox", "HeaderMoveDragComponent", "SuggestionsDropdown", "stickyEditor", "scrollSnap", "scrollThrottleTimeout", "preventBrowserDefaultScroll", "mouseMoveThrottleTimeout", "tooltipIntentInterval", "selectionPolicy", "users", "userId", "renderCollaboratorCursor", "functionDescriptions", "showHeaderMenuButton", "scrollbarSize", "theme", "showNotes", "showComments", "locale", "formulaLocale", "agentSuggestions", "onReviewSuggestion", "onShowFormulas", "getDataRowCount", "getDataRegion", "getChartComponent", "getEmbedComponent", "getSlicerComponent", "onChange", "onChangeBatch", "onExpandCollapse", "onPivotDrillDown", "onDelete", "onChangeEditorValue", "onFill", "onRequestCalculate", "onChangeActiveCell", "onChangeActiveSheet", "onChangeSelections", "getSheetName", "getSheetId", "getCellData", "getNote", "getTextFormatRuns", "getDataValidation", "getEffectiveFormat", "getFormattedValue", "getTooltipContent", "errorResolutionComponent", "getEffectiveValue", "getSparklineGroup", "getUserEnteredExtendedValue", "getEffectiveExtendedValue", "getSheetRowCount", "getSheetColumnCount", "getCellPopoverContent", "onScroll", "onViewPortChange", "windowConditionalFormats", "engineConditionalFormatResults", "onResize", "onAutoResize", "onHideColumn", "onHideRow", "onShowColumn", "onShowRow", "onGroupRows", "onUngroupRows", "onCollapseRowGroup", "onExpandRowGroup", "onGroupColumns", "onUngroupColumns", "onCollapseColumnGroup", "onExpandColumnGroup", "onSetOutlineDepth", "onDeleteRow", "onDeleteColumn", "onInsertRow", "onInsertColumn", "onChangeAutoExpandTables", "onChangeAutoCalculatedColumns", "onInsertCellsShiftDown", "onInsertCellsShiftRight", "onDeleteCellsShiftLeft", "onDeleteCellsShiftUp", "onClearContents", "onMoveColumns", "onMoveRows", "onSelectNextSheet", "onSelectPreviousSheet", "onCreateNewSheet", "onKeyDown", "onChangeFormatting", "onRepeatFormatting", "onClearFormatting", "onRequestEditProtectedRange", "onMoveChart", "onResizeChart", "onDeleteChart", "onCutChart", "onCopyChart", "onMoveEmbed", "onResizeEmbed", "onDeleteEmbed", "onRequestEditEmbed", "onMoveSlicer", "onResizeSlicer", "onDeleteSlicer", "onRequestEditSlicer", "onFillRange", "disableFillRightShortcut", "keymap", "onCalculateNow", "onRequestGoTo", "onMoveSelection", "onInsertCutCells", "onInsertTime", "onInsertDate", "onInsertDateTime", "onInsertAutoSum", "onUndo", "onRedo", "batchHistory", "onPaste", "onCopy", "onCut", "onSortColumn", "onSortTable", "onFilterTable", "onFilterPivot", "onResizeTable", "onUndoTableAutoExpansion", "onUndoCalculatedColumn", "onOverwriteCalculatedColumn", "onRequestEditTable", "onRequestEditPivotTable", "onRequestDeletePivotTable", "onRequestCreatePivotChart", "onRemoveTable", "onCreateTable", "onRequestCreateTable", "onInsertTableColumn", "onDeleteTableColumn", "onInsertTableRow", "onDeleteTableRow", "onUpdateTable", "onRequestResizeTable", "onRequestInsertSlicer", "onCreateBasicFilter", "onRequestDefineNamedRange", "onRequestFormatCells", "onRequestConditionalFormat", "onRequestDataValidation", "onRequestInsertComment", "onRequestInsertLink", "onFreezeColumn", "onFreezeRow", "onUpdateNote", "onProtectRange", "onUnProtectRange", "onSortRange", "onRequestSearch", "onRequestReplace", "onRequestResize", "getRowHeaderText", "getColumnHeaderText", "getAdditionalCellSpacing", "tokenizer", "onChangeScale", "onRemoveLink", "onSelectLink", "onSplitTextToColumns", "onRemoveDuplicates", "onGoalSeek", "onSubtotal", "onAdvancedFilter", "onRequestExpand", "cellExpandPredicate", "StructuredResult", "getMentions", "getStructuredProperties", "getFunctionParameterSuggestions", "shouldFetchFunctionParameters", "MentionTagComponent", "MentionDropdownItemComponent", "showSelectionResizeHandles", "enableMagicFill", "enableQuickEdit", "MagicFillComponent", "MagicFillContent", "QuickEdit", "PasteMenu", "SuggestionAction", "HiddenRowMarkers", "HiddenColumnMarkers", "enableResizerOverflow", "className", "defaultFontSizePoint", "defaultCellFormat", "readonly", "isComparing", "getCellDiff", "enableDataBoundaryNavigation", "footerHeight", "footerComponent", "arrowComponents", "hostHiddenRowRanges", "getFilterValues", "getFilterColors", "getValidationSourceValue", "getDataColumnCount", "onDeleteNamedRange", "onChangeBorder", "onDuplicateSheet", "onCreateConditionalFormattingRule", "onDeleteConditionalFormattingRule", "onUpdateConditionalFormattingRule", "onCreateDataValidationRule", "onUpdateDataValidationRule", "onDeleteDataValidationRule", "onCreateChart", "onDeleteSheet", "onCreateEmbed", "onDecreaseIndent", "onIncreaseIndent", "onChangeTheme", "onChangeDecimals", "onUpdateSheet", "onChangeBatchStream", "onBlur"]);
138
149
  /**
139
150
  * Fire onBlur only when the cell editor blurs to an element outside the
140
151
  * spreadsheet. Routed through `useEditable` so we hook the always-focused
@@ -150,7 +161,7 @@ function CanvasGridComponent(props, forwardedRef) {
150
161
  var showGridLines = _showGridLines !== null && _showGridLines !== void 0 ? _showGridLines : true;
151
162
  var gridRef = (0, react_1.useRef)(null);
152
163
  // Hovered cell state (immediate, updated on mousemove)
153
- var _54 = tslib_1.__read((0, react_1.useState)(), 2), hoveredCell = _54[0], setHoveredCell = _54[1];
164
+ var _55 = tslib_1.__read((0, react_1.useState)(), 2), hoveredCell = _55[0], setHoveredCell = _55[1];
154
165
  // Delayed hovered cell for tooltips and selection titles
155
166
  var delayedHoveredCell = (0, use_delayed_value_1.useDelayedValue)(hoveredCell, tooltipIntentInterval);
156
167
  // Text overflow functionality
@@ -242,17 +253,17 @@ function CanvasGridComponent(props, forwardedRef) {
242
253
  // Cell editor
243
254
  var cellEditorInstance = (0, formula_bar_editor_value_atom_1.useCellEditorInstance)();
244
255
  // Paste menu
245
- var _55 = tslib_1.__read((0, atoms_1.useShowPasteMenu)(), 2), showPasteMenu = _55[0], setShowPasteMenu = _55[1];
256
+ var _56 = tslib_1.__read((0, atoms_1.useShowPasteMenu)(), 2), showPasteMenu = _56[0], setShowPasteMenu = _56[1];
246
257
  // Auto Fill Options smart tag / right-drag fill menu + Series dialog
247
- var _56 = tslib_1.__read((0, atoms_1.useFillOptionsState)(), 2), fillOptions = _56[0], setFillOptions = _56[1];
248
- var _57 = tslib_1.__read((0, atoms_1.useInsertOptionsState)(), 2), insertOptions = _57[0], setInsertOptions = _57[1];
249
- var _58 = tslib_1.__read((0, atoms_1.useTableAutoExpansionState)(), 2), tableAutoExpansion = _58[0], setTableAutoExpansion = _58[1];
250
- var _59 = tslib_1.__read((0, atoms_1.useCalculatedColumnFillState)(), 2), calculatedColumnFill = _59[0], setCalculatedColumnFill = _59[1];
258
+ var _57 = tslib_1.__read((0, atoms_1.useFillOptionsState)(), 2), fillOptions = _57[0], setFillOptions = _57[1];
259
+ var _58 = tslib_1.__read((0, atoms_1.useInsertOptionsState)(), 2), insertOptions = _58[0], setInsertOptions = _58[1];
260
+ var _59 = tslib_1.__read((0, atoms_1.useTableAutoExpansionState)(), 2), tableAutoExpansion = _59[0], setTableAutoExpansion = _59[1];
261
+ var _60 = tslib_1.__read((0, atoms_1.useCalculatedColumnFillState)(), 2), calculatedColumnFill = _60[0], setCalculatedColumnFill = _60[1];
251
262
  var openFillSeriesDialog = (0, atoms_1.useOpenFillSeriesDialog)();
252
263
  // Shared state
253
264
  var formulaMode = (0, atoms_1.useFormulaModeValue)();
254
265
  var formulaSelections = (0, formula_selections_atom_1.useFormulaSelections)();
255
- var _60 = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), editingCellCoordinate = _60[0], setEditingCellCoordinate = _60[1];
266
+ var _61 = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), editingCellCoordinate = _61[0], setEditingCellCoordinate = _61[1];
256
267
  var setFormulabarEditorValue = (0, formula_bar_editor_value_atom_1.useSetFormulabarEditorValue)();
257
268
  /**
258
269
  * The formula SYNTAX the editor / formula bar speak (rowsncolumns/spreadsheet#655): Excel follows
@@ -270,7 +281,7 @@ function CanvasGridComponent(props, forwardedRef) {
270
281
  var setFormulaState = (0, formula_selection_state_atom_1.useSetFormulaSelectionState)();
271
282
  var activeEditor = (0, active_editor_atom_1.useActiveEditor)();
272
283
  // Magic fill state
273
- var _61 = tslib_1.__read((0, magic_fill_state_atom_1.useQuickEditState)(), 2), quickEditValues = _61[0], setQuickEditState = _61[1];
284
+ var _62 = tslib_1.__read((0, magic_fill_state_atom_1.useQuickEditState)(), 2), quickEditValues = _62[0], setQuickEditState = _62[1];
274
285
  var setNoteEditorCell = (0, atoms_1.useSetNoteEditorCell)();
275
286
  var setPinnedTooltip = (0, atoms_1.useSetPinnedTooltip)();
276
287
  var setSpreadsheetApi = (0, spreadsheet_api_atom_1.useSetSpreadsheetApi)();
@@ -281,7 +292,7 @@ function CanvasGridComponent(props, forwardedRef) {
281
292
  var instanceStore = (0, jotai_1.useStore)({ store: spreadsheet_provider_1.multiInstanceStore });
282
293
  // To access closures
283
294
  var hoveredCellRef = (0, use_stable_ref_1.useStableRef)(hoveredCell);
284
- var _62 = tslib_1.__read((0, use_resize_observer_1.useResizeObserver)(), 2), gridContainerRef = _62[0], _63 = _62[1], width = _63.width, height = _63.height;
295
+ var _63 = tslib_1.__read((0, use_resize_observer_1.useResizeObserver)(), 2), gridContainerRef = _63[0], _64 = _63[1], width = _64.width, height = _64.height;
285
296
  var defaultFrozenDims = showHeaders ? 1 : 0;
286
297
  var frozenRows = Math.max(defaultFrozenDims, (frozenRowCount !== null && frozenRowCount !== void 0 ? frozenRowCount : 0) + defaultFrozenDims);
287
298
  var frozenColumns = Math.max(defaultFrozenDims, (frozenColumnCount !== null && frozenColumnCount !== void 0 ? frozenColumnCount : 0) + defaultFrozenDims);
@@ -293,9 +304,9 @@ function CanvasGridComponent(props, forwardedRef) {
293
304
  var sheetRowCount = Math.min(config_1.MAX_ROW_COUNT + 1, rowCount + 1);
294
305
  var sheetColumnCount = Math.min(config_1.MAX_COLUMN_COUNT + 1, columnCount + 1);
295
306
  // License key validator
296
- var _64 = tslib_1.__read((0, use_licensekey_validator_1.useLicenseKeyValidator)({
307
+ var _65 = tslib_1.__read((0, use_licensekey_validator_1.useLicenseKeyValidator)({
297
308
  licenseKey: licenseKey,
298
- }), 3), _ = _64[0], licenseType = _64[1], validatorResult = _64[2];
309
+ }), 3), _ = _65[0], licenseType = _65[1], validatorResult = _65[2];
299
310
  var isRestricted = licenseType === "solo";
300
311
  // Grid line width
301
312
  var gridLineWidth = 1 * scale;
@@ -817,10 +828,20 @@ function CanvasGridComponent(props, forwardedRef) {
817
828
  !gridContainer.contains(activeElement)) {
818
829
  return;
819
830
  }
820
- if (!activeEditor || activeEditor === cellEditorInstance) {
831
+ // An editor whose DOM is gone cannot be the one holding focus: a host that unmounted an
832
+ // input without a blur (Chromium fires none for a removed focused element) can leave a
833
+ // stale `activeEditor` behind, and honouring it would lock the grid out of keyboard input
834
+ // (rowsncolumns/spreadsheet#1131).
835
+ if (!activeEditor ||
836
+ activeEditor === cellEditorInstance ||
837
+ isDetachedEditor(activeEditor)) {
821
838
  cellEditorInstance === null || cellEditorInstance === void 0 ? void 0 : cellEditorInstance.focus();
822
839
  }
823
840
  }, [activeEditor, cellEditorInstance]);
841
+ /**
842
+ * Container and total size of the grid, as the grid measures them
843
+ */
844
+ var getGridDimensions = (0, react_1.useCallback)(function () { var _a; return (_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.getDimensions(); }, []);
824
845
  /**
825
846
  * Canvas layers
826
847
  */
@@ -1148,11 +1169,11 @@ function CanvasGridComponent(props, forwardedRef) {
1148
1169
  * Touch support
1149
1170
  * Mainly for scrolling
1150
1171
  */
1151
- var _65 = (0, use_touch_1.useTouch)({
1172
+ var _66 = (0, use_touch_1.useTouch)({
1152
1173
  scrollTo: scrollTo,
1153
1174
  scale: scale,
1154
1175
  onChangeScale: onChangeScale,
1155
- }), onTouchStart = _65.onTouchStart, onDimensionsChange = _65.onDimensionsChange, scrollToTouchDevice = _65.scrollToTouchDevice, onAfterScrollToCell = _65.onAfterScrollToCell;
1176
+ }), onTouchStart = _66.onTouchStart, onDimensionsChange = _66.onDimensionsChange, scrollToTouchDevice = _66.scrollToTouchDevice, onAfterScrollToCell = _66.onAfterScrollToCell;
1156
1177
  /**
1157
1178
  * Conditional-formatting evaluation window: the padded, tile-quantized
1158
1179
  * viewport. The raw viewport lives in a ref (no render per scroll frame);
@@ -1160,7 +1181,7 @@ function CanvasGridComponent(props, forwardedRef) {
1160
1181
  * `startTransition` so the CF recompute is low-priority and interruptible —
1161
1182
  * scrolling never blocks on it.
1162
1183
  */
1163
- var _66 = tslib_1.__read((0, react_1.useState)(cf_window_1.CF_INITIAL_WINDOW), 2), cfWindow = _66[0], setCfWindow = _66[1];
1184
+ var _67 = tslib_1.__read((0, react_1.useState)(cf_window_1.CF_INITIAL_WINDOW), 2), cfWindow = _67[0], setCfWindow = _67[1];
1164
1185
  var cfWindowRef = (0, react_1.useRef)(null);
1165
1186
  var handleViewPortChange = (0, react_1.useCallback)(function (viewport) {
1166
1187
  onViewPortChange === null || onViewPortChange === void 0 ? void 0 : onViewPortChange(viewport);
@@ -1427,14 +1448,14 @@ function CanvasGridComponent(props, forwardedRef) {
1427
1448
  : localeTokenizerBase,
1428
1449
  });
1429
1450
  // Helper function to convert a selection to readable selection address
1430
- var _67 = tslib_1.__read((0, use_create_address_from_selection_1.useCreateAddressFromSelection)({
1451
+ var _68 = tslib_1.__read((0, use_create_address_from_selection_1.useCreateAddressFromSelection)({
1431
1452
  sheetId: sheetId,
1432
1453
  rowCount: rowCount,
1433
1454
  columnCount: columnCount,
1434
1455
  tables: tables !== null && tables !== void 0 ? tables : undefined,
1435
1456
  namedRanges: namedRanges !== null && namedRanges !== void 0 ? namedRanges : undefined,
1436
1457
  merges: merges,
1437
- }), 2), getAddressFromSelection = _67[0], getR1C1AddressFromSelection = _67[1];
1458
+ }), 2), getAddressFromSelection = _68[0], getR1C1AddressFromSelection = _68[1];
1438
1459
  /**
1439
1460
  * Exports a data region as image
1440
1461
  */
@@ -1442,19 +1463,19 @@ function CanvasGridComponent(props, forwardedRef) {
1442
1463
  sheetId: sheetId,
1443
1464
  cellBackgroundColor: cellBackgroundColor,
1444
1465
  gridLineWidth: gridLineWidth,
1466
+ frozenRows: frozenRows,
1467
+ frozenColumns: frozenColumns,
1445
1468
  getCanvasLayers: getCanvasLayers,
1446
1469
  getRowHeaderCanvasLayer: getRowHeaderCanvasLayer,
1447
1470
  getColumnHeaderCanvasLayer: getColumnHeaderCanvasLayer,
1448
- getCellOffsetFromCoords: getCellOffsetFromCoords,
1449
1471
  getR1C1AddressFromSelection: getR1C1AddressFromSelection,
1450
1472
  getSheetName: getSheetName,
1451
1473
  getScrollPosition: getScrollPosition,
1452
- getViewPort: getViewPort,
1453
1474
  getRowOffset: getRowOffset,
1454
1475
  getColumnOffset: getColumnOffset,
1455
1476
  getSheetDimensions: getSheetDimensions,
1477
+ getGridDimensions: getGridDimensions,
1456
1478
  scrollTo: scrollTo,
1457
- scrollToCell: scrollToCell,
1458
1479
  scale: scale,
1459
1480
  onChangeScale: onChangeScale,
1460
1481
  });
@@ -1480,7 +1501,7 @@ function CanvasGridComponent(props, forwardedRef) {
1480
1501
  * Get user entered value from a range
1481
1502
  * of cells
1482
1503
  */
1483
- var _68 = tslib_1.__read((0, use_get_values_from_range_1.useGetValuesFromRange)({
1504
+ var _69 = tslib_1.__read((0, use_get_values_from_range_1.useGetValuesFromRange)({
1484
1505
  sheetId: sheetId,
1485
1506
  getSelectionsFromFormula: getSelectionsFromFormula,
1486
1507
  getFormattedValue: getFormattedValue,
@@ -1488,7 +1509,7 @@ function CanvasGridComponent(props, forwardedRef) {
1488
1509
  getSheetId: getSheetId,
1489
1510
  onRequestCalculate: onRequestCalculate,
1490
1511
  getValidationSourceValue: getValidationSourceValue,
1491
- }), 3), getFormattedValuesFromAddress = _68[0], getEffectiveValuesFromRange = _68[1], getFormattedValuesFromAddressAsync = _68[2];
1512
+ }), 3), getFormattedValuesFromAddress = _69[0], getEffectiveValuesFromRange = _69[1], getFormattedValuesFromAddressAsync = _69[2];
1492
1513
  /**
1493
1514
  * Get all formatted values from range as a single 1d array
1494
1515
  */
@@ -1819,7 +1840,7 @@ function CanvasGridComponent(props, forwardedRef) {
1819
1840
  * O(n)
1820
1841
  * Reduces Space Complexity by using `all`
1821
1842
  */
1822
- var _69 = tslib_1.__read((0, use_selected_rows_columns_1.useSelectedRowsColumns)({
1843
+ var _70 = tslib_1.__read((0, use_selected_rows_columns_1.useSelectedRowsColumns)({
1823
1844
  activeCell: activeCell,
1824
1845
  selections: selections,
1825
1846
  selectionLeftBound: selectionLeftBound,
@@ -1827,7 +1848,7 @@ function CanvasGridComponent(props, forwardedRef) {
1827
1848
  rowCount: rowCount,
1828
1849
  columnCount: columnCount,
1829
1850
  getCellBounds: getCellBounds,
1830
- }), 6), selectedRows = _69[0], selectedColumns = _69[1], selectedRowHeaders = _69[2], selectedColumnHeaders = _69[3], selectedRowHeadersIds = _69[4], selectedColumnHeadersIds = _69[5];
1851
+ }), 6), selectedRows = _70[0], selectedColumns = _70[1], selectedRowHeaders = _70[2], selectedColumnHeaders = _70[3], selectedRowHeadersIds = _70[4], selectedColumnHeadersIds = _70[5];
1831
1852
  // Named ranges for editor dropdown
1832
1853
  var getNamedRanges = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
1833
1854
  return namedRanges === null || namedRanges === void 0 ? void 0 : namedRanges.map(function (range) { return ({
@@ -1897,7 +1918,7 @@ function CanvasGridComponent(props, forwardedRef) {
1897
1918
  * user can select entire column or row when selecting
1898
1919
  * header cells
1899
1920
  */
1900
- var _70 = (0, use_selection_interceptors_1.useSelectionInterceptors)({
1921
+ var _71 = (0, use_selection_interceptors_1.useSelectionInterceptors)({
1901
1922
  sheetId: sheetId,
1902
1923
  rowCount: rowCount,
1903
1924
  columnCount: columnCount,
@@ -1913,7 +1934,7 @@ function CanvasGridComponent(props, forwardedRef) {
1913
1934
  onChangeActiveCell: onChangeActiveCell,
1914
1935
  scrollToCell: scrollToCell,
1915
1936
  isMergedCell: isMergedCell,
1916
- }), onMouseDownInterceptor = _70.onMouseDownInterceptor, onMouseMoveInterceptor = _70.onMouseMoveInterceptor;
1937
+ }), onMouseDownInterceptor = _71.onMouseDownInterceptor, onMouseMoveInterceptor = _71.onMouseMoveInterceptor;
1917
1938
  /**
1918
1939
  * When user selections full rows
1919
1940
  * or columns, we have to ignore
@@ -2003,7 +2024,7 @@ function CanvasGridComponent(props, forwardedRef) {
2003
2024
  * Enables auto resizing
2004
2025
  * rows and columns
2005
2026
  */
2006
- var _71 = (0, use_sizer_1.useSizer)({
2027
+ var _72 = (0, use_sizer_1.useSizer)({
2007
2028
  frozenRows: frozenRows,
2008
2029
  frozenColumns: frozenColumns,
2009
2030
  scale: scale,
@@ -2027,8 +2048,9 @@ function CanvasGridComponent(props, forwardedRef) {
2027
2048
  // Measure with the same font the painter draws with (#1117).
2028
2049
  fontFamily: defaultFontFamily,
2029
2050
  fontSize: defaultFontSize,
2051
+ lineHeightMode: lineHeightMode,
2030
2052
  resizeStrategy: "full",
2031
- }), getColumnWidth = _71.getColumnWidth, getRowHeight = _71.getRowHeight, getCellDimensions = _71.getCellDimensions, getCellDimensionsStable = _71.getCellDimensionsStable, getTextDimension = _71.getTextDimension;
2053
+ }), getColumnWidth = _72.getColumnWidth, getRowHeight = _72.getRowHeight, getCellDimensions = _72.getCellDimensions, getCellDimensionsStable = _72.getCellDimensionsStable, getTextDimension = _72.getTextDimension;
2032
2054
  /**
2033
2055
  * Called when user tries to
2034
2056
  * autofit a column or row
@@ -2107,7 +2129,7 @@ function CanvasGridComponent(props, forwardedRef) {
2107
2129
  /**
2108
2130
  * Popover cell
2109
2131
  */
2110
- var _72 = (0, use_cell_popover_1.useCellPopover)({
2132
+ var _73 = (0, use_cell_popover_1.useCellPopover)({
2111
2133
  sheetId: sheetId,
2112
2134
  getCellPopoverContent: getCellPopoverContent !== null && getCellPopoverContent !== void 0 ? getCellPopoverContent : getFormattedValue,
2113
2135
  getCellOffsetFromCoords: getCellOffsetFromCoords,
@@ -2115,7 +2137,7 @@ function CanvasGridComponent(props, forwardedRef) {
2115
2137
  isFrozenColumn: isFrozenColumn,
2116
2138
  isFrozenRow: isFrozenRow,
2117
2139
  onChangeActiveSheet: onChangeActiveSheet,
2118
- }), popoverComponent = _72.popoverComponent, popoverRange = _72.popoverRange, showCellPopover = _72.showCellPopover, hideCellPopover = _72.hideCellPopover;
2140
+ }), popoverComponent = _73.popoverComponent, popoverRange = _73.popoverRange, showCellPopover = _73.showCellPopover, hideCellPopover = _73.hideCellPopover;
2119
2141
  /**
2120
2142
  * Get tooltip component of a cell
2121
2143
  * Only error, invalid values are
@@ -2542,7 +2564,7 @@ function CanvasGridComponent(props, forwardedRef) {
2542
2564
  /**
2543
2565
  * Handle grid selections
2544
2566
  */
2545
- var _73 = (0, use_selection_1.useSelection)({
2567
+ var _74 = (0, use_selection_1.useSelection)({
2546
2568
  sheetId: sheetId,
2547
2569
  getDataRowCount: getDataRowCount,
2548
2570
  getDataRegion: getDataRegion,
@@ -2570,10 +2592,12 @@ function CanvasGridComponent(props, forwardedRef) {
2570
2592
  focus: focusSheet,
2571
2593
  scrollToCell: scrollToCell,
2572
2594
  isMergedCell: isMergedCell,
2573
- onFill: onFill,
2595
+ // A readonly grid gets no write handler: a fill-handle drag or a
2596
+ // selection drag-move then changes nothing, whatever started the gesture.
2597
+ onFill: readonly ? undefined : onFill,
2574
2598
  onFillHandleRelease: handleFillHandleRelease,
2575
- onFillShrink: handleFillShrink,
2576
- onMoveSelection: onMoveSelection,
2599
+ onFillShrink: readonly ? undefined : handleFillShrink,
2600
+ onMoveSelection: readonly ? undefined : onMoveSelection,
2577
2601
  onInsertCutCells: onInsertCutCells,
2578
2602
  confirmMoveOverwrite: confirmMoveOverwrite,
2579
2603
  isHiddenColumn: isHiddenColumn,
@@ -2584,19 +2608,20 @@ function CanvasGridComponent(props, forwardedRef) {
2584
2608
  dataRegionBoundaries: dataRegionBoundaries,
2585
2609
  tables: tables,
2586
2610
  onInsertTableRow: onInsertTableRow,
2587
- }), onMouseDownSelection = _73.onMouseDown, onPointerDownSelection = _73.onPointerDown, onKeyDownSelection = _73.onKeyDown, fillSelection = _73.fillSelection, fillShrink = _73.fillShrink, onFillHandleMouseDown = _73.onFillHandleMouseDown, onFillHandleDoubleClick = _73.onFillHandleDoubleClick, isDragging = _73.isDragging, isFilling = _73.isFilling, isSelectionInProgress = _73.isSelectionInProgress, draggedSelection = _73.draggedSelection, onSelectionMouseDown = _73.onSelectionMouseDown, setActiveCell = _73.setActiveCell, initialDraggedSelection = _73.initialDraggedSelection, updateSelectionStartEndReference = _73.updateSelectionStartEndReference, selectColumn = _73.selectColumn, getContentfulGridRangeAroundCell = _73.getContentfulGridRangeAroundCell, newSelection = _73.newSelection, modifySelection = _73.modifySelection, clearSelections = _73.clearSelections;
2611
+ }), onMouseDownSelection = _74.onMouseDown, onPointerDownSelection = _74.onPointerDown, onKeyDownSelection = _74.onKeyDown, fillSelection = _74.fillSelection, fillShrink = _74.fillShrink, onFillHandleMouseDown = _74.onFillHandleMouseDown, onFillHandleDoubleClick = _74.onFillHandleDoubleClick, isDragging = _74.isDragging, isFilling = _74.isFilling, isSelectionInProgress = _74.isSelectionInProgress, draggedSelection = _74.draggedSelection, onSelectionMouseDown = _74.onSelectionMouseDown, setActiveCell = _74.setActiveCell, initialDraggedSelection = _74.initialDraggedSelection, updateSelectionStartEndReference = _74.updateSelectionStartEndReference, selectColumn = _74.selectColumn, getContentfulGridRangeAroundCell = _74.getContentfulGridRangeAroundCell, newSelection = _74.newSelection, modifySelection = _74.modifySelection, clearSelections = _74.clearSelections;
2588
2612
  /**
2589
2613
  * Copy, Paste and Cut hook
2590
2614
  */
2591
- var _74 = (0, use_copy_paste_cut_1.useCopyPasteCut)({
2615
+ var _75 = (0, use_copy_paste_cut_1.useCopyPasteCut)({
2592
2616
  activeCell: activeCell,
2593
2617
  selections: selections,
2594
2618
  sheetId: sheetId,
2619
+ readonly: readonly,
2595
2620
  focusSheet: focusSheet,
2596
2621
  onPaste: onPaste,
2597
2622
  onCopy: onCopy,
2598
2623
  onCut: onCut,
2599
- }), copiedSelections = _74.copiedSelections, isCutPending = _74.isCutPending, copiedSheetId = _74.copiedSheetId, cancelCut = _74.cancelCut, clearCopiedSelections = _74.clearCopiedSelections, copy = _74.copy, cut = _74.cut, paste = _74.paste, onInternalCopy = _74.onInternalCopy, onInternalCut = _74.onInternalCut, onInternalPaste = _74.onInternalPaste;
2624
+ }), copiedSelections = _75.copiedSelections, isCutPending = _75.isCutPending, copiedSheetId = _75.copiedSheetId, cancelCut = _75.cancelCut, clearCopiedSelections = _75.clearCopiedSelections, copy = _75.copy, cut = _75.cut, paste = _75.paste, onInternalCopy = _75.onInternalCopy, onInternalCut = _75.onInternalCut, onInternalPaste = _75.onInternalPaste;
2600
2625
  /**
2601
2626
  * Ctrl+C / Ctrl+X / Ctrl+V / Ctrl+D on a selected chart. The focused chart is
2602
2627
  * the target of those events (see `EmbedDraggable`); a paste that lands in the
@@ -2839,6 +2864,7 @@ function CanvasGridComponent(props, forwardedRef) {
2839
2864
  showValidationAlert: showValidationAlert,
2840
2865
  selections: selections,
2841
2866
  onChangeBatch: onChangeBatch,
2867
+ batchHistory: batchHistory,
2842
2868
  formulaLocale: formulaLocale,
2843
2869
  });
2844
2870
  /**
@@ -2936,7 +2962,7 @@ function CanvasGridComponent(props, forwardedRef) {
2936
2962
  onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(targetSheetId, [{ range: range }]);
2937
2963
  }, [setActiveCell, onChangeSelections]);
2938
2964
  // Excel's table hit zones (header top edge / corner / row left edge).
2939
- var _75 = (0, use_table_hit_zones_1.useTableHitZones)({
2965
+ var _76 = (0, use_table_hit_zones_1.useTableHitZones)({
2940
2966
  sheetId: sheetId,
2941
2967
  tables: activeTables,
2942
2968
  selections: selections,
@@ -2947,7 +2973,7 @@ function CanvasGridComponent(props, forwardedRef) {
2947
2973
  getCellOffsetFromCoords: getCellOffsetFromCoords,
2948
2974
  getScrollPosition: getScrollPosition,
2949
2975
  onSelectRange: selectRangeFromMenu,
2950
- }), tableHitCursor = _75.cursor, onMouseMoveTableHitZones = _75.onMouseMove, onMouseDownTableHitZones = _75.onMouseDown, clearTableHitZone = _75.clearHitZone;
2976
+ }), tableHitCursor = _76.cursor, onMouseMoveTableHitZones = _76.onMouseMove, onMouseDownTableHitZones = _76.onMouseDown, clearTableHitZone = _76.clearHitZone;
2951
2977
  /**
2952
2978
  * Get context Menu component
2953
2979
  */
@@ -3049,7 +3075,7 @@ function CanvasGridComponent(props, forwardedRef) {
3049
3075
  * Displays Context menu when user right clicks
3050
3076
  * the grid
3051
3077
  */
3052
- var _76 = (0, use_context_menu_1.useContextMenu)({
3078
+ var _77 = (0, use_context_menu_1.useContextMenu)({
3053
3079
  getCellCoordsFromOffset: getCellCoordsFromOffset,
3054
3080
  getRelativePositionFromOffset: getRelativePositionFromOffset,
3055
3081
  isRowHeader: isRowHeader,
@@ -3058,7 +3084,7 @@ function CanvasGridComponent(props, forwardedRef) {
3058
3084
  getCellOffsetFromCoords: getCellOffsetFromCoords,
3059
3085
  getScrollPosition: getScrollPosition,
3060
3086
  ContextMenuWrapper: ContextMenuWrapper,
3061
- }), onContextMenu = _76.onContextMenu, contextMenuComponent = _76.contextMenuComponent, onRequestCloseContextMenu = _76.onRequestClose, showContextMenu = _76.showContextMenu;
3087
+ }), onContextMenu = _77.onContextMenu, contextMenuComponent = _77.contextMenuComponent, onRequestCloseContextMenu = _77.onRequestClose, showContextMenu = _77.showContextMenu;
3062
3088
  /**
3063
3089
  * Shortcut handlers for formatting
3064
3090
  * TODO: Decide on the output
@@ -3139,7 +3165,7 @@ function CanvasGridComponent(props, forwardedRef) {
3139
3165
  /**
3140
3166
  * Allow grid to be ediable
3141
3167
  */
3142
- var _77 = (0, use_editable_1.useEditable)({
3168
+ var _78 = (0, use_editable_1.useEditable)({
3143
3169
  sheetId: sheetId,
3144
3170
  enableEditOnEnterKey: enableEditOnEnterKey,
3145
3171
  canEdit: canEditCell,
@@ -3190,11 +3216,11 @@ function CanvasGridComponent(props, forwardedRef) {
3190
3216
  onCut: handleEditorCut,
3191
3217
  tables: tables,
3192
3218
  onInsertTableRow: onInsertTableRow,
3193
- }), onMouseDownEditable = _77.onMouseDown, onDoubleClickEditable = _77.onDoubleClick, editorComponent = _77.editorComponent, isEditInProgress = _77.isEditInProgress, makeEditable = _77.makeEditable, editCell = _77.editCell, setEditorValue = _77.setEditorValue, hideEditor = _77.hideEditor, getNextFocusableCell = _77.getNextFocusableCell, submitEditor = _77.submitEditor, cancelEditor = _77.cancelEditor, commit = _77.commit;
3219
+ }), onMouseDownEditable = _78.onMouseDown, onDoubleClickEditable = _78.onDoubleClick, editorComponent = _78.editorComponent, isEditInProgress = _78.isEditInProgress, makeEditable = _78.makeEditable, editCell = _78.editCell, setEditorValue = _78.setEditorValue, hideEditor = _78.hideEditor, getNextFocusableCell = _78.getNextFocusableCell, submitEditor = _78.submitEditor, cancelEditor = _78.cancelEditor, commit = _78.commit;
3194
3220
  /**
3195
3221
  * Move rows and columns
3196
3222
  */
3197
- var _78 = (0, use_move_columns_rows_1.useMoveColumnsAndRows)({
3223
+ var _79 = (0, use_move_columns_rows_1.useMoveColumnsAndRows)({
3198
3224
  getCellOffsetFromCoords: getCellOffsetFromCoords,
3199
3225
  getCellCoordsFromOffset: getCellCoordsFromOffset,
3200
3226
  getRelativePositionFromOffset: getRelativePositionFromOffset,
@@ -3217,11 +3243,11 @@ function CanvasGridComponent(props, forwardedRef) {
3217
3243
  sheetId: sheetId,
3218
3244
  disabled: isRestricted,
3219
3245
  HeaderMoveDragComponent: HeaderMoveDragComponent,
3220
- }), draggableColumns = _78.draggableColumns, draggableRows = _78.draggableRows, isDraggingRowsAndColumns = _78.isDragging;
3246
+ }), draggableColumns = _79.draggableColumns, draggableRows = _79.draggableRows, isDraggingRowsAndColumns = _79.isDragging;
3221
3247
  /**
3222
3248
  * Header actions
3223
3249
  */
3224
- var _79 = (0, use_header_actions_1.useHeaderActions)({
3250
+ var _80 = (0, use_header_actions_1.useHeaderActions)({
3225
3251
  activeCell: isSelectionInProgress || isFilling || isDragging ? null : hoveredCell,
3226
3252
  getScrollPosition: getScrollPosition,
3227
3253
  getCellOffsetFromCoords: getCellOffsetFromCoords,
@@ -3235,20 +3261,21 @@ function CanvasGridComponent(props, forwardedRef) {
3235
3261
  selectionTopBound: selectionTopBound,
3236
3262
  showHeaderMenuButton: showHeaderMenuButton,
3237
3263
  scale: scale,
3238
- onResize: onResize,
3264
+ // Column widths and row heights are sheet writes too
3265
+ onResize: readonly ? undefined : onResize,
3239
3266
  focusSheet: focusSheet,
3240
3267
  isRowHeader: isRowHeader,
3241
3268
  isColumnHeader: isColumnHeader,
3242
3269
  isHiddenColumn: isHiddenColumn,
3243
3270
  containerWidth: width - scrollbarSize,
3244
3271
  containerHeight: height - scrollbarSize,
3245
- onAutoFit: handleAutoFit,
3272
+ onAutoFit: readonly ? undefined : handleAutoFit,
3246
3273
  backgroundColor: selectionBorderColor,
3247
3274
  sheetId: sheetId,
3248
3275
  selectedRowHeadersIds: selectedRowHeadersIds,
3249
3276
  selectedColumnHeadersIds: selectedColumnHeadersIds,
3250
3277
  enableResizerOverflow: enableResizerOverflow,
3251
- }), headerMenuComponent = _79.headerMenuComponent, isHeaderMenuInFrozenColumn = _79.isHeaderMenuInFrozenColumn, headerResizer = _79.headerResizer, isDraggingHeader = _79.isDragging;
3278
+ }), headerMenuComponent = _80.headerMenuComponent, isHeaderMenuInFrozenColumn = _80.isHeaderMenuInFrozenColumn, headerResizer = _80.headerResizer, isDraggingHeader = _80.isDragging;
3252
3279
  /**
3253
3280
  * Close tooltip
3254
3281
  */
@@ -3290,7 +3317,7 @@ function CanvasGridComponent(props, forwardedRef) {
3290
3317
  /**
3291
3318
  * Show basicFilter panels
3292
3319
  */
3293
- var _80 = (0, use_filter_1.useFilter)({
3320
+ var _81 = (0, use_filter_1.useFilter)({
3294
3321
  sheetId: sheetId,
3295
3322
  scale: scale,
3296
3323
  theme: theme,
@@ -3315,9 +3342,9 @@ function CanvasGridComponent(props, forwardedRef) {
3315
3342
  // Live filter state so the open popup tracks Auto-apply spec changes.
3316
3343
  basicFilter: basicFilter,
3317
3344
  tables: activeTables,
3318
- }), showFilter = _80.showFilter, hideFilter = _80.hideFilter, filterComponent = _80.filterComponent;
3345
+ }), showFilter = _81.showFilter, hideFilter = _81.hideFilter, filterComponent = _81.filterComponent;
3319
3346
  // Table resize
3320
- var _81 = (0, use_table_resizer_1.useTableResizer)({
3347
+ var _82 = (0, use_table_resizer_1.useTableResizer)({
3321
3348
  sheetId: sheetId,
3322
3349
  tables: tables !== null && tables !== void 0 ? tables : undefined,
3323
3350
  theme: theme,
@@ -3328,11 +3355,11 @@ function CanvasGridComponent(props, forwardedRef) {
3328
3355
  scrollToCell: scrollToCell,
3329
3356
  onResizeTable: onResizeTable,
3330
3357
  focusSheet: focusSheet,
3331
- }), tableResizers = _81.tableResizers, isResizingTable = _81.isResizingTable;
3358
+ }), tableResizers = _82.tableResizers, isResizingTable = _82.isResizingTable;
3332
3359
  /**
3333
3360
  * Displays resizable/draggable charts
3334
3361
  */
3335
- var _82 = (0, use_embeds_charts_1.useEmbedsCharts)({
3362
+ var _83 = (0, use_embeds_charts_1.useEmbedsCharts)({
3336
3363
  charts: charts,
3337
3364
  embeds: embeds,
3338
3365
  slicers: slicers,
@@ -3376,7 +3403,7 @@ function CanvasGridComponent(props, forwardedRef) {
3376
3403
  backgroundColor: cellBackgroundColor,
3377
3404
  disabled: isRestricted,
3378
3405
  readonly: readonly,
3379
- }), chartComponents = _82.chartComponents, embedComponents = _82.embedComponents, slicerComponents = _82.slicerComponents, embedContextMenuComponent = _82.contextMenuComponent, onMouseDownCharts = _82.onMouseDown, requestChartContextMenu = _82.requestChartContextMenu;
3406
+ }), chartComponents = _83.chartComponents, embedComponents = _83.embedComponents, slicerComponents = _83.slicerComponents, embedContextMenuComponent = _83.contextMenuComponent, onMouseDownCharts = _83.onMouseDown, requestChartContextMenu = _83.requestChartContextMenu;
3380
3407
  /**
3381
3408
  * Callback when user clicks Filter icon
3382
3409
  * Show Filter dropdown here
@@ -3435,7 +3462,7 @@ function CanvasGridComponent(props, forwardedRef) {
3435
3462
  * The totals-function picker a totals cell's in-cell arrow opens (Excel):
3436
3463
  * anchored at the cell's bottom-right corner like the filter dropdown.
3437
3464
  */
3438
- var _83 = tslib_1.__read((0, react_1.useState)(null), 2), totalsPicker = _83[0], setTotalsPicker = _83[1];
3465
+ var _84 = tslib_1.__read((0, react_1.useState)(null), 2), totalsPicker = _84[0], setTotalsPicker = _84[1];
3439
3466
  var closeTotalsPicker = (0, react_1.useCallback)(function () { return setTotalsPicker(null); }, []);
3440
3467
  var handleTotalsArrowClick = (0, react_1.useCallback)(function (cell) {
3441
3468
  var table = activeTables === null || activeTables === void 0 ? void 0 : activeTables.find(function (candidate) {
@@ -3691,7 +3718,7 @@ function CanvasGridComponent(props, forwardedRef) {
3691
3718
  /**
3692
3719
  * Render Cells in the grid
3693
3720
  */
3694
- var _84 = tslib_1.__read((0, use_cell_renderer_1.useCellRenderer)({
3721
+ var _85 = tslib_1.__read((0, use_cell_renderer_1.useCellRenderer)({
3695
3722
  sheetId: sheetId,
3696
3723
  isTableTotalsCell: isTableTotalsCell,
3697
3724
  onTotalsArrowClick: handleTotalsArrowClick,
@@ -3750,6 +3777,7 @@ function CanvasGridComponent(props, forwardedRef) {
3750
3777
  onCheckboxClick: handleCheckboxClick,
3751
3778
  onExpandCollapse: handleExpandCollapse,
3752
3779
  defaultFontSizePoint: defaultFontSize,
3780
+ lineHeightMode: lineHeightMode,
3753
3781
  Cell: Cell,
3754
3782
  HeaderCell: HeaderCell,
3755
3783
  theme: theme,
@@ -3761,7 +3789,7 @@ function CanvasGridComponent(props, forwardedRef) {
3761
3789
  onOverflow: handleOverflow,
3762
3790
  isComparing: isComparing,
3763
3791
  getCellDiff: getCellDiff,
3764
- }), 4), cellBackgroundRenderer = _84[0], cellRenderer = _84[1], cellOverlayRenderer = _84[2], headerCellRenderer = _84[3];
3792
+ }), 4), cellBackgroundRenderer = _85[0], cellRenderer = _85[1], cellOverlayRenderer = _85[2], headerCellRenderer = _85[3];
3765
3793
  /**
3766
3794
  * When user selects a selection for moving
3767
3795
  * If its a table, we select the entire column
@@ -3797,16 +3825,16 @@ function CanvasGridComponent(props, forwardedRef) {
3797
3825
  tokenizer: localeTokenizer,
3798
3826
  });
3799
3827
  // Selection move: drag a formula reference via its border covers
3800
- var _85 = (0, use_selection_move_1.useSelectionMove)({
3828
+ var _86 = (0, use_selection_move_1.useSelectionMove)({
3801
3829
  getCellCoordsFromOffset: getCellCoordsFromOffset,
3802
3830
  scrollToCell: scrollToCell,
3803
3831
  tokenizer: localeTokenizer,
3804
- }), onMouseDownMoveSelection = _85.onMouseDownMoveSelection, isDraggingMoveSelection = _85.isDragging;
3832
+ }), onMouseDownMoveSelection = _86.onMouseDownMoveSelection, isDraggingMoveSelection = _86.isDragging;
3805
3833
  /**
3806
3834
  * Selected chart: outline its source ranges on this sheet and re-bind
3807
3835
  * them when a corner handle is dragged (Excel's chart data highlight).
3808
3836
  */
3809
- var _86 = (0, use_chart_source_ranges_1.useChartSourceRanges)({
3837
+ var _87 = (0, use_chart_source_ranges_1.useChartSourceRanges)({
3810
3838
  charts: charts,
3811
3839
  sheetId: sheetId,
3812
3840
  getSheetName: getSheetName,
@@ -3815,22 +3843,24 @@ function CanvasGridComponent(props, forwardedRef) {
3815
3843
  getCellBounds: getCellBounds,
3816
3844
  getCellCoordsFromOffset: getCellCoordsFromOffset,
3817
3845
  scrollToCell: scrollToCell,
3818
- }), chartSourceBorderStyles = _86.chartSourceBorderStyles, onMouseDownChartSourceResizeHandle = _86.onMouseDownChartSourceResizeHandle;
3846
+ }), chartSourceBorderStyles = _87.chartSourceBorderStyles, onMouseDownChartSourceResizeHandle = _87.onMouseDownChartSourceResizeHandle;
3819
3847
  /**
3820
3848
  * Hide fill handle
3821
3849
  * 1. When user is in edit mode
3822
3850
  * 2. When user is in formula mode and user has made selections
3851
+ * 3. When the grid is readonly — a fill is a write
3823
3852
  */
3824
- var showFillHandle = !isSelectionInProgress &&
3853
+ var showFillHandle = !readonly &&
3854
+ !isSelectionInProgress &&
3825
3855
  !isEditInProgress &&
3826
3856
  !isResizingTable &&
3827
3857
  !(formulaMode && formulaSelections.length);
3828
3858
  /**
3829
3859
  * Flashing
3830
3860
  */
3831
- var _87 = (0, use_flash_1.useFlash)({
3861
+ var _88 = (0, use_flash_1.useFlash)({
3832
3862
  theme: theme,
3833
- }), flash = _87.flash, mark = _87.mark, unmark = _87.unmark, onFlashEnd = _87.onFlashEnd, flashingBorders = _87.flashingBorders;
3863
+ }), flash = _88.flash, mark = _88.mark, unmark = _88.unmark, onFlashEnd = _88.onFlashEnd, flashingBorders = _88.flashingBorders;
3834
3864
  // Cache hover ids
3835
3865
  var cachedHoveredSelectionIds = (0, use_hovered_selection_ids_1.useHoveredSelectionIds)({
3836
3866
  selections: selections,
@@ -3927,7 +3957,7 @@ function CanvasGridComponent(props, forwardedRef) {
3927
3957
  ? tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(finalBorderStyles), false), tslib_1.__read(chartSourceBorderStyles), false) : finalBorderStyles;
3928
3958
  }, [finalBorderStyles, chartSourceBorderStyles]);
3929
3959
  // Hidden column markers
3930
- var _88 = tslib_1.__read((0, use_hidden_dimension_markers_1.useHiddenDimensionMarkers)({
3960
+ var _89 = tslib_1.__read((0, use_hidden_dimension_markers_1.useHiddenDimensionMarkers)({
3931
3961
  sheetId: sheetId,
3932
3962
  columnMetadata: columnMetadata,
3933
3963
  rowMetadata: rowMetadata,
@@ -3940,7 +3970,7 @@ function CanvasGridComponent(props, forwardedRef) {
3940
3970
  columnCount: columnCount,
3941
3971
  HiddenRowMarkers: HiddenRowMarkers,
3942
3972
  HiddenColumnMarkers: HiddenColumnMarkers,
3943
- }), 4), hiddenColumnMarkers = _88[0], frozenHiddenColumnMarkers = _88[1], hiddenRowMarkers = _88[2], frozenHiddenRowMarkers = _88[3];
3973
+ }), 4), hiddenColumnMarkers = _89[0], frozenHiddenColumnMarkers = _89[1], hiddenRowMarkers = _89[2], frozenHiddenRowMarkers = _89[3];
3944
3974
  // Zoom lister
3945
3975
  var onMouseWheel = (0, use_scale_listener_1.useScaleListener)({
3946
3976
  zoomSpeed: zoomSpeed,
@@ -4292,12 +4322,14 @@ function CanvasGridComponent(props, forwardedRef) {
4292
4322
  popoverComponent: popoverComponent,
4293
4323
  popoverRange: popoverRange,
4294
4324
  cellExpandComponent: cellExpandComponent,
4325
+ arrowComponents: arrowComponents,
4295
4326
  });
4296
4327
  /**
4297
4328
  * Only enable selection drag if user is not editing and not
4298
- * in formula mode
4329
+ * in formula mode. A readonly grid has nothing to move, so the
4330
+ * gesture does not start at all (no move cursor, no selection jump).
4299
4331
  */
4300
- var enableSelectionDrag = !isSelectionInProgress && !isEditInProgress && !formulaMode;
4332
+ var enableSelectionDrag = !readonly && !isSelectionInProgress && !isEditInProgress && !formulaMode;
4301
4333
  // A chartsheet IS its chart: no grid, headers, editor or cell menus — only the chart and its
4302
4334
  // context menu (Excel).
4303
4335
  if (sheetType === "chartsheet") {