@rowsncolumns/spreadsheet 10.2.75 → 10.2.77

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 (122) hide show
  1. package/dist/cjs/api/fill-series.d.ts +38 -0
  2. package/dist/cjs/api/fill-series.d.ts.map +1 -0
  3. package/dist/cjs/api/fill-series.js +89 -0
  4. package/dist/cjs/api/spreadsheet-api.d.ts +6 -2
  5. package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
  6. package/dist/cjs/api/spreadsheet-api.js +9 -3
  7. package/dist/cjs/atoms/fill-options.atom.d.ts +36 -0
  8. package/dist/cjs/atoms/fill-options.atom.d.ts.map +1 -0
  9. package/dist/cjs/atoms/fill-options.atom.js +11 -0
  10. package/dist/cjs/atoms/fill-series-dialog.atom.d.ts +26 -0
  11. package/dist/cjs/atoms/fill-series-dialog.atom.d.ts.map +1 -0
  12. package/dist/cjs/atoms/fill-series-dialog.atom.js +14 -0
  13. package/dist/cjs/atoms/index.d.ts +2 -0
  14. package/dist/cjs/atoms/index.d.ts.map +1 -1
  15. package/dist/cjs/atoms/index.js +2 -0
  16. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  17. package/dist/cjs/components/canvas-grid/index.js +224 -50
  18. package/dist/cjs/components/canvas-grid/typings.d.ts +13 -4
  19. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  20. package/dist/cjs/components/cell-editor/helpers.d.ts +9 -0
  21. package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
  22. package/dist/cjs/components/cell-editor/helpers.js +8 -1
  23. package/dist/cjs/components/cell-editor/helpers.spec.js +14 -0
  24. package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
  25. package/dist/cjs/components/cell-editor/index.js +6 -3
  26. package/dist/cjs/components/fill-series-dialog/index.d.ts +29 -0
  27. package/dist/cjs/components/fill-series-dialog/index.d.ts.map +1 -0
  28. package/dist/cjs/components/fill-series-dialog/index.js +156 -0
  29. package/dist/cjs/components/selection/fill-options-menu.d.ts +32 -0
  30. package/dist/cjs/components/selection/fill-options-menu.d.ts.map +1 -0
  31. package/dist/cjs/components/selection/fill-options-menu.js +65 -0
  32. package/dist/cjs/components/selection/index.d.ts +1 -1
  33. package/dist/cjs/components/selection/index.d.ts.map +1 -1
  34. package/dist/cjs/components/selection/index.js +4 -2
  35. package/dist/cjs/components/selection/types.d.ts +11 -1
  36. package/dist/cjs/components/selection/types.d.ts.map +1 -1
  37. package/dist/cjs/components/toolbar/text-format-selector.d.ts +9 -0
  38. package/dist/cjs/components/toolbar/text-format-selector.d.ts.map +1 -1
  39. package/dist/cjs/components/toolbar/text-format-selector.js +15 -3
  40. package/dist/cjs/hooks/use-editable.d.ts +11 -2
  41. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  42. package/dist/cjs/hooks/use-editable.js +8 -0
  43. package/dist/cjs/hooks/use-editor-submit.d.ts +32 -3
  44. package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
  45. package/dist/cjs/hooks/use-editor-submit.js +111 -2
  46. package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
  47. package/dist/cjs/hooks/use-keyboard-handler.js +3 -2
  48. package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -2
  49. package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
  50. package/dist/cjs/hooks/use-selection-renderer.js +21 -4
  51. package/dist/cjs/hooks/use-selection.d.ts +54 -4
  52. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  53. package/dist/cjs/hooks/use-selection.js +232 -37
  54. package/dist/cjs/index.d.ts +4 -0
  55. package/dist/cjs/index.d.ts.map +1 -1
  56. package/dist/cjs/index.js +3 -0
  57. package/dist/cjs/release-date.js +1 -1
  58. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  59. package/dist/cjs/types.d.ts +47 -1
  60. package/dist/cjs/types.d.ts.map +1 -1
  61. package/dist/esm/api/fill-series.d.ts +38 -0
  62. package/dist/esm/api/fill-series.d.ts.map +1 -0
  63. package/dist/esm/api/fill-series.js +78 -0
  64. package/dist/esm/api/spreadsheet-api.d.ts +6 -2
  65. package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
  66. package/dist/esm/api/spreadsheet-api.js +8 -3
  67. package/dist/esm/atoms/fill-options.atom.d.ts +36 -0
  68. package/dist/esm/atoms/fill-options.atom.d.ts.map +1 -0
  69. package/dist/esm/atoms/fill-options.atom.js +5 -0
  70. package/dist/esm/atoms/fill-series-dialog.atom.d.ts +26 -0
  71. package/dist/esm/atoms/fill-series-dialog.atom.d.ts.map +1 -0
  72. package/dist/esm/atoms/fill-series-dialog.atom.js +9 -0
  73. package/dist/esm/atoms/index.d.ts +2 -0
  74. package/dist/esm/atoms/index.d.ts.map +1 -1
  75. package/dist/esm/atoms/index.js +2 -0
  76. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  77. package/dist/esm/components/canvas-grid/index.js +167 -6
  78. package/dist/esm/components/canvas-grid/typings.d.ts +13 -4
  79. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  80. package/dist/esm/components/cell-editor/helpers.d.ts +9 -0
  81. package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
  82. package/dist/esm/components/cell-editor/helpers.js +6 -0
  83. package/dist/esm/components/cell-editor/helpers.spec.js +15 -1
  84. package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
  85. package/dist/esm/components/cell-editor/index.js +7 -4
  86. package/dist/esm/components/fill-series-dialog/index.d.ts +29 -0
  87. package/dist/esm/components/fill-series-dialog/index.d.ts.map +1 -0
  88. package/dist/esm/components/fill-series-dialog/index.js +151 -0
  89. package/dist/esm/components/selection/fill-options-menu.d.ts +32 -0
  90. package/dist/esm/components/selection/fill-options-menu.d.ts.map +1 -0
  91. package/dist/esm/components/selection/fill-options-menu.js +63 -0
  92. package/dist/esm/components/selection/index.d.ts +1 -1
  93. package/dist/esm/components/selection/index.d.ts.map +1 -1
  94. package/dist/esm/components/selection/index.js +4 -2
  95. package/dist/esm/components/selection/types.d.ts +11 -1
  96. package/dist/esm/components/selection/types.d.ts.map +1 -1
  97. package/dist/esm/components/toolbar/text-format-selector.d.ts +9 -0
  98. package/dist/esm/components/toolbar/text-format-selector.d.ts.map +1 -1
  99. package/dist/esm/components/toolbar/text-format-selector.js +14 -2
  100. package/dist/esm/hooks/use-editable.d.ts +11 -2
  101. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  102. package/dist/esm/hooks/use-editable.js +8 -0
  103. package/dist/esm/hooks/use-editor-submit.d.ts +32 -3
  104. package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
  105. package/dist/esm/hooks/use-editor-submit.js +82 -3
  106. package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
  107. package/dist/esm/hooks/use-keyboard-handler.js +3 -2
  108. package/dist/esm/hooks/use-selection-renderer.d.ts +13 -2
  109. package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
  110. package/dist/esm/hooks/use-selection-renderer.js +22 -5
  111. package/dist/esm/hooks/use-selection.d.ts +54 -4
  112. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  113. package/dist/esm/hooks/use-selection.js +220 -36
  114. package/dist/esm/index.d.ts +4 -0
  115. package/dist/esm/index.d.ts.map +1 -1
  116. package/dist/esm/index.js +3 -0
  117. package/dist/esm/release-date.js +1 -1
  118. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  119. package/dist/esm/types.d.ts +47 -1
  120. package/dist/esm/types.d.ts.map +1 -1
  121. package/dist/spreadsheet.min.css +1 -1
  122. package/package.json +7 -6
@@ -90,6 +90,7 @@ var use_touch_1 = require("../../hooks/use-touch");
90
90
  var spreadsheet_provider_1 = require("../../providers/spreadsheet-provider");
91
91
  var scroll_subscriber_1 = require("../../signals/scroll-subscriber");
92
92
  var themes_1 = require("../../themes");
93
+ var fill_series_1 = require("../../api/fill-series");
93
94
  var cell_1 = require("../cell");
94
95
  var cell_editor_1 = require("../cell-editor");
95
96
  var context_menu_1 = require("../context-menu");
@@ -229,10 +230,13 @@ function CanvasGridComponent(props, forwardedRef) {
229
230
  var cellEditorInstance = (0, formula_bar_editor_value_atom_1.useCellEditorInstance)();
230
231
  // Paste menu
231
232
  var _50 = tslib_1.__read((0, atoms_1.useShowPasteMenu)(), 2), showPasteMenu = _50[0], setShowPasteMenu = _50[1];
233
+ // Auto Fill Options smart tag / right-drag fill menu + Series dialog
234
+ var _51 = tslib_1.__read((0, atoms_1.useFillOptionsState)(), 2), fillOptions = _51[0], setFillOptions = _51[1];
235
+ var openFillSeriesDialog = (0, atoms_1.useOpenFillSeriesDialog)();
232
236
  // Shared state
233
237
  var formulaMode = (0, atoms_1.useFormulaModeValue)();
234
238
  var formulaSelections = (0, formula_selections_atom_1.useFormulaSelections)();
235
- var _51 = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), editingCellCoordinate = _51[0], setEditingCellCoordinate = _51[1];
239
+ var _52 = tslib_1.__read((0, editing_cell_atom_1.useEditingCell)(), 2), editingCellCoordinate = _52[0], setEditingCellCoordinate = _52[1];
236
240
  var setFormulabarEditorValue = (0, formula_bar_editor_value_atom_1.useSetFormulabarEditorValue)();
237
241
  var setFormulaBarTextFormatRuns = (0, formula_bar_editor_value_atom_1.useSetFormulaBarTextFormatRuns)();
238
242
  var canSelectCells = (0, formula_selection_state_atom_1.useFormulaCanSelectCells)();
@@ -240,7 +244,7 @@ function CanvasGridComponent(props, forwardedRef) {
240
244
  var setFormulaState = (0, formula_selection_state_atom_1.useSetFormulaSelectionState)();
241
245
  var activeEditor = (0, active_editor_atom_1.useActiveEditor)();
242
246
  // Magic fill state
243
- var _52 = tslib_1.__read((0, magic_fill_state_atom_1.useQuickEditState)(), 2), quickEditValues = _52[0], setQuickEditState = _52[1];
247
+ var _53 = tslib_1.__read((0, magic_fill_state_atom_1.useQuickEditState)(), 2), quickEditValues = _53[0], setQuickEditState = _53[1];
244
248
  var setNoteEditorCell = (0, atoms_1.useSetNoteEditorCell)();
245
249
  var setPinnedTooltip = (0, atoms_1.useSetPinnedTooltip)();
246
250
  var setSpreadsheetApi = (0, spreadsheet_api_atom_1.useSetSpreadsheetApi)();
@@ -251,7 +255,7 @@ function CanvasGridComponent(props, forwardedRef) {
251
255
  var instanceStore = (0, jotai_1.useStore)({ store: spreadsheet_provider_1.multiInstanceStore });
252
256
  // To access closures
253
257
  var hoveredCellRef = (0, use_stable_ref_1.useStableRef)(hoveredCell);
254
- var _53 = tslib_1.__read((0, use_resize_observer_1.useResizeObserver)(), 2), gridContainerRef = _53[0], _54 = _53[1], width = _54.width, height = _54.height;
258
+ var _54 = tslib_1.__read((0, use_resize_observer_1.useResizeObserver)(), 2), gridContainerRef = _54[0], _55 = _54[1], width = _55.width, height = _55.height;
255
259
  var defaultFrozenDims = showHeaders ? 1 : 0;
256
260
  var frozenRows = Math.max(defaultFrozenDims, (frozenRowCount !== null && frozenRowCount !== void 0 ? frozenRowCount : 0) + defaultFrozenDims);
257
261
  var frozenColumns = Math.max(defaultFrozenDims, (frozenColumnCount !== null && frozenColumnCount !== void 0 ? frozenColumnCount : 0) + defaultFrozenDims);
@@ -263,9 +267,9 @@ function CanvasGridComponent(props, forwardedRef) {
263
267
  var sheetRowCount = Math.min(config_1.MAX_ROW_COUNT + 1, rowCount + 1);
264
268
  var sheetColumnCount = Math.min(config_1.MAX_COLUMN_COUNT + 1, columnCount + 1);
265
269
  // License key validator
266
- var _55 = tslib_1.__read((0, use_licensekey_validator_1.useLicenseKeyValidator)({
270
+ var _56 = tslib_1.__read((0, use_licensekey_validator_1.useLicenseKeyValidator)({
267
271
  licenseKey: licenseKey,
268
- }), 3), _ = _55[0], licenseType = _55[1], validatorResult = _55[2];
272
+ }), 3), _ = _56[0], licenseType = _56[1], validatorResult = _56[2];
269
273
  var isRestricted = licenseType === "solo";
270
274
  // Grid line width
271
275
  var gridLineWidth = 1 * scale;
@@ -1081,11 +1085,11 @@ function CanvasGridComponent(props, forwardedRef) {
1081
1085
  * Touch support
1082
1086
  * Mainly for scrolling
1083
1087
  */
1084
- var _56 = (0, use_touch_1.useTouch)({
1088
+ var _57 = (0, use_touch_1.useTouch)({
1085
1089
  scrollTo: scrollTo,
1086
1090
  scale: scale,
1087
1091
  onChangeScale: onChangeScale,
1088
- }), onTouchStart = _56.onTouchStart, onDimensionsChange = _56.onDimensionsChange, scrollToTouchDevice = _56.scrollToTouchDevice, onAfterScrollToCell = _56.onAfterScrollToCell;
1092
+ }), onTouchStart = _57.onTouchStart, onDimensionsChange = _57.onDimensionsChange, scrollToTouchDevice = _57.scrollToTouchDevice, onAfterScrollToCell = _57.onAfterScrollToCell;
1089
1093
  /**
1090
1094
  * Conditional-formatting evaluation window: the padded, tile-quantized
1091
1095
  * viewport. The raw viewport lives in a ref (no render per scroll frame);
@@ -1093,7 +1097,7 @@ function CanvasGridComponent(props, forwardedRef) {
1093
1097
  * `startTransition` so the CF recompute is low-priority and interruptible —
1094
1098
  * scrolling never blocks on it.
1095
1099
  */
1096
- var _57 = tslib_1.__read((0, react_1.useState)(cf_window_1.CF_INITIAL_WINDOW), 2), cfWindow = _57[0], setCfWindow = _57[1];
1100
+ var _58 = tslib_1.__read((0, react_1.useState)(cf_window_1.CF_INITIAL_WINDOW), 2), cfWindow = _58[0], setCfWindow = _58[1];
1097
1101
  var cfWindowRef = (0, react_1.useRef)(null);
1098
1102
  var handleViewPortChange = (0, react_1.useCallback)(function (viewport) {
1099
1103
  onViewPortChange === null || onViewPortChange === void 0 ? void 0 : onViewPortChange(viewport);
@@ -1325,14 +1329,14 @@ function CanvasGridComponent(props, forwardedRef) {
1325
1329
  tokenizer: defaultTokenizer,
1326
1330
  });
1327
1331
  // Helper function to convert a selection to readable selection address
1328
- var _58 = tslib_1.__read((0, use_create_address_from_selection_1.useCreateAddressFromSelection)({
1332
+ var _59 = tslib_1.__read((0, use_create_address_from_selection_1.useCreateAddressFromSelection)({
1329
1333
  sheetId: sheetId,
1330
1334
  rowCount: rowCount,
1331
1335
  columnCount: columnCount,
1332
1336
  tables: tables !== null && tables !== void 0 ? tables : undefined,
1333
1337
  namedRanges: namedRanges !== null && namedRanges !== void 0 ? namedRanges : undefined,
1334
1338
  merges: merges,
1335
- }), 2), getAddressFromSelection = _58[0], getR1C1AddressFromSelection = _58[1];
1339
+ }), 2), getAddressFromSelection = _59[0], getR1C1AddressFromSelection = _59[1];
1336
1340
  /**
1337
1341
  * Exports a data region as image
1338
1342
  */
@@ -1378,7 +1382,7 @@ function CanvasGridComponent(props, forwardedRef) {
1378
1382
  * Get user entered value from a range
1379
1383
  * of cells
1380
1384
  */
1381
- var _59 = tslib_1.__read((0, use_get_values_from_range_1.useGetValuesFromRange)({
1385
+ var _60 = tslib_1.__read((0, use_get_values_from_range_1.useGetValuesFromRange)({
1382
1386
  sheetId: sheetId,
1383
1387
  getSelectionsFromFormula: getSelectionsFromFormula,
1384
1388
  getFormattedValue: getFormattedValue,
@@ -1386,7 +1390,7 @@ function CanvasGridComponent(props, forwardedRef) {
1386
1390
  getSheetId: getSheetId,
1387
1391
  onRequestCalculate: onRequestCalculate,
1388
1392
  getValidationSourceValue: getValidationSourceValue,
1389
- }), 3), getFormattedValuesFromAddress = _59[0], getEffectiveValuesFromRange = _59[1], getFormattedValuesFromAddressAsync = _59[2];
1393
+ }), 3), getFormattedValuesFromAddress = _60[0], getEffectiveValuesFromRange = _60[1], getFormattedValuesFromAddressAsync = _60[2];
1390
1394
  /**
1391
1395
  * Get all formatted values from range as a single 1d array
1392
1396
  */
@@ -1723,7 +1727,7 @@ function CanvasGridComponent(props, forwardedRef) {
1723
1727
  * O(n)
1724
1728
  * Reduces Space Complexity by using `all`
1725
1729
  */
1726
- var _60 = tslib_1.__read((0, use_selected_rows_columns_1.useSelectedRowsColumns)({
1730
+ var _61 = tslib_1.__read((0, use_selected_rows_columns_1.useSelectedRowsColumns)({
1727
1731
  activeCell: activeCell,
1728
1732
  selections: selections,
1729
1733
  selectionLeftBound: selectionLeftBound,
@@ -1731,7 +1735,7 @@ function CanvasGridComponent(props, forwardedRef) {
1731
1735
  rowCount: rowCount,
1732
1736
  columnCount: columnCount,
1733
1737
  getCellBounds: getCellBounds,
1734
- }), 6), selectedRows = _60[0], selectedColumns = _60[1], selectedRowHeaders = _60[2], selectedColumnHeaders = _60[3], selectedRowHeadersIds = _60[4], selectedColumnHeadersIds = _60[5];
1738
+ }), 6), selectedRows = _61[0], selectedColumns = _61[1], selectedRowHeaders = _61[2], selectedColumnHeaders = _61[3], selectedRowHeadersIds = _61[4], selectedColumnHeadersIds = _61[5];
1735
1739
  // Named ranges for editor dropdown
1736
1740
  var getNamedRanges = (0, use_callback_ref_1.useCallbackRef)((0, react_1.useCallback)(function () {
1737
1741
  return namedRanges === null || namedRanges === void 0 ? void 0 : namedRanges.map(function (range) { return ({
@@ -1801,7 +1805,7 @@ function CanvasGridComponent(props, forwardedRef) {
1801
1805
  * user can select entire column or row when selecting
1802
1806
  * header cells
1803
1807
  */
1804
- var _61 = (0, use_selection_interceptors_1.useSelectionInterceptors)({
1808
+ var _62 = (0, use_selection_interceptors_1.useSelectionInterceptors)({
1805
1809
  sheetId: sheetId,
1806
1810
  rowCount: rowCount,
1807
1811
  columnCount: columnCount,
@@ -1817,7 +1821,7 @@ function CanvasGridComponent(props, forwardedRef) {
1817
1821
  onChangeActiveCell: onChangeActiveCell,
1818
1822
  scrollToCell: scrollToCell,
1819
1823
  isMergedCell: isMergedCell,
1820
- }), onMouseDownInterceptor = _61.onMouseDownInterceptor, onMouseMoveInterceptor = _61.onMouseMoveInterceptor;
1824
+ }), onMouseDownInterceptor = _62.onMouseDownInterceptor, onMouseMoveInterceptor = _62.onMouseMoveInterceptor;
1821
1825
  /**
1822
1826
  * When user selections full rows
1823
1827
  * or columns, we have to ignore
@@ -1905,7 +1909,7 @@ function CanvasGridComponent(props, forwardedRef) {
1905
1909
  * Enables auto resizing
1906
1910
  * rows and columns
1907
1911
  */
1908
- var _62 = (0, use_sizer_1.useSizer)({
1912
+ var _63 = (0, use_sizer_1.useSizer)({
1909
1913
  frozenRows: frozenRows,
1910
1914
  frozenColumns: frozenColumns,
1911
1915
  scale: scale,
@@ -1928,7 +1932,7 @@ function CanvasGridComponent(props, forwardedRef) {
1928
1932
  getDataRowCount: getDataRowCount,
1929
1933
  fontSize: defaultFontSizePoint,
1930
1934
  resizeStrategy: "full",
1931
- }), getColumnWidth = _62.getColumnWidth, getRowHeight = _62.getRowHeight, getCellDimensions = _62.getCellDimensions, getCellDimensionsStable = _62.getCellDimensionsStable, getTextDimension = _62.getTextDimension;
1935
+ }), getColumnWidth = _63.getColumnWidth, getRowHeight = _63.getRowHeight, getCellDimensions = _63.getCellDimensions, getCellDimensionsStable = _63.getCellDimensionsStable, getTextDimension = _63.getTextDimension;
1932
1936
  /**
1933
1937
  * Called when user tries to
1934
1938
  * autofit a column or row
@@ -2001,7 +2005,7 @@ function CanvasGridComponent(props, forwardedRef) {
2001
2005
  /**
2002
2006
  * Popover cell
2003
2007
  */
2004
- var _63 = (0, use_cell_popover_1.useCellPopover)({
2008
+ var _64 = (0, use_cell_popover_1.useCellPopover)({
2005
2009
  sheetId: sheetId,
2006
2010
  getCellPopoverContent: getCellPopoverContent !== null && getCellPopoverContent !== void 0 ? getCellPopoverContent : getFormattedValue,
2007
2011
  getCellOffsetFromCoords: getCellOffsetFromCoords,
@@ -2009,7 +2013,7 @@ function CanvasGridComponent(props, forwardedRef) {
2009
2013
  isFrozenColumn: isFrozenColumn,
2010
2014
  isFrozenRow: isFrozenRow,
2011
2015
  onChangeActiveSheet: onChangeActiveSheet,
2012
- }), popoverComponent = _63.popoverComponent, popoverRange = _63.popoverRange, showCellPopover = _63.showCellPopover, hideCellPopover = _63.hideCellPopover;
2016
+ }), popoverComponent = _64.popoverComponent, popoverRange = _64.popoverRange, showCellPopover = _64.showCellPopover, hideCellPopover = _64.hideCellPopover;
2013
2017
  /**
2014
2018
  * Get tooltip component of a cell
2015
2019
  * Only error, invalid values are
@@ -2051,10 +2055,164 @@ function CanvasGridComponent(props, forwardedRef) {
2051
2055
  var dataRegionBoundaries = (0, react_1.useMemo)(function () {
2052
2056
  return tables === null || tables === void 0 ? void 0 : tables.filter(function (table) { return table.sheetId === sheetId; }).map(function (table) { return table.range; });
2053
2057
  }, [tables, sheetId]);
2058
+ /**
2059
+ * True when a source cell of a fill is date-formatted — the fill menu then
2060
+ * adds Fill Days / Weekdays / Months / Years (Excel shows them only for
2061
+ * date sources). Reads the cell's own format first, then the effective
2062
+ * (style-plane) format so rnc-backed cells count too.
2063
+ */
2064
+ var sourceHasDates = (0, react_1.useCallback)(function (fillSheetId, sources) {
2065
+ var e_11, _a;
2066
+ var _b, _c, _d, _e, _f;
2067
+ var visited = 0;
2068
+ try {
2069
+ for (var sources_1 = tslib_1.__values(sources), sources_1_1 = sources_1.next(); !sources_1_1.done; sources_1_1 = sources_1.next()) {
2070
+ var range = sources_1_1.value.range;
2071
+ for (var r = range.startRowIndex; r <= range.endRowIndex; r++) {
2072
+ for (var c = range.startColumnIndex; c <= range.endColumnIndex; c++) {
2073
+ // Bounded scan: a whole-column source would otherwise cost a full walk.
2074
+ if (++visited > 256)
2075
+ return false;
2076
+ var uf = (_b = getCellData === null || getCellData === void 0 ? void 0 : getCellData(fillSheetId, r, c)) === null || _b === void 0 ? void 0 : _b.userEnteredFormat;
2077
+ var type = (_d = (uf && "numberFormat" in uf ? (_c = uf.numberFormat) === null || _c === void 0 ? void 0 : _c.type : undefined)) !== null && _d !== void 0 ? _d : (_f = (_e = getEffectiveFormat === null || getEffectiveFormat === void 0 ? void 0 : getEffectiveFormat(fillSheetId, r, c)) === null || _e === void 0 ? void 0 : _e.numberFormat) === null || _f === void 0 ? void 0 : _f.type;
2078
+ if (type === "DATE" || type === "DATE_TIME")
2079
+ return true;
2080
+ }
2081
+ }
2082
+ }
2083
+ }
2084
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
2085
+ finally {
2086
+ try {
2087
+ if (sources_1_1 && !sources_1_1.done && (_a = sources_1.return)) _a.call(sources_1);
2088
+ }
2089
+ finally { if (e_11) throw e_11.error; }
2090
+ }
2091
+ return false;
2092
+ }, [getCellData, getEffectiveFormat]);
2093
+ /**
2094
+ * A fill-handle drag ended: park the gesture so the Auto Fill Options smart
2095
+ * tag (left drag — already filled) or the right-drag fill menu (nothing
2096
+ * filled yet) can re-choose the fill type.
2097
+ */
2098
+ var handleFillHandleRelease = (0, react_1.useCallback)(function (release) {
2099
+ if (readonly)
2100
+ return;
2101
+ setFillOptions({
2102
+ sheetId: release.sheetId,
2103
+ activeCell: release.activeCell,
2104
+ fillSelection: release.fillSelection,
2105
+ selections: release.selections,
2106
+ fillType: undefined,
2107
+ hasDates: sourceHasDates(release.sheetId, release.selections.length
2108
+ ? release.selections
2109
+ : [{ range: (0, grid_1.cellToArea)(release.activeCell) }]),
2110
+ mode: release.button === "right" ? "menu" : "smart-tag",
2111
+ });
2112
+ }, [readonly, setFillOptions, sourceHasDates]);
2113
+ /**
2114
+ * An entry of the fill menu was picked: re-issue the fill from the (still
2115
+ * intact) source with the explicit type. The target is simply overwritten
2116
+ * with the new result — no undo round-trip needed because the source
2117
+ * selection is never touched by a fill.
2118
+ */
2119
+ var handleChooseFillType = (0, react_1.useCallback)(function (fillType) {
2120
+ if (!fillOptions)
2121
+ return;
2122
+ onFill === null || onFill === void 0 ? void 0 : onFill(fillOptions.sheetId, fillOptions.activeCell, fillOptions.fillSelection, fillOptions.selections, undefined, fillType);
2123
+ setFillOptions(tslib_1.__assign(tslib_1.__assign({}, fillOptions), { fillType: fillType, mode: "smart-tag" }));
2124
+ focusSheet();
2125
+ }, [fillOptions, onFill, setFillOptions, focusSheet]);
2126
+ var handleCloseFillOptions = (0, react_1.useCallback)(function () {
2127
+ // Only the right-drag menu is "cancel on close"; the smart tag stays.
2128
+ if ((fillOptions === null || fillOptions === void 0 ? void 0 : fillOptions.mode) === "menu")
2129
+ setFillOptions(null);
2130
+ }, [fillOptions, setFillOptions]);
2131
+ /**
2132
+ * Run Excel's Series dialog result: the target range's first row (Series
2133
+ * in Columns) / first column (Rows) is the seed line; `stop` may shrink or
2134
+ * extend the target along the axis from the seed's last value.
2135
+ */
2136
+ var applyFillSeriesSpec = (0, react_1.useCallback)(function (fillSheetId, cell, target, spec) {
2137
+ var seed = (0, fill_series_1.seedRangeForSeriesSpec)(target.range, spec);
2138
+ var fillRange = (0, fill_series_1.fillRangeForSeriesSpec)({
2139
+ target: target.range,
2140
+ seed: seed,
2141
+ spec: spec,
2142
+ getSeedValue: function (r, c) {
2143
+ var value = getEffectiveValue(fillSheetId, r, c);
2144
+ return typeof value === "number" ? value : undefined;
2145
+ },
2146
+ rowCount: rowCount,
2147
+ columnCount: columnCount,
2148
+ });
2149
+ if (!fillRange)
2150
+ return;
2151
+ var fillType = spec.type === "linear"
2152
+ ? spec.trend
2153
+ ? "LinearTrend"
2154
+ : "FillSeries"
2155
+ : spec.type === "growth"
2156
+ ? "GrowthTrend"
2157
+ : spec.type === "date"
2158
+ ? spec.dateUnit === "weekday"
2159
+ ? "FillWeekdays"
2160
+ : spec.dateUnit === "month"
2161
+ ? "FillMonths"
2162
+ : spec.dateUnit === "year"
2163
+ ? "FillYears"
2164
+ : "FillDays"
2165
+ : undefined;
2166
+ onFill === null || onFill === void 0 ? void 0 : onFill(fillSheetId, cell, { range: fillRange }, [tslib_1.__assign(tslib_1.__assign({}, target), { range: seed })], undefined, fillType, { series: spec });
2167
+ onChangeSelections === null || onChangeSelections === void 0 ? void 0 : onChangeSelections(fillSheetId, [tslib_1.__assign(tslib_1.__assign({}, target), { range: fillRange })]);
2168
+ }, [getEffectiveValue, onFill, onChangeSelections, rowCount, columnCount]);
2169
+ /** Open the Series dialog for a range (the current selection by default). */
2170
+ var openFillSeriesDialogFor = (0, react_1.useCallback)(function (target, initialIn) {
2171
+ var _a;
2172
+ var selection = (_a = target !== null && target !== void 0 ? target : selections[selections.length - 1]) !== null && _a !== void 0 ? _a : { range: (0, grid_1.cellToArea)(activeCell) };
2173
+ openFillSeriesDialog({
2174
+ sheetId: sheetId,
2175
+ activeCell: activeCell,
2176
+ selection: selection,
2177
+ initialIn: initialIn,
2178
+ onApply: function (spec) {
2179
+ return applyFillSeriesSpec(sheetId, activeCell, selection, spec);
2180
+ },
2181
+ });
2182
+ }, [selections, activeCell, sheetId, openFillSeriesDialog, applyFillSeriesSpec]);
2183
+ /** "Series…" on the right-drag fill menu: the drag's target is the range, its axis the default. */
2184
+ var handleOpenFillSeriesDialog = (0, react_1.useCallback)(function () {
2185
+ var _a;
2186
+ if (!fillOptions)
2187
+ return;
2188
+ var range = fillOptions.fillSelection.range;
2189
+ var source = (_a = fillOptions.selections[0]) === null || _a === void 0 ? void 0 : _a.range;
2190
+ var initialIn = source &&
2191
+ (range.endRowIndex > source.endRowIndex ||
2192
+ range.startRowIndex < source.startRowIndex)
2193
+ ? "columns"
2194
+ : "rows";
2195
+ setFillOptions(null);
2196
+ openFillSeriesDialogFor({ range: range }, initialIn);
2197
+ }, [fillOptions, setFillOptions, openFillSeriesDialogFor]);
2198
+ // The smart tag belongs to one fill; moving on (a new active cell) drops it.
2199
+ // Keyed on the cell's coordinates, not the object — a re-created `activeCell`
2200
+ // with the same coordinates must not dismiss it.
2201
+ (0, react_1.useEffect)(function () {
2202
+ setFillOptions(null);
2203
+ }, [activeCell.rowIndex, activeCell.columnIndex, sheetId, setFillOptions]);
2204
+ /**
2205
+ * Fill handle dragged BACK inside the selection (Excel): the dragged-over cells lose their
2206
+ * contents — formats stay unless Ctrl/Cmd was held — through the same `onDelete` path as the
2207
+ * Delete key, so both engines (legacy `useOnDelete`, rnc `delete-cells`) clear identically.
2208
+ */
2209
+ var handleFillShrink = (0, react_1.useCallback)(function (sheetId, activeCell, clearRange, options) {
2210
+ onDelete === null || onDelete === void 0 ? void 0 : onDelete(sheetId, activeCell, [{ range: clearRange }], (options === null || options === void 0 ? void 0 : options.modifier) === "toggle" ? "all" : "contents");
2211
+ }, [onDelete]);
2054
2212
  /**
2055
2213
  * Handle grid selections
2056
2214
  */
2057
- var _64 = (0, use_selection_1.useSelection)({
2215
+ var _65 = (0, use_selection_1.useSelection)({
2058
2216
  sheetId: sheetId,
2059
2217
  getDataRowCount: getDataRowCount,
2060
2218
  enableDataBoundaryNavigation: enableDataBoundaryNavigation,
@@ -2082,6 +2240,8 @@ function CanvasGridComponent(props, forwardedRef) {
2082
2240
  scrollToCell: scrollToCell,
2083
2241
  isMergedCell: isMergedCell,
2084
2242
  onFill: onFill,
2243
+ onFillHandleRelease: handleFillHandleRelease,
2244
+ onFillShrink: handleFillShrink,
2085
2245
  onMoveSelection: onMoveSelection,
2086
2246
  isHiddenColumn: isHiddenColumn,
2087
2247
  isHiddenRow: isHiddenRow,
@@ -2089,11 +2249,11 @@ function CanvasGridComponent(props, forwardedRef) {
2089
2249
  isColumnHeader: isColumnHeader,
2090
2250
  isTouchDevice: helpers_1.isTouchDevice,
2091
2251
  dataRegionBoundaries: dataRegionBoundaries,
2092
- }), onMouseDownSelection = _64.onMouseDown, onPointerDownSelection = _64.onPointerDown, onKeyDownSelection = _64.onKeyDown, fillSelection = _64.fillSelection, onFillHandleMouseDown = _64.onFillHandleMouseDown, onFillHandleDoubleClick = _64.onFillHandleDoubleClick, isDragging = _64.isDragging, isFilling = _64.isFilling, isSelectionInProgress = _64.isSelectionInProgress, draggedSelection = _64.draggedSelection, onSelectionMouseDown = _64.onSelectionMouseDown, setActiveCell = _64.setActiveCell, initialDraggedSelection = _64.initialDraggedSelection, updateSelectionStartEndReference = _64.updateSelectionStartEndReference, selectColumn = _64.selectColumn, getContentfulGridRangeAroundCell = _64.getContentfulGridRangeAroundCell, newSelection = _64.newSelection, modifySelection = _64.modifySelection, clearSelections = _64.clearSelections;
2252
+ }), onMouseDownSelection = _65.onMouseDown, onPointerDownSelection = _65.onPointerDown, onKeyDownSelection = _65.onKeyDown, fillSelection = _65.fillSelection, fillShrink = _65.fillShrink, onFillHandleMouseDown = _65.onFillHandleMouseDown, onFillHandleDoubleClick = _65.onFillHandleDoubleClick, isDragging = _65.isDragging, isFilling = _65.isFilling, isSelectionInProgress = _65.isSelectionInProgress, draggedSelection = _65.draggedSelection, onSelectionMouseDown = _65.onSelectionMouseDown, setActiveCell = _65.setActiveCell, initialDraggedSelection = _65.initialDraggedSelection, updateSelectionStartEndReference = _65.updateSelectionStartEndReference, selectColumn = _65.selectColumn, getContentfulGridRangeAroundCell = _65.getContentfulGridRangeAroundCell, newSelection = _65.newSelection, modifySelection = _65.modifySelection, clearSelections = _65.clearSelections;
2093
2253
  /**
2094
2254
  * Copy, Paste and Cut hook
2095
2255
  */
2096
- var _65 = (0, use_copy_paste_cut_1.useCopyPasteCut)({
2256
+ var _66 = (0, use_copy_paste_cut_1.useCopyPasteCut)({
2097
2257
  activeCell: activeCell,
2098
2258
  selections: selections,
2099
2259
  sheetId: sheetId,
@@ -2101,7 +2261,7 @@ function CanvasGridComponent(props, forwardedRef) {
2101
2261
  onPaste: onPaste,
2102
2262
  onCopy: onCopy,
2103
2263
  onCut: onCut,
2104
- }), copiedSelections = _65.copiedSelections, clearCopiedSelections = _65.clearCopiedSelections, copy = _65.copy, cut = _65.cut, paste = _65.paste, onInternalCopy = _65.onInternalCopy, onInternalCut = _65.onInternalCut, onInternalPaste = _65.onInternalPaste;
2264
+ }), copiedSelections = _66.copiedSelections, clearCopiedSelections = _66.clearCopiedSelections, copy = _66.copy, cut = _66.cut, paste = _66.paste, onInternalCopy = _66.onInternalCopy, onInternalCut = _66.onInternalCut, onInternalPaste = _66.onInternalPaste;
2105
2265
  /**
2106
2266
  * Paste Special dialog (context menu → Paste special…, Ctrl+Alt+V). The
2107
2267
  * dialog is host-mounted (`PasteSpecialDialogHost`); its request routes
@@ -2259,6 +2419,8 @@ function CanvasGridComponent(props, forwardedRef) {
2259
2419
  onChange: onChange,
2260
2420
  getCommitValidation: getCommitValidation,
2261
2421
  showValidationAlert: showValidationAlert,
2422
+ selections: selections,
2423
+ onChangeBatch: onChangeBatch,
2262
2424
  });
2263
2425
  /**
2264
2426
  * User cancels editing the cell
@@ -2426,7 +2588,7 @@ function CanvasGridComponent(props, forwardedRef) {
2426
2588
  * Displays Context menu when user right clicks
2427
2589
  * the grid
2428
2590
  */
2429
- var _66 = (0, use_context_menu_1.useContextMenu)({
2591
+ var _67 = (0, use_context_menu_1.useContextMenu)({
2430
2592
  getCellCoordsFromOffset: getCellCoordsFromOffset,
2431
2593
  getRelativePositionFromOffset: getRelativePositionFromOffset,
2432
2594
  isRowHeader: isRowHeader,
@@ -2435,7 +2597,7 @@ function CanvasGridComponent(props, forwardedRef) {
2435
2597
  getCellOffsetFromCoords: getCellOffsetFromCoords,
2436
2598
  getScrollPosition: getScrollPosition,
2437
2599
  ContextMenuWrapper: ContextMenuWrapper,
2438
- }), onContextMenu = _66.onContextMenu, contextMenuComponent = _66.contextMenuComponent, onRequestCloseContextMenu = _66.onRequestClose, showContextMenu = _66.showContextMenu;
2600
+ }), onContextMenu = _67.onContextMenu, contextMenuComponent = _67.contextMenuComponent, onRequestCloseContextMenu = _67.onRequestClose, showContextMenu = _67.showContextMenu;
2439
2601
  /**
2440
2602
  * Shortcut handlers for formatting
2441
2603
  * TODO: Decide on the output
@@ -2515,7 +2677,7 @@ function CanvasGridComponent(props, forwardedRef) {
2515
2677
  /**
2516
2678
  * Allow grid to be ediable
2517
2679
  */
2518
- var _67 = (0, use_editable_1.useEditable)({
2680
+ var _68 = (0, use_editable_1.useEditable)({
2519
2681
  sheetId: sheetId,
2520
2682
  enableEditOnEnterKey: enableEditOnEnterKey,
2521
2683
  canEdit: canEditCell,
@@ -2564,11 +2726,11 @@ function CanvasGridComponent(props, forwardedRef) {
2564
2726
  onCopy: onInternalCopy,
2565
2727
  onPaste: onInternalPaste,
2566
2728
  onCut: onInternalCut,
2567
- }), onMouseDownEditable = _67.onMouseDown, onDoubleClickEditable = _67.onDoubleClick, editorComponent = _67.editorComponent, isEditInProgress = _67.isEditInProgress, makeEditable = _67.makeEditable, editCell = _67.editCell, setEditorValue = _67.setEditorValue, hideEditor = _67.hideEditor, getNextFocusableCell = _67.getNextFocusableCell, submitEditor = _67.submitEditor, cancelEditor = _67.cancelEditor, commit = _67.commit;
2729
+ }), onMouseDownEditable = _68.onMouseDown, onDoubleClickEditable = _68.onDoubleClick, editorComponent = _68.editorComponent, isEditInProgress = _68.isEditInProgress, makeEditable = _68.makeEditable, editCell = _68.editCell, setEditorValue = _68.setEditorValue, hideEditor = _68.hideEditor, getNextFocusableCell = _68.getNextFocusableCell, submitEditor = _68.submitEditor, cancelEditor = _68.cancelEditor, commit = _68.commit;
2568
2730
  /**
2569
2731
  * Move rows and columns
2570
2732
  */
2571
- var _68 = (0, use_move_columns_rows_1.useMoveColumnsAndRows)({
2733
+ var _69 = (0, use_move_columns_rows_1.useMoveColumnsAndRows)({
2572
2734
  getCellOffsetFromCoords: getCellOffsetFromCoords,
2573
2735
  getCellCoordsFromOffset: getCellCoordsFromOffset,
2574
2736
  getRelativePositionFromOffset: getRelativePositionFromOffset,
@@ -2591,11 +2753,11 @@ function CanvasGridComponent(props, forwardedRef) {
2591
2753
  sheetId: sheetId,
2592
2754
  disabled: isRestricted,
2593
2755
  HeaderMoveDragComponent: HeaderMoveDragComponent,
2594
- }), draggableColumns = _68.draggableColumns, draggableRows = _68.draggableRows, isDraggingRowsAndColumns = _68.isDragging;
2756
+ }), draggableColumns = _69.draggableColumns, draggableRows = _69.draggableRows, isDraggingRowsAndColumns = _69.isDragging;
2595
2757
  /**
2596
2758
  * Header actions
2597
2759
  */
2598
- var _69 = (0, use_header_actions_1.useHeaderActions)({
2760
+ var _70 = (0, use_header_actions_1.useHeaderActions)({
2599
2761
  activeCell: isSelectionInProgress || isFilling || isDragging ? null : hoveredCell,
2600
2762
  getScrollPosition: getScrollPosition,
2601
2763
  getCellOffsetFromCoords: getCellOffsetFromCoords,
@@ -2622,7 +2784,7 @@ function CanvasGridComponent(props, forwardedRef) {
2622
2784
  selectedRowHeadersIds: selectedRowHeadersIds,
2623
2785
  selectedColumnHeadersIds: selectedColumnHeadersIds,
2624
2786
  enableResizerOverflow: enableResizerOverflow,
2625
- }), headerMenuComponent = _69.headerMenuComponent, isHeaderMenuInFrozenColumn = _69.isHeaderMenuInFrozenColumn, headerResizer = _69.headerResizer, isDraggingHeader = _69.isDragging;
2787
+ }), headerMenuComponent = _70.headerMenuComponent, isHeaderMenuInFrozenColumn = _70.isHeaderMenuInFrozenColumn, headerResizer = _70.headerResizer, isDraggingHeader = _70.isDragging;
2626
2788
  /**
2627
2789
  * Close tooltip
2628
2790
  */
@@ -2664,7 +2826,7 @@ function CanvasGridComponent(props, forwardedRef) {
2664
2826
  /**
2665
2827
  * Show basicFilter panels
2666
2828
  */
2667
- var _70 = (0, use_filter_1.useFilter)({
2829
+ var _71 = (0, use_filter_1.useFilter)({
2668
2830
  sheetId: sheetId,
2669
2831
  scale: scale,
2670
2832
  theme: theme,
@@ -2689,9 +2851,9 @@ function CanvasGridComponent(props, forwardedRef) {
2689
2851
  // Live filter state so the open popup tracks Auto-apply spec changes.
2690
2852
  basicFilter: basicFilter,
2691
2853
  tables: activeTables,
2692
- }), showFilter = _70.showFilter, hideFilter = _70.hideFilter, filterComponent = _70.filterComponent;
2854
+ }), showFilter = _71.showFilter, hideFilter = _71.hideFilter, filterComponent = _71.filterComponent;
2693
2855
  // Table resize
2694
- var _71 = (0, use_table_resizer_1.useTableResizer)({
2856
+ var _72 = (0, use_table_resizer_1.useTableResizer)({
2695
2857
  sheetId: sheetId,
2696
2858
  tables: tables !== null && tables !== void 0 ? tables : undefined,
2697
2859
  theme: theme,
@@ -2702,11 +2864,11 @@ function CanvasGridComponent(props, forwardedRef) {
2702
2864
  scrollToCell: scrollToCell,
2703
2865
  onResizeTable: onResizeTable,
2704
2866
  focusSheet: focusSheet,
2705
- }), tableResizers = _71.tableResizers, isResizingTable = _71.isResizingTable;
2867
+ }), tableResizers = _72.tableResizers, isResizingTable = _72.isResizingTable;
2706
2868
  /**
2707
2869
  * Displays resizable/draggable charts
2708
2870
  */
2709
- var _72 = (0, use_embeds_charts_1.useEmbedsCharts)({
2871
+ var _73 = (0, use_embeds_charts_1.useEmbedsCharts)({
2710
2872
  charts: charts,
2711
2873
  embeds: embeds,
2712
2874
  slicers: slicers,
@@ -2743,7 +2905,7 @@ function CanvasGridComponent(props, forwardedRef) {
2743
2905
  backgroundColor: cellBackgroundColor,
2744
2906
  disabled: isRestricted,
2745
2907
  readonly: readonly,
2746
- }), chartComponents = _72.chartComponents, embedComponents = _72.embedComponents, slicerComponents = _72.slicerComponents, onMouseDownCharts = _72.onMouseDown;
2908
+ }), chartComponents = _73.chartComponents, embedComponents = _73.embedComponents, slicerComponents = _73.slicerComponents, onMouseDownCharts = _73.onMouseDown;
2747
2909
  /**
2748
2910
  * Callback when user clicks Filter icon
2749
2911
  * Show Filter dropdown here
@@ -2873,6 +3035,8 @@ function CanvasGridComponent(props, forwardedRef) {
2873
3035
  hideCellPopover();
2874
3036
  // Hide paste mnenu
2875
3037
  setShowPasteMenu(false);
3038
+ // Hide the Auto Fill Options smart tag (its own mousedown never reaches here)
3039
+ setFillOptions(null);
2876
3040
  // Remove pinned tooltip
2877
3041
  onUnpinTooltip();
2878
3042
  }, [
@@ -2884,6 +3048,7 @@ function CanvasGridComponent(props, forwardedRef) {
2884
3048
  setFormulaState,
2885
3049
  hideCellPopover,
2886
3050
  setShowPasteMenu,
3051
+ setFillOptions,
2887
3052
  onUnpinTooltip,
2888
3053
  focusSheet,
2889
3054
  ]);
@@ -2998,7 +3163,7 @@ function CanvasGridComponent(props, forwardedRef) {
2998
3163
  /**
2999
3164
  * Render Cells in the grid
3000
3165
  */
3001
- var _73 = tslib_1.__read((0, use_cell_renderer_1.useCellRenderer)({
3166
+ var _74 = tslib_1.__read((0, use_cell_renderer_1.useCellRenderer)({
3002
3167
  sheetId: sheetId,
3003
3168
  showGridLines: showGridLines,
3004
3169
  scale: scale,
@@ -3064,7 +3229,7 @@ function CanvasGridComponent(props, forwardedRef) {
3064
3229
  onOverflow: handleOverflow,
3065
3230
  isComparing: isComparing,
3066
3231
  getCellDiff: getCellDiff,
3067
- }), 4), cellBackgroundRenderer = _73[0], cellRenderer = _73[1], cellOverlayRenderer = _73[2], headerCellRenderer = _73[3];
3232
+ }), 4), cellBackgroundRenderer = _74[0], cellRenderer = _74[1], cellOverlayRenderer = _74[2], headerCellRenderer = _74[3];
3068
3233
  /**
3069
3234
  * When user selects a selection for moving
3070
3235
  * If its a table, we select the entire column
@@ -3100,11 +3265,11 @@ function CanvasGridComponent(props, forwardedRef) {
3100
3265
  tokenizer: tokenizer,
3101
3266
  });
3102
3267
  // Selection move: drag a formula reference via its border covers
3103
- var _74 = (0, use_selection_move_1.useSelectionMove)({
3268
+ var _75 = (0, use_selection_move_1.useSelectionMove)({
3104
3269
  getCellCoordsFromOffset: getCellCoordsFromOffset,
3105
3270
  scrollToCell: scrollToCell,
3106
3271
  tokenizer: tokenizer,
3107
- }), onMouseDownMoveSelection = _74.onMouseDownMoveSelection, isDraggingMoveSelection = _74.isDragging;
3272
+ }), onMouseDownMoveSelection = _75.onMouseDownMoveSelection, isDraggingMoveSelection = _75.isDragging;
3108
3273
  /**
3109
3274
  * Hide fill handle
3110
3275
  * 1. When user is in edit mode
@@ -3117,9 +3282,9 @@ function CanvasGridComponent(props, forwardedRef) {
3117
3282
  /**
3118
3283
  * Flashing
3119
3284
  */
3120
- var _75 = (0, use_flash_1.useFlash)({
3285
+ var _76 = (0, use_flash_1.useFlash)({
3121
3286
  theme: theme,
3122
- }), flash = _75.flash, mark = _75.mark, unmark = _75.unmark, onFlashEnd = _75.onFlashEnd, flashingBorders = _75.flashingBorders;
3287
+ }), flash = _76.flash, mark = _76.mark, unmark = _76.unmark, onFlashEnd = _76.onFlashEnd, flashingBorders = _76.flashingBorders;
3123
3288
  // Cache hover ids
3124
3289
  var cachedHoveredSelectionIds = (0, use_hovered_selection_ids_1.useHoveredSelectionIds)({
3125
3290
  selections: selections,
@@ -3129,9 +3294,12 @@ function CanvasGridComponent(props, forwardedRef) {
3129
3294
  /**
3130
3295
  * Selection Renderer
3131
3296
  */
3297
+ // The drag-back preview reuses the fill overlay geometry but greys the cells about to be cleared.
3298
+ var fillShrinkOverlay = (0, react_1.useMemo)(function () { return (fillShrink ? { range: fillShrink.clearRange } : undefined); }, [fillShrink]);
3132
3299
  var selectionRenderer = (0, use_selection_renderer_1.useSelectionRenderer)({
3133
3300
  sheetId: sheetId,
3134
3301
  scale: scale,
3302
+ isFillShrink: fillShrink !== undefined,
3135
3303
  onSelectionMouseDown: onSelectionElementMouseDown,
3136
3304
  onMouseDownResizeHandle: onMouseDownResizeHandle,
3137
3305
  onMouseDownMoveSelection: onMouseDownMoveSelection,
@@ -3160,6 +3328,10 @@ function CanvasGridComponent(props, forwardedRef) {
3160
3328
  readonly: readonly,
3161
3329
  onSplitTextToColumns: onSplitTextToColumns,
3162
3330
  showPasteMenu: showPasteMenu,
3331
+ fillOptions: fillOptions,
3332
+ onChooseFillType: handleChooseFillType,
3333
+ onOpenFillSeriesDialog: handleOpenFillSeriesDialog,
3334
+ onCloseFillOptions: handleCloseFillOptions,
3163
3335
  hoveredCell: delayedHoveredCell,
3164
3336
  onRemoveQuickEdit: onRemoveQuickEdit,
3165
3337
  onAddQuickEdit: onAddQuickEdit,
@@ -3195,7 +3367,7 @@ function CanvasGridComponent(props, forwardedRef) {
3195
3367
  quickEditValues: quickEditValues,
3196
3368
  });
3197
3369
  // Hidden column markers
3198
- var _76 = tslib_1.__read((0, use_hidden_dimension_markers_1.useHiddenDimensionMarkers)({
3370
+ var _77 = tslib_1.__read((0, use_hidden_dimension_markers_1.useHiddenDimensionMarkers)({
3199
3371
  sheetId: sheetId,
3200
3372
  columnMetadata: columnMetadata,
3201
3373
  rowMetadata: rowMetadata,
@@ -3208,7 +3380,7 @@ function CanvasGridComponent(props, forwardedRef) {
3208
3380
  columnCount: columnCount,
3209
3381
  HiddenRowMarkers: HiddenRowMarkers,
3210
3382
  HiddenColumnMarkers: HiddenColumnMarkers,
3211
- }), 4), hiddenColumnMarkers = _76[0], frozenHiddenColumnMarkers = _76[1], hiddenRowMarkers = _76[2], frozenHiddenRowMarkers = _76[3];
3383
+ }), 4), hiddenColumnMarkers = _77[0], frozenHiddenColumnMarkers = _77[1], hiddenRowMarkers = _77[2], frozenHiddenRowMarkers = _77[3];
3212
3384
  // Zoom lister
3213
3385
  var onMouseWheel = (0, use_scale_listener_1.useScaleListener)({
3214
3386
  zoomSpeed: zoomSpeed,
@@ -3388,7 +3560,7 @@ function CanvasGridComponent(props, forwardedRef) {
3388
3560
  });
3389
3561
  // Pivot placeholders
3390
3562
  var pivotPlaceholders = (0, react_1.useMemo)(function () {
3391
- var e_11, _a;
3563
+ var e_12, _a;
3392
3564
  var _b, _c;
3393
3565
  var placeholders = [];
3394
3566
  var displayIdx = 0;
@@ -3404,12 +3576,12 @@ function CanvasGridComponent(props, forwardedRef) {
3404
3576
  }
3405
3577
  }
3406
3578
  }
3407
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
3579
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
3408
3580
  finally {
3409
3581
  try {
3410
3582
  if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
3411
3583
  }
3412
- finally { if (e_11) throw e_11.error; }
3584
+ finally { if (e_12) throw e_12.error; }
3413
3585
  }
3414
3586
  return placeholders;
3415
3587
  }, [pivotTables, sheetId, onRequestEditPivotTable, getCellOffsetFromCoords]);
@@ -3486,12 +3658,14 @@ function CanvasGridComponent(props, forwardedRef) {
3486
3658
  });
3487
3659
  // props reference for spreadsheet api
3488
3660
  propsReferenceRef.current = props;
3661
+ var openFillSeriesDialogForRef = (0, use_stable_ref_1.useStableRef)(openFillSeriesDialogFor);
3489
3662
  // Expose a spreadsheet API
3490
3663
  (0, use_isomorphic_layout_effect_1.useIsomorphicLayoutEffect)(function () {
3491
3664
  var stableMethods = {
3492
3665
  getUserEnteredValue: getUserEnteredStringValueStable,
3493
3666
  scrollToCell: scrollToCell,
3494
3667
  commit: commit,
3668
+ openFillSeriesDialog: function () { var _a; return (_a = openFillSeriesDialogForRef.current) === null || _a === void 0 ? void 0 : _a.call(openFillSeriesDialogForRef); },
3495
3669
  };
3496
3670
  setSpreadsheetApi(new spreadsheet_api_1.SpreadsheetApi(propsReferenceRef, stableMethods, store, instanceStore, instanceId));
3497
3671
  }, []);
@@ -3573,7 +3747,7 @@ function CanvasGridComponent(props, forwardedRef) {
3573
3747
  width === 0 || height === 0 ? (react_1.default.createElement("div", { className: "flex border-solid border-rnc-border border border-t border-b flex-1 justify-center items-center" },
3574
3748
  react_1.default.createElement("div", { className: "space-y-2" },
3575
3749
  react_1.default.createElement(ui_1.Skeleton, { className: "h-4 w-[250px]" }),
3576
- react_1.default.createElement(ui_1.Skeleton, { className: "h-4 w-[250px]" })))) : (react_1.default.createElement(grid_5.Grid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: finalBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: fill_handle_1.FillHandle, showFillHandle: showFillHandle, fillHandleSize: fillHandleSize, showGridLines: showGridLines, enableCellOverlay: true, enableCellBackground: true, enableSelectionDrag: enableSelectionDrag, showFrozenColumnShadow: showFrozenSeparator, showFrozenRowShadow: showFrozenSeparator, selectionBorderColor: selectionBorderColor, selectionBackgroundColor: selectionBackgroundColor, fillhandleBorderColor: cellBackgroundColor, isDraggingSelection: isDragging, fillSelection: fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
3750
+ react_1.default.createElement(ui_1.Skeleton, { className: "h-4 w-[250px]" })))) : (react_1.default.createElement(grid_5.Grid, { ref: gridRef, overscanCount: overscanCount, rowCount: sheetRowCount, columnCount: sheetColumnCount, rowHeight: rowHeight, columnWidth: columnWidth, itemRenderer: cellRenderer, headerRenderer: headerCellRenderer, selectionRenderer: selectionRenderer, gridLineColor: gridLineColor, gridLineWidth: gridLineWidth, borderStyles: finalBorderStyles, mergedCells: merges, scale: scale, width: width, height: height, frozenColumns: frozenColumns, frozenRows: frozenRows, activeCell: activeCell, selections: formulaMode ? formulaSelections : selections, FillHandle: fill_handle_1.FillHandle, showFillHandle: showFillHandle, fillHandleSize: fillHandleSize, showGridLines: showGridLines, enableCellOverlay: true, enableCellBackground: true, enableSelectionDrag: enableSelectionDrag, showFrozenColumnShadow: showFrozenSeparator, showFrozenRowShadow: showFrozenSeparator, selectionBorderColor: selectionBorderColor, selectionBackgroundColor: selectionBackgroundColor, fillhandleBorderColor: cellBackgroundColor, isDraggingSelection: isDragging, fillSelection: fillShrinkOverlay !== null && fillShrinkOverlay !== void 0 ? fillShrinkOverlay : fillSelection, onPointerDown: handlePointerDown, onPointerUp: handlePointerUp, onMouseDown: handleMouseDown, onDoubleClick: handleDoubleClick, onFillHandleMouseDown: onFillHandleMouseDown, onFillHandleDoubleClick: onFillHandleDoubleClick,
3577
3751
  // Dimension of fill handle
3578
3752
  scrollToCellOffset: 4, scrollbarSize: scrollbarSize, isHiddenCell: isHiddenCell, isHiddenColumn: isHiddenColumn, isHiddenRow: isHiddenRow, visibleRowRanges: visibleRowRanges, isHiddenOverlay: isHiddenOverlay, isHiddenBackground: isHiddenBackground, overlayRenderer: cellOverlayRenderer, backgroundRenderer: cellBackgroundRenderer, shadowSettings: shadowSettings, onScroll: handleScroll, onViewPortChange: handleViewPortChange, autoFocus: autoFocus, snap: scrollSnap, scrollThrottleTimeout: scrollThrottleTimeout, preventBrowserDefaultScroll: preventBrowserDefaultScroll, showHeaders: showHeaders, gridChildren: gridChildren, onTouchStart: onTouchStart, onDimensionsChange: onDimensionsChange, extendScrollSize: helpers_1.isTouchDevice || helpers_1.isFirefox, isTouchDevice: helpers_1.isTouchDevice, frozenShadowThickness: frozenShadowThickness, onAfterScrollToCell: onAfterScrollToCell, estimatedRowHeight: defaultRowHeight, estimatedColumnWidth: defaultColumnWidth, footerHeight: footerHeight, footerComponent: footerComponent, getOverflowBuffer: getOverflowBuffer, getFrozenColumnOverflowCells: getFrozenColumnOverflowCells })),
3579
3753
  tooltipComponent,