@rowsncolumns/spreadsheet 10.2.75 → 10.2.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/fill-series.d.ts +38 -0
- package/dist/cjs/api/fill-series.d.ts.map +1 -0
- package/dist/cjs/api/fill-series.js +89 -0
- package/dist/cjs/api/spreadsheet-api.d.ts +6 -2
- package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/cjs/api/spreadsheet-api.js +9 -3
- package/dist/cjs/atoms/fill-options.atom.d.ts +36 -0
- package/dist/cjs/atoms/fill-options.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/fill-options.atom.js +11 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.d.ts +26 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.js +14 -0
- package/dist/cjs/atoms/index.d.ts +2 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +2 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +224 -50
- package/dist/cjs/components/canvas-grid/typings.d.ts +13 -4
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.d.ts +9 -0
- package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.js +8 -1
- package/dist/cjs/components/cell-editor/helpers.spec.js +14 -0
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +6 -3
- package/dist/cjs/components/fill-series-dialog/index.d.ts +29 -0
- package/dist/cjs/components/fill-series-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/fill-series-dialog/index.js +156 -0
- package/dist/cjs/components/selection/fill-options-menu.d.ts +32 -0
- package/dist/cjs/components/selection/fill-options-menu.d.ts.map +1 -0
- package/dist/cjs/components/selection/fill-options-menu.js +65 -0
- package/dist/cjs/components/selection/index.d.ts +1 -1
- package/dist/cjs/components/selection/index.d.ts.map +1 -1
- package/dist/cjs/components/selection/index.js +4 -2
- package/dist/cjs/components/selection/types.d.ts +11 -1
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-format-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/text-format-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-format-selector.js +15 -3
- package/dist/cjs/hooks/use-editable.d.ts +11 -2
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +8 -0
- package/dist/cjs/hooks/use-editor-submit.d.ts +32 -3
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +111 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +3 -2
- package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -2
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +21 -4
- package/dist/cjs/hooks/use-selection.d.ts +54 -4
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +232 -37
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +39 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/api/fill-series.d.ts +38 -0
- package/dist/esm/api/fill-series.d.ts.map +1 -0
- package/dist/esm/api/fill-series.js +78 -0
- package/dist/esm/api/spreadsheet-api.d.ts +6 -2
- package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/esm/api/spreadsheet-api.js +8 -3
- package/dist/esm/atoms/fill-options.atom.d.ts +36 -0
- package/dist/esm/atoms/fill-options.atom.d.ts.map +1 -0
- package/dist/esm/atoms/fill-options.atom.js +5 -0
- package/dist/esm/atoms/fill-series-dialog.atom.d.ts +26 -0
- package/dist/esm/atoms/fill-series-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/fill-series-dialog.atom.js +9 -0
- package/dist/esm/atoms/index.d.ts +2 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +2 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +167 -6
- package/dist/esm/components/canvas-grid/typings.d.ts +13 -4
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.d.ts +9 -0
- package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.js +6 -0
- package/dist/esm/components/cell-editor/helpers.spec.js +15 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +7 -4
- package/dist/esm/components/fill-series-dialog/index.d.ts +29 -0
- package/dist/esm/components/fill-series-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/fill-series-dialog/index.js +151 -0
- package/dist/esm/components/selection/fill-options-menu.d.ts +32 -0
- package/dist/esm/components/selection/fill-options-menu.d.ts.map +1 -0
- package/dist/esm/components/selection/fill-options-menu.js +63 -0
- package/dist/esm/components/selection/index.d.ts +1 -1
- package/dist/esm/components/selection/index.d.ts.map +1 -1
- package/dist/esm/components/selection/index.js +4 -2
- package/dist/esm/components/selection/types.d.ts +11 -1
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-format-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/text-format-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-format-selector.js +14 -2
- package/dist/esm/hooks/use-editable.d.ts +11 -2
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +8 -0
- package/dist/esm/hooks/use-editor-submit.d.ts +32 -3
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +82 -3
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +3 -2
- package/dist/esm/hooks/use-selection-renderer.d.ts +13 -2
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +22 -5
- package/dist/esm/hooks/use-selection.d.ts +54 -4
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +220 -36
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +39 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +4 -4
|
@@ -7,6 +7,9 @@ import { scheduleImmediatePriorityCallback, scheduleNormalPriorityCallback, } fr
|
|
|
7
7
|
import { DEFAULT_ARRAY } from "../config";
|
|
8
8
|
import { isMac } from "../helpers";
|
|
9
9
|
import { useCallbackRef } from "./use-callback-ref";
|
|
10
|
+
/** Ctrl on every platform; Cmd is accepted as an alias on macOS (Excel for Mac uses Ctrl). */
|
|
11
|
+
const isFillToggleModifier = (e) => e.ctrlKey || e.metaKey;
|
|
12
|
+
const fillGestureOptions = (e) => e.ctrlKey || e.metaKey ? { modifier: "toggle" } : undefined;
|
|
10
13
|
const defaultIsHidden = () => false;
|
|
11
14
|
const defaultSelectionSpan = () => true;
|
|
12
15
|
const getPossibleActiveCellFromSelections = (selections) => {
|
|
@@ -41,16 +44,81 @@ const boundsSubsetOfSelection = (range, selection) => {
|
|
|
41
44
|
range.startColumnIndex >= selection.startColumnIndex &&
|
|
42
45
|
range.endColumnIndex <= selection.endColumnIndex);
|
|
43
46
|
};
|
|
47
|
+
const cellInRange = (cell, range) => cell.rowIndex >= range.startRowIndex &&
|
|
48
|
+
cell.rowIndex <= range.endRowIndex &&
|
|
49
|
+
cell.columnIndex >= range.startColumnIndex &&
|
|
50
|
+
cell.columnIndex <= range.endColumnIndex;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a fill-handle drag to a shrink of `selection` (Excel "drag back inside the selection").
|
|
53
|
+
* `coords` is the cell under the pointer. A shrink needs a multi-cell selection and a pointer that
|
|
54
|
+
* is inside it but short of its bottom-right corner along at least one axis; the axis with the
|
|
55
|
+
* larger travel wins (rows first on a tie), mirroring how a fill picks its direction. Returns
|
|
56
|
+
* `undefined` when the drag is not a shrink (outside the selection, single cell, or still at the
|
|
57
|
+
* corner) — the caller then treats it as a regular fill.
|
|
58
|
+
*/
|
|
59
|
+
const fillShrinkFor = (selection, coords) => {
|
|
60
|
+
const isSingleCell = selection.startRowIndex === selection.endRowIndex &&
|
|
61
|
+
selection.startColumnIndex === selection.endColumnIndex;
|
|
62
|
+
if (isSingleCell || !cellInRange(coords, selection))
|
|
63
|
+
return undefined;
|
|
64
|
+
const rowsExcluded = selection.endRowIndex - coords.rowIndex;
|
|
65
|
+
const colsExcluded = selection.endColumnIndex - coords.columnIndex;
|
|
66
|
+
if (rowsExcluded <= 0 && colsExcluded <= 0)
|
|
67
|
+
return undefined;
|
|
68
|
+
if (rowsExcluded >= colsExcluded) {
|
|
69
|
+
return {
|
|
70
|
+
clearRange: { ...selection, startRowIndex: coords.rowIndex + 1 },
|
|
71
|
+
remaining: { ...selection, endRowIndex: coords.rowIndex },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
clearRange: { ...selection, startColumnIndex: coords.columnIndex + 1 },
|
|
76
|
+
remaining: { ...selection, endColumnIndex: coords.columnIndex },
|
|
77
|
+
};
|
|
78
|
+
};
|
|
44
79
|
/**
|
|
45
80
|
* Hook to enable selection in datagrid
|
|
46
81
|
* @param initialSelection
|
|
47
82
|
*/
|
|
48
|
-
export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selections, onChangeSelections, columnCount = 0, rowCount = 0, selectionPolicy = "multiple", newSelectionMode = "clear", allowDeselectSelection = true, onFill, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, alwaysScrollToActiveCell = true, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, mouseDownInterceptor, mouseMoveInterceptor, mergedCells = DEFAULT_ARRAY, canSelectionSpanMergedCells = defaultSelectionSpan, getValue, onMoveSelection, getCellCoordsFromOffset, getCellBounds, getViewPort, focus, scrollToCell, isMergedCell, enableSelectOnEnterKey, formulaMode, isTouchDevice, getDataRowCount, isRowHeader, isColumnHeader, enableDataBoundaryNavigation = false, }) => {
|
|
83
|
+
export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selections, onChangeSelections, columnCount = 0, rowCount = 0, selectionPolicy = "multiple", newSelectionMode = "clear", allowDeselectSelection = true, onFill, onFillHandleRelease, onFillShrink, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, alwaysScrollToActiveCell = true, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, mouseDownInterceptor, mouseMoveInterceptor, mergedCells = DEFAULT_ARRAY, canSelectionSpanMergedCells = defaultSelectionSpan, getValue, onMoveSelection, getCellCoordsFromOffset, getCellBounds, getViewPort, focus, scrollToCell, isMergedCell, enableSelectOnEnterKey, formulaMode, isTouchDevice, getDataRowCount, isRowHeader, isColumnHeader, enableDataBoundaryNavigation = false, }) => {
|
|
49
84
|
const [fillSelection, setFillSelection] = useState();
|
|
85
|
+
const [fillShrink, setFillShrink] = useState();
|
|
86
|
+
const fillShrinkRef = useRef(undefined);
|
|
87
|
+
// Ctrl/Cmd state of the fill-handle drag, sampled on every mousemove (mouseup carries the
|
|
88
|
+
// modifier too, but a key released mid-drag should still count — Excel reads it at drop time,
|
|
89
|
+
// and the last move before the drop is the closest we get to that without a keyup listener).
|
|
90
|
+
const fillModifierRef = useRef(undefined);
|
|
50
91
|
const selectionStart = useRef(null);
|
|
51
92
|
const selectionEnd = useRef(null);
|
|
52
93
|
const isSelecting = useRef(false);
|
|
53
94
|
const isFilling = useRef(false);
|
|
95
|
+
/** Mouse button that grabbed the fill handle (a right-button drag opens the fill menu). */
|
|
96
|
+
const fillButtonRef = useRef("left");
|
|
97
|
+
/**
|
|
98
|
+
* One-shot, capture-phase `contextmenu` suppressor for a fill-handle
|
|
99
|
+
* gesture. Ctrl+click is the macOS context-menu gesture and a right-button
|
|
100
|
+
* release always fires `contextmenu`; neither may reach the grid's cell
|
|
101
|
+
* context menu while the user is dragging the fill handle.
|
|
102
|
+
*/
|
|
103
|
+
const contextMenuSuppressorRef = useRef(null);
|
|
104
|
+
const releaseContextMenuSuppressor = useCallback(() => {
|
|
105
|
+
const handler = contextMenuSuppressorRef.current;
|
|
106
|
+
if (!handler)
|
|
107
|
+
return;
|
|
108
|
+
contextMenuSuppressorRef.current = null;
|
|
109
|
+
document.removeEventListener("contextmenu", handler, true);
|
|
110
|
+
}, []);
|
|
111
|
+
const suppressNextContextMenu = useCallback(() => {
|
|
112
|
+
if (contextMenuSuppressorRef.current)
|
|
113
|
+
return;
|
|
114
|
+
const handler = (e) => {
|
|
115
|
+
e.preventDefault();
|
|
116
|
+
e.stopPropagation();
|
|
117
|
+
releaseContextMenuSuppressor();
|
|
118
|
+
};
|
|
119
|
+
contextMenuSuppressorRef.current = handler;
|
|
120
|
+
document.addEventListener("contextmenu", handler, true);
|
|
121
|
+
}, [releaseContextMenuSuppressor]);
|
|
54
122
|
const selectionsRef = useRef([]);
|
|
55
123
|
const fillSelectionRef = useRef(undefined);
|
|
56
124
|
const onChangeSelectionsRef = useCallbackRef(onChangeSelections);
|
|
@@ -81,6 +149,9 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
81
149
|
useIsomorphicLayoutEffect(() => {
|
|
82
150
|
fillSelectionRef.current = fillSelection;
|
|
83
151
|
}, [fillSelection]);
|
|
152
|
+
useIsomorphicLayoutEffect(() => {
|
|
153
|
+
fillShrinkRef.current = fillShrink;
|
|
154
|
+
}, [fillShrink]);
|
|
84
155
|
/* Check if cell is out of bounds */
|
|
85
156
|
const isCellOutOfBounds = useCallback((cell) => {
|
|
86
157
|
return cell.rowIndex < 0 || cell.columnIndex < 0;
|
|
@@ -1083,6 +1154,7 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1083
1154
|
const coords = getCellCoordsFromOffset(e.clientX, e.clientY, false);
|
|
1084
1155
|
if (!coords)
|
|
1085
1156
|
return;
|
|
1157
|
+
fillModifierRef.current = fillGestureOptions(e);
|
|
1086
1158
|
const selections = selectionsRef.current;
|
|
1087
1159
|
let range = selectionFromStartEnd(activeCellRef.current, coords);
|
|
1088
1160
|
const hasSelections = selections.length > 0;
|
|
@@ -1091,6 +1163,22 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1091
1163
|
: getCellBounds(activeCellRef.current);
|
|
1092
1164
|
if (!range)
|
|
1093
1165
|
return;
|
|
1166
|
+
/**
|
|
1167
|
+
* Drag-back shrink (Excel): the handle sits at the selection's bottom-right corner; dragging
|
|
1168
|
+
* it up or left while staying INSIDE a multi-cell selection excludes the dragged-over rows
|
|
1169
|
+
* (or columns). Those cells are greyed now and cleared on release; the selection shrinks to
|
|
1170
|
+
* the rest. Dragging PAST the first row/column is an ordinary fill in that direction.
|
|
1171
|
+
*/
|
|
1172
|
+
const shrink = hasSelections
|
|
1173
|
+
? fillShrinkFor(activeCellBounds, coords)
|
|
1174
|
+
: undefined;
|
|
1175
|
+
if (shrink) {
|
|
1176
|
+
setFillSelection(undefined);
|
|
1177
|
+
setFillShrink(shrink);
|
|
1178
|
+
scrollToCell(coords);
|
|
1179
|
+
return;
|
|
1180
|
+
}
|
|
1181
|
+
setFillShrink(undefined);
|
|
1094
1182
|
const direction = range.startRowIndex < activeCellBounds.startRowIndex
|
|
1095
1183
|
? Direction.Up
|
|
1096
1184
|
: range.endRowIndex > activeCellBounds.endRowIndex
|
|
@@ -1144,24 +1232,56 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1144
1232
|
selectionTopBound,
|
|
1145
1233
|
]);
|
|
1146
1234
|
/**
|
|
1147
|
-
* When user releases mouse on the fill handle
|
|
1235
|
+
* When user releases mouse on the fill handle. Excel reads the Ctrl toggle
|
|
1236
|
+
* at RELEASE (the user can press/let go of Ctrl mid-drag), so the modifier
|
|
1237
|
+
* comes from the mouseup event, not the mousedown.
|
|
1148
1238
|
*/
|
|
1149
|
-
const handleFillMouseUp = useCallback(() => {
|
|
1239
|
+
const handleFillMouseUp = useCallback((e) => {
|
|
1150
1240
|
isFilling.current = false;
|
|
1241
|
+
const toggle = isFillToggleModifier(e);
|
|
1242
|
+
const button = fillButtonRef.current;
|
|
1151
1243
|
/* Remove listener */
|
|
1152
1244
|
document.removeEventListener("mousemove", handleFillMouseMove);
|
|
1153
1245
|
document.removeEventListener("mouseup", handleFillMouseUp);
|
|
1246
|
+
// The right-button (or macOS Ctrl+click) `contextmenu` event follows this
|
|
1247
|
+
// mouseup; keep swallowing it for one tick, then drop the suppressor so a
|
|
1248
|
+
// later, unrelated right-click still opens the cell context menu.
|
|
1249
|
+
setTimeout(releaseContextMenuSuppressor, 0);
|
|
1154
1250
|
/* Exit early */
|
|
1155
1251
|
if (!activeCellRef.current) {
|
|
1156
1252
|
return;
|
|
1157
1253
|
}
|
|
1158
1254
|
// Active fill selection
|
|
1159
1255
|
const fillSelection = fillSelectionRef.current;
|
|
1256
|
+
const shrink = fillShrinkRef.current;
|
|
1257
|
+
// Modifier for a drag-back shrink: the last move's state, else the release's.
|
|
1258
|
+
const gestureOptions = fillModifierRef.current ?? (toggle ? { modifier: "toggle" } : undefined);
|
|
1259
|
+
fillModifierRef.current = undefined;
|
|
1160
1260
|
/* Update last selection */
|
|
1161
1261
|
setFillSelection(undefined);
|
|
1262
|
+
setFillShrink(undefined);
|
|
1162
1263
|
/* Use ref, as we are binding to document */
|
|
1163
1264
|
const selections = selectionsRef.current;
|
|
1164
1265
|
const activeCell = activeCellRef.current;
|
|
1266
|
+
/* Drag-back inside the selection: clear the excluded cells, keep the rest selected */
|
|
1267
|
+
if (activeCell && shrink) {
|
|
1268
|
+
focus();
|
|
1269
|
+
onFillShrink?.(sheetId, activeCell, shrink.clearRange, gestureOptions);
|
|
1270
|
+
const len = selections.length;
|
|
1271
|
+
const shrunkSelections = len
|
|
1272
|
+
? selections.map((sel, i) => len - 1 === i ? { ...sel, range: shrink.remaining } : sel)
|
|
1273
|
+
: [{ range: shrink.remaining }];
|
|
1274
|
+
onChangeSelections?.(shrunkSelections);
|
|
1275
|
+
// The active cell normally anchors the surviving corner; if it fell in the cleared band,
|
|
1276
|
+
// move it to the remaining range's top-left so it never points at a deselected cell.
|
|
1277
|
+
if (!cellInRange(activeCell, shrink.remaining)) {
|
|
1278
|
+
onChangeActiveCell?.(sheetId, {
|
|
1279
|
+
rowIndex: shrink.remaining.startRowIndex,
|
|
1280
|
+
columnIndex: shrink.remaining.startColumnIndex,
|
|
1281
|
+
});
|
|
1282
|
+
}
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1165
1285
|
if (!activeCell || !fillSelection) {
|
|
1166
1286
|
return;
|
|
1167
1287
|
}
|
|
@@ -1174,8 +1294,11 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1174
1294
|
}
|
|
1175
1295
|
/* Focus on the grid */
|
|
1176
1296
|
focus();
|
|
1177
|
-
/* Callback
|
|
1178
|
-
|
|
1297
|
+
/* Callback — a right-button drag fills nothing yet: the grid opens the
|
|
1298
|
+
* fill menu and issues `onFill` with the entry the user picks. */
|
|
1299
|
+
if (button === "left") {
|
|
1300
|
+
onFill?.(sheetId, activeCell, fillSelection, selections, undefined, undefined, toggle ? { modifier: "toggle" } : undefined);
|
|
1301
|
+
}
|
|
1179
1302
|
/* Modify last selection */
|
|
1180
1303
|
const curSelections = selectionsRef.current;
|
|
1181
1304
|
const len = curSelections.length;
|
|
@@ -1191,14 +1314,40 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1191
1314
|
})
|
|
1192
1315
|
: [{ range: newBounds }];
|
|
1193
1316
|
onChangeSelections?.(newSelections);
|
|
1194
|
-
|
|
1317
|
+
onFillHandleRelease?.({
|
|
1318
|
+
sheetId,
|
|
1319
|
+
activeCell,
|
|
1320
|
+
fillSelection,
|
|
1321
|
+
selections,
|
|
1322
|
+
toggle,
|
|
1323
|
+
button,
|
|
1324
|
+
});
|
|
1325
|
+
}, [
|
|
1326
|
+
focus,
|
|
1327
|
+
handleFillMouseMove,
|
|
1328
|
+
onChangeSelections,
|
|
1329
|
+
onChangeActiveCell,
|
|
1330
|
+
onFill,
|
|
1331
|
+
onFillHandleRelease,
|
|
1332
|
+
onFillShrink,
|
|
1333
|
+
releaseContextMenuSuppressor,
|
|
1334
|
+
sheetId,
|
|
1335
|
+
]);
|
|
1195
1336
|
const handleFillMouseDown = useCallback((e) => {
|
|
1196
1337
|
e.stopPropagation();
|
|
1197
1338
|
e.preventDefault();
|
|
1339
|
+
const isRightButton = e.button === MouseButtonCodes.right;
|
|
1340
|
+
fillButtonRef.current = isRightButton ? "right" : "left";
|
|
1341
|
+
// Ctrl+drag on the handle must never become the macOS Ctrl+click
|
|
1342
|
+
// context-menu gesture, and a right-button drag must not open the cell
|
|
1343
|
+
// context menu on release — swallow that gesture's `contextmenu`.
|
|
1344
|
+
if (isRightButton || isFillToggleModifier(e)) {
|
|
1345
|
+
suppressNextContextMenu();
|
|
1346
|
+
}
|
|
1198
1347
|
isFilling.current = true;
|
|
1199
1348
|
document.addEventListener("mousemove", handleFillMouseMove);
|
|
1200
1349
|
document.addEventListener("mouseup", handleFillMouseUp);
|
|
1201
|
-
}, [handleFillMouseMove, handleFillMouseUp]);
|
|
1350
|
+
}, [handleFillMouseMove, handleFillMouseUp, suppressNextContextMenu]);
|
|
1202
1351
|
/**
|
|
1203
1352
|
* Remove the last selection from state
|
|
1204
1353
|
*/
|
|
@@ -1444,10 +1593,17 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1444
1593
|
// Add a ref. makeEditable renders way too often
|
|
1445
1594
|
const handleKeyDownRef = useCallbackRef(handleKeyDown);
|
|
1446
1595
|
/**
|
|
1447
|
-
* Double-click fill handle
|
|
1448
|
-
* 1.
|
|
1449
|
-
*
|
|
1450
|
-
*
|
|
1596
|
+
* Double-click fill handle — Excel's AutoFill rules:
|
|
1597
|
+
* 1. Pick the adjacent column: the one LEFT of the selection when its cell on the selection's top
|
|
1598
|
+
* row is non-blank, else the one on the RIGHT; neither → nothing happens.
|
|
1599
|
+
* 2. Extent = that column's contiguous data block below the selection (End+Down semantics: a
|
|
1600
|
+
* blank ends the block; only a blank in the very first row below the selection is skipped,
|
|
1601
|
+
* and only when the row after it is non-blank).
|
|
1602
|
+
* 3. Never overwrite: the fill halts before the first pre-existing non-blank cell in the fill
|
|
1603
|
+
* column(s) themselves.
|
|
1604
|
+
* 4. Ctrl (Cmd on Mac) held → the same copy↔series inversion as a Ctrl+drag (`options.modifier`).
|
|
1605
|
+
* Scans are row-by-row through `getValue` and bounded by the sheet's data extent, so the cost is
|
|
1606
|
+
* O(rows of the adjacent block), never O(sheet).
|
|
1451
1607
|
*/
|
|
1452
1608
|
const handleFillDoubleClick = useCallback((e) => {
|
|
1453
1609
|
e.stopPropagation();
|
|
@@ -1465,33 +1621,58 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1465
1621
|
const endRow = currentBounds.endRowIndex;
|
|
1466
1622
|
const leftCol = currentBounds.startColumnIndex;
|
|
1467
1623
|
const rightCol = currentBounds.endColumnIndex;
|
|
1468
|
-
|
|
1469
|
-
// 1.
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
if (leftCol > selectionLeftBound) {
|
|
1474
|
-
const leftValue = getValue(sheetId, startRow, leftCol - 1);
|
|
1475
|
-
if (!isNull(leftValue)) {
|
|
1476
|
-
hasAdjacentData = true;
|
|
1477
|
-
}
|
|
1624
|
+
const hasValue = (rowIndex, columnIndex) => !isNull(getValue(sheetId, rowIndex, columnIndex));
|
|
1625
|
+
// 1. Adjacent column: left first, then right — judged on the selection's top row.
|
|
1626
|
+
let adjacentColumn;
|
|
1627
|
+
if (leftCol > selectionLeftBound && hasValue(startRow, leftCol - 1)) {
|
|
1628
|
+
adjacentColumn = leftCol - 1;
|
|
1478
1629
|
}
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
if (!isNull(rightValue)) {
|
|
1483
|
-
hasAdjacentData = true;
|
|
1484
|
-
}
|
|
1630
|
+
else if (rightCol < selectionRightBound &&
|
|
1631
|
+
hasValue(startRow, rightCol + 1)) {
|
|
1632
|
+
adjacentColumn = rightCol + 1;
|
|
1485
1633
|
}
|
|
1486
|
-
|
|
1487
|
-
if (!hasAdjacentData)
|
|
1634
|
+
if (adjacentColumn === undefined)
|
|
1488
1635
|
return;
|
|
1489
|
-
//
|
|
1490
|
-
//
|
|
1636
|
+
// The last row that can hold data — bounds every scan below. `getDataRowCount` is the legacy
|
|
1637
|
+
// `sheetData.length` contract (rows are 1-based, so the count is lastDataRow + 1); the rnc
|
|
1638
|
+
// engine's windowed path answers with the same shape (its 1-based `sheet_extents` max_row + 1).
|
|
1491
1639
|
const dataRowCount = getDataRowCount?.(sheetId);
|
|
1492
|
-
const
|
|
1493
|
-
|
|
1494
|
-
|
|
1640
|
+
const lastDataRow = Math.min(selectionBottomBound, dataRowCount !== undefined ? dataRowCount - 1 : selectionBottomBound);
|
|
1641
|
+
if (lastDataRow <= endRow)
|
|
1642
|
+
return;
|
|
1643
|
+
// 2. Walk the adjacent column's contiguous block below the selection.
|
|
1644
|
+
let adjacentEnd = endRow;
|
|
1645
|
+
let row = endRow + 1;
|
|
1646
|
+
if (!hasValue(row, adjacentColumn)) {
|
|
1647
|
+
// End+Down: skip exactly one blank directly below the selection when data resumes after it.
|
|
1648
|
+
if (row + 1 <= lastDataRow && hasValue(row + 1, adjacentColumn)) {
|
|
1649
|
+
row += 1;
|
|
1650
|
+
}
|
|
1651
|
+
else {
|
|
1652
|
+
return;
|
|
1653
|
+
}
|
|
1654
|
+
}
|
|
1655
|
+
while (row <= lastDataRow && hasValue(row, adjacentColumn)) {
|
|
1656
|
+
adjacentEnd = row;
|
|
1657
|
+
row += 1;
|
|
1658
|
+
}
|
|
1659
|
+
if (adjacentEnd <= endRow)
|
|
1660
|
+
return;
|
|
1661
|
+
// 3. Stop before the first pre-existing value in the fill column(s) — existing data is kept.
|
|
1662
|
+
let targetRow = adjacentEnd;
|
|
1663
|
+
for (let r = endRow + 1; r <= adjacentEnd; r++) {
|
|
1664
|
+
let occupied = false;
|
|
1665
|
+
for (let c = leftCol; c <= rightCol; c++) {
|
|
1666
|
+
if (hasValue(r, c)) {
|
|
1667
|
+
occupied = true;
|
|
1668
|
+
break;
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
if (occupied) {
|
|
1672
|
+
targetRow = r - 1;
|
|
1673
|
+
break;
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1495
1676
|
// No additional rows to fill
|
|
1496
1677
|
if (targetRow <= endRow)
|
|
1497
1678
|
return;
|
|
@@ -1505,8 +1686,10 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1505
1686
|
const newFillSelection = { range: fillRange };
|
|
1506
1687
|
// Focus on the grid
|
|
1507
1688
|
focus();
|
|
1508
|
-
// Callback to perform the fill
|
|
1509
|
-
|
|
1689
|
+
// 4. Callback to perform the fill (Ctrl/Cmd on the double-click toggles
|
|
1690
|
+
// copy↔series exactly like a Ctrl+drag)
|
|
1691
|
+
const toggle = isFillToggleModifier(e);
|
|
1692
|
+
onFill?.(sheetId, activeCell, newFillSelection, selections, undefined, undefined, toggle ? { modifier: "toggle" } : undefined);
|
|
1510
1693
|
// Update selection to the new range
|
|
1511
1694
|
const curSelections = selectionsRef.current;
|
|
1512
1695
|
const len = curSelections.length;
|
|
@@ -1548,6 +1731,7 @@ export const useSelection = ({ sheetId, activeCell, onChangeActiveCell, selectio
|
|
|
1548
1731
|
onFillHandleMouseDown: handleFillMouseDown,
|
|
1549
1732
|
onFillHandleDoubleClick: handleFillDoubleClick,
|
|
1550
1733
|
fillSelection,
|
|
1734
|
+
fillShrink,
|
|
1551
1735
|
clearLastSelection: handleClearLastSelection,
|
|
1552
1736
|
modifySelection,
|
|
1553
1737
|
selectAll,
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -8,6 +8,10 @@ export * from "./components/sheet-status";
|
|
|
8
8
|
export * from "./components/cell-tooltip";
|
|
9
9
|
export * from "./components/insert-function-dialog";
|
|
10
10
|
export * from "./components/sort-range-dialog";
|
|
11
|
+
export * from "./components/fill-series-dialog";
|
|
12
|
+
export * from "./components/selection/fill-options-menu";
|
|
13
|
+
export * from "./api/fill-series";
|
|
14
|
+
export { type FillHandleRelease } from "./hooks/use-selection";
|
|
11
15
|
export * from "./components/paste-special-dialog";
|
|
12
16
|
export * from "./components/go-to-dialog";
|
|
13
17
|
export * from "./components/evaluate-formula-dialog";
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../index.tsx"],"names":[],"mappings":"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"}
|
package/dist/esm/index.js
CHANGED
|
@@ -8,6 +8,9 @@ export * from "./components/sheet-status";
|
|
|
8
8
|
export * from "./components/cell-tooltip";
|
|
9
9
|
export * from "./components/insert-function-dialog";
|
|
10
10
|
export * from "./components/sort-range-dialog";
|
|
11
|
+
export * from "./components/fill-series-dialog";
|
|
12
|
+
export * from "./components/selection/fill-options-menu";
|
|
13
|
+
export * from "./api/fill-series";
|
|
11
14
|
export * from "./components/paste-special-dialog";
|
|
12
15
|
export * from "./components/go-to-dialog";
|
|
13
16
|
export * from "./components/evaluate-formula-dialog";
|
package/dist/esm/release-date.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.spec.ts","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-function-dialog/index.tsx","../../components/loading-indicator/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/maybe.ts"],"version":"5.8.3"}
|
|
1
|
+
{"root":["../../config.ts","../../helpers.ts","../../index.tsx","../../release-date.ts","../../test-setup.ts","../../themes.ts","../../types.ts","../../vitest.config.ts","../../api/animate.ts","../../api/banded-ranges.ts","../../api/cf-engine.ts","../../api/cf-overlays.ts","../../api/cf-window.ts","../../api/colors.ts","../../api/copy-paste.ts","../../api/evaluate-formula.ts","../../api/excel-validation-kinds.ts","../../api/fill-patterns.ts","../../api/fill-series.ts","../../api/font-loader.ts","../../api/go-to-special.ts","../../api/go-to.ts","../../api/heatmap.ts","../../api/scheduler.ts","../../api/scroller.ts","../../api/selections.ts","../../api/spreadsheet-api.ts","../../api/table.ts","../../api/validation-tooltip.tsx","../../api/validation.ts","../../atoms/active-editor.atom.ts","../../atoms/advanced-filter-dialog.atom.ts","../../atoms/cell-input-context.atom.ts","../../atoms/editing-cell.atom.ts","../../atoms/evaluate-formula-dialog.atom.ts","../../atoms/fill-options.atom.ts","../../atoms/fill-series-dialog.atom.ts","../../atoms/formula-bar-editor-value.atom.ts","../../atoms/formula-mode.atom.ts","../../atoms/formula-selection-state.atom.ts","../../atoms/formula-selections.atom.ts","../../atoms/go-to-dialog.atom.ts","../../atoms/goal-seek-dialog.atom.ts","../../atoms/index.ts","../../atoms/loading-indicator.atom.ts","../../atoms/magic-fill-state.atom.ts","../../atoms/paste-menu.atom.ts","../../atoms/paste-special-dialog.atom.ts","../../atoms/persistent-tooltip.atom.ts","../../atoms/popover.atom.ts","../../atoms/range-selector.atom.ts","../../atoms/remove-duplicates-dialog.atom.ts","../../atoms/selected-chart-embed.atom.ts","../../atoms/sheet-context.atom.ts","../../atoms/sheet-status-display.atom.ts","../../atoms/show-formula-help.atom.ts","../../atoms/sort-dialog.atom.ts","../../atoms/spreadsheet-api.atom.ts","../../atoms/subtotal-dialog.atom.ts","../../atoms/text-to-columns-dialog.atom.ts","../../atoms/validation-alert.atom.ts","../../atoms/watch-window.atom.ts","../../components/advanced-filter-dialog/index.tsx","../../components/bottom-bar/index.tsx","../../components/calculation-options-dialog/index.tsx","../../components/canvas-grid/helpers.ts","../../components/canvas-grid/index.tsx","../../components/canvas-grid/typings.ts","../../components/cell/alignment.ts","../../components/cell/cell-background.tsx","../../components/cell/cell-text-runs.tsx","../../components/cell/helpers.ts","../../components/cell/index.tsx","../../components/cell/rich-text.ts","../../components/cell/typings.ts","../../components/cell-arrow/index.tsx","../../components/cell-calculated/index.tsx","../../components/cell-checkbox/index.tsx","../../components/cell-diff/index.tsx","../../components/cell-editor/calendar-popup.tsx","../../components/cell-editor/formula-result-preview.tsx","../../components/cell-editor/helpers.spec.ts","../../components/cell-editor/helpers.ts","../../components/cell-editor/index.tsx","../../components/cell-editor/style.tsx","../../components/cell-error/index.tsx","../../components/cell-expand/index.tsx","../../components/cell-filter/index.tsx","../../components/cell-group/index.tsx","../../components/cell-input/cell-input.tsx","../../components/cell-input/formula-bar-cell-input.tsx","../../components/cell-input/index.tsx","../../components/cell-input/style.tsx","../../components/cell-overlay/index.tsx","../../components/cell-structured/index.tsx","../../components/cell-structured/sparkline-math.ts","../../components/cell-structured/sparkline.tsx","../../components/cell-structured/types.ts","../../components/cell-tooltip/index.tsx","../../components/cell-tooltip/note-editor.tsx","../../components/cell-tooltip/style.tsx","../../components/context-menu/index.tsx","../../components/context-menu/menu.tsx","../../components/context-menu/style.tsx","../../components/context-menu/total-row-functions.ts","../../components/embeds/chart-component.tsx","../../components/embeds/embed-component.tsx","../../components/embeds/embed-draggable.tsx","../../components/embeds/index.tsx","../../components/embeds/shape-geometry.ts","../../components/embeds/shape-svg.tsx","../../components/embeds/slicer-component.tsx","../../components/evaluate-formula-dialog/index.tsx","../../components/fill-handle/index.tsx","../../components/fill-series-dialog/index.tsx","../../components/filter-box/filter-by-color.tsx","../../components/filter-box/filter-by-condition.tsx","../../components/filter-box/filter-by-value.tsx","../../components/filter-box/index.tsx","../../components/floating-cell-editor/index.tsx","../../components/formula-bar/index.tsx","../../components/formula-bar/style.tsx","../../components/formula-input/index.tsx","../../components/go-to-dialog/index.tsx","../../components/goal-seek-dialog/index.tsx","../../components/grid-footer/index.tsx","../../components/header-cell/index.tsx","../../components/header-menu/index.tsx","../../components/header-move/index.tsx","../../components/header-resizer/index.tsx","../../components/hidden-markers/index.tsx","../../components/hidden-markers/style.tsx","../../components/insert-function-dialog/index.tsx","../../components/loading-indicator/index.tsx","../../components/outline-gutter/index.tsx","../../components/paste-special-dialog/index.tsx","../../components/pivot-placeholder/index.tsx","../../components/print-preview/cell-styles.ts","../../components/print-preview/index.ts","../../components/print-preview/page-block.tsx","../../components/print-preview/print-preview-dialog.tsx","../../components/print-preview/run-print.ts","../../components/print-preview/settings.ts","../../components/print-preview/use-page-layout.ts","../../components/range-selector/index.tsx","../../components/remove-duplicates-dialog/index.tsx","../../components/resizer/index.tsx","../../components/selection/avatar.tsx","../../components/selection/fill-options-menu.tsx","../../components/selection/index.tsx","../../components/selection/magic-fill.tsx","../../components/selection/paste-menu.tsx","../../components/selection/quick-edit.tsx","../../components/selection/style.tsx","../../components/selection/suggestion-action.tsx","../../components/selection/title.tsx","../../components/selection/types.ts","../../components/selection-input/index.tsx","../../components/selection-input/style.tsx","../../components/sheet-search/index.tsx","../../components/sheet-status/index.tsx","../../components/sheet-status/style.tsx","../../components/sheet-switcher/index.tsx","../../components/sheet-switcher/new-sheet-button.tsx","../../components/sheet-tabs/context-menu.tsx","../../components/sheet-tabs/index.tsx","../../components/sheet-tabs/sheet-tab.tsx","../../components/sheet-tabs/style.tsx","../../components/sheet-tabs/types.ts","../../components/sort-range-dialog/index.tsx","../../components/subtotal-dialog/index.tsx","../../components/text-to-columns-dialog/index.tsx","../../components/toolbar/background-color-selector.tsx","../../components/toolbar/border-color-selector.tsx","../../components/toolbar/border-line-style-options.tsx","../../components/toolbar/border-line-style-selector.tsx","../../components/toolbar/border-location-options.tsx","../../components/toolbar/border-selector.tsx","../../components/toolbar/buttons.tsx","../../components/toolbar/cell-style-selector.tsx","../../components/toolbar/color-selector.tsx","../../components/toolbar/fill-selectors.tsx","../../components/toolbar/font-family-selector.tsx","../../components/toolbar/font-size-selector.tsx","../../components/toolbar/index.tsx","../../components/toolbar/insert-menu.tsx","../../components/toolbar/merge-cells-selector.tsx","../../components/toolbar/scale-selector.tsx","../../components/toolbar/style.tsx","../../components/toolbar/table-actions.tsx","../../components/toolbar/table-style-selector.tsx","../../components/toolbar/text-color-selector.tsx","../../components/toolbar/text-format-selector.tsx","../../components/toolbar/text-horizontal-align-selector.tsx","../../components/toolbar/text-rotation-selector.tsx","../../components/toolbar/text-vertical-align-selector.tsx","../../components/toolbar/text-wrap-selector.tsx","../../components/toolbar/theme-selector.tsx","../../components/toolbar/toolbar.tsx","../../components/toolbar/types.ts","../../components/toolbar/view-menu.tsx","../../components/validation-alert-dialog/index.tsx","../../components/watch-window/index.tsx","../../helpers/merged-cell-borders.ts","../../hooks/index.ts","../../hooks/show-zeros.ts","../../hooks/use-async.ts","../../hooks/use-border-styles.ts","../../hooks/use-callback-ref.ts","../../hooks/use-cell-diff-highlight.ts","../../hooks/use-cell-popover.tsx","../../hooks/use-cell-renderer.tsx","../../hooks/use-column-color-icons.ts","../../hooks/use-conditional-formatting.ts","../../hooks/use-context-menu.tsx","../../hooks/use-context-setter.ts","../../hooks/use-copy-paste-cut.tsx","../../hooks/use-create-address-from-selection.ts","../../hooks/use-create-formula-tokenizer.ts","../../hooks/use-delayed-value.ts","../../hooks/use-editable.tsx","../../hooks/use-editor-cancel.ts","../../hooks/use-editor-change.ts","../../hooks/use-editor-keydown.ts","../../hooks/use-editor-submit.ts","../../hooks/use-embeds-charts.tsx","../../hooks/use-expand-cell.tsx","../../hooks/use-export-range.ts","../../hooks/use-filter.ts","../../hooks/use-flash.ts","../../hooks/use-fonts.ts","../../hooks/use-formula-range-helpers.ts","../../hooks/use-get-tooltip.tsx","../../hooks/use-get-values-from-range.ts","../../hooks/use-grid-children.tsx","../../hooks/use-header-actions.tsx","../../hooks/use-hidden-dimension-markers.tsx","../../hooks/use-hidden-dimensions.ts","../../hooks/use-hovered-selection-ids.ts","../../hooks/use-isomorphic-layout-effect.ts","../../hooks/use-keyboard-handler.tsx","../../hooks/use-licensekey-validator.tsx","../../hooks/use-memo-compare.ts","../../hooks/use-merge.refs.ts","../../hooks/use-move-columns-rows.tsx","../../hooks/use-navigate-sheet-range.ts","../../hooks/use-previous.ts","../../hooks/use-raf.ts","../../hooks/use-resize-observer.ts","../../hooks/use-scale-listener.ts","../../hooks/use-selected-rows-columns.ts","../../hooks/use-selection-aware-formatting.ts","../../hooks/use-selection-change.ts","../../hooks/use-selection-interceptors.ts","../../hooks/use-selection-move.ts","../../hooks/use-selection-renderer.tsx","../../hooks/use-selection-resize.ts","../../hooks/use-selection.ts","../../hooks/use-sheet-change-handler.ts","../../hooks/use-sizer.ts","../../hooks/use-spreadsheet-theme.ts","../../hooks/use-stable-ref.ts","../../hooks/use-structured-reference-selection.ts","../../hooks/use-table-resizer.tsx","../../hooks/use-text-dimensions.ts","../../hooks/use-tooltip.ts","../../hooks/use-touch.ts","../../providers/spreadsheet-provider.tsx","../../signals/scroll-subscriber.ts","../../utils/maybe.ts"],"version":"5.8.3"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1459,7 +1459,45 @@ export type ParsedToken = Token & {
|
|
|
1459
1459
|
resolvedColumnIndex?: number;
|
|
1460
1460
|
};
|
|
1461
1461
|
export type SpecialItem = "#Totals" | "#Data" | "#All" | "#Headers" | "#This Row";
|
|
1462
|
-
export type AutoFillType = "FillCopy" | "FillDays" | "FillDefault" | "FillFormats" | "FillMonths" | "FillSeries" | "FillValues"
|
|
1462
|
+
export type AutoFillType = "FillCopy" | "FillDays" | "FillDefault" | "FillFormats" | "FillMonths" | "FillSeries" | "FillValues"
|
|
1463
|
+
/** Alias of Excel's `xlFillValues` under the Auto Fill Options label ("Fill Without Formatting"). */
|
|
1464
|
+
| "FillWithoutFormatting" | "FillWeekdays" | "FillYears" | "FlashFill" | "GrowthTrend" | "LinearTrend";
|
|
1465
|
+
/**
|
|
1466
|
+
* Fill-handle modifier. `"toggle"` = Ctrl (or Cmd on macOS) held when the
|
|
1467
|
+
* handle is released: Excel inverts the default AutoFill decision for the
|
|
1468
|
+
* whole drag — a copy-class source (a lone number) becomes a linear series,
|
|
1469
|
+
* and a series-class source (2+ numbers, a date, a list name, "Item 1")
|
|
1470
|
+
* becomes a plain copy. Resolved per fill where auto-detection lives, so the
|
|
1471
|
+
* grid only reports the user's intent.
|
|
1472
|
+
*/
|
|
1473
|
+
export type FillModifier = "toggle";
|
|
1474
|
+
/**
|
|
1475
|
+
* Excel's Series dialog (Home > Fill > Series…). `in` picks the fill axis
|
|
1476
|
+
* (Rows = across, Columns = down); `type` picks the generator — Linear adds
|
|
1477
|
+
* `step`, Growth multiplies by it, Date advances `step` `dateUnit`s, AutoFill
|
|
1478
|
+
* behaves like a fill-handle drag. `stop` bounds the series (the fill ends
|
|
1479
|
+
* once the next value would pass it); `trend` (Linear/Growth only) fits a
|
|
1480
|
+
* least-squares trend through the seeds instead of stepping.
|
|
1481
|
+
*/
|
|
1482
|
+
export type FillSeriesSpec = {
|
|
1483
|
+
in: "rows" | "columns";
|
|
1484
|
+
type: "linear" | "growth" | "date" | "autofill";
|
|
1485
|
+
dateUnit?: "day" | "weekday" | "month" | "year";
|
|
1486
|
+
step?: number;
|
|
1487
|
+
stop?: number;
|
|
1488
|
+
trend?: boolean;
|
|
1489
|
+
};
|
|
1490
|
+
/**
|
|
1491
|
+
* Intent that rides along with an `onFill` call: the modifier held on the
|
|
1492
|
+
* fill handle, an explicit fill type chosen from the Auto Fill Options /
|
|
1493
|
+
* right-drag menu, or the Series dialog's parameters. Everything is optional
|
|
1494
|
+
* — a plain drag sends none of it and the engine auto-detects.
|
|
1495
|
+
*/
|
|
1496
|
+
export type FillOptions = {
|
|
1497
|
+
modifier?: FillModifier;
|
|
1498
|
+
fillType?: AutoFillType;
|
|
1499
|
+
series?: FillSeriesSpec;
|
|
1500
|
+
};
|
|
1463
1501
|
export type TableTheme = "None" | "TableStyleLight1" | "TableStyleLight2" | "TableStyleLight3" | "TableStyleLight4" | "TableStyleLight5" | "TableStyleLight6" | "TableStyleLight7" | "TableStyleLight8" | "TableStyleLight9" | "TableStyleLight10" | "TableStyleLight11" | "TableStyleLight12" | "TableStyleLight13" | "TableStyleLight14" | "TableStyleLight15" | "TableStyleLight16" | "TableStyleLight17" | "TableStyleLight18" | "TableStyleLight19" | "TableStyleLight20" | "TableStyleLight21" | "TableStyleMedium1" | "TableStyleMedium2" | "TableStyleMedium3" | "TableStyleMedium4" | "TableStyleMedium5" | "TableStyleMedium6" | "TableStyleMedium7" | "TableStyleMedium8" | "TableStyleMedium9" | "TableStyleMedium10" | "TableStyleMedium11" | "TableStyleMedium12" | "TableStyleMedium13" | "TableStyleMedium14" | "TableStyleMedium15" | "TableStyleMedium16" | "TableStyleMedium17" | "TableStyleMedium18" | "TableStyleMedium19" | "TableStyleMedium20" | "TableStyleMedium21" | "TableStyleMedium22" | "TableStyleMedium23" | "TableStyleMedium24" | "TableStyleMedium25" | "TableStyleMedium26" | "TableStyleMedium27" | "TableStyleMedium28" | "TableStyleDark1" | "TableStyleDark2" | "TableStyleDark3" | "TableStyleDark4" | "TableStyleDark5" | "TableStyleDark6" | "TableStyleDark7" | "TableStyleDark8" | "TableStyleDark9" | "TableStyleDark10" | "TableStyleDark11";
|
|
1464
1502
|
export type TimePeriodTypes = "lastWeek" | "thisWeek" | "nextWeek" | "yesterday" | "today" | "tomorrow" | "last7Days" | "lastMonth" | "thisMonth" | "nextMonth";
|
|
1465
1503
|
export type AgentSuggestion = {
|