@rowsncolumns/spreadsheet-state 28.0.74 → 28.0.75

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 (65) hide show
  1. package/dist/cjs/api/datatype.d.ts.map +1 -1
  2. package/dist/cjs/api/datatype.js +8 -1
  3. package/dist/cjs/api/fill-series-spec.d.ts +35 -0
  4. package/dist/cjs/api/fill-series-spec.d.ts.map +1 -0
  5. package/dist/cjs/api/fill-series-spec.js +164 -0
  6. package/dist/cjs/api/fill.d.ts +95 -3
  7. package/dist/cjs/api/fill.d.ts.map +1 -1
  8. package/dist/cjs/api/fill.js +1186 -418
  9. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  10. package/dist/cjs/api/immer-utils.js +20 -15
  11. package/dist/cjs/api/intl.d.ts.map +1 -1
  12. package/dist/cjs/api/paint-format.d.ts +15 -1
  13. package/dist/cjs/api/paint-format.d.ts.map +1 -1
  14. package/dist/cjs/api/paint-format.js +69 -10
  15. package/dist/cjs/commands.d.ts +11 -1
  16. package/dist/cjs/commands.d.ts.map +1 -1
  17. package/dist/cjs/hooks/use-calculation.d.ts +1 -1
  18. package/dist/cjs/hooks/use-on-fill.d.ts +13 -4
  19. package/dist/cjs/hooks/use-on-fill.d.ts.map +1 -1
  20. package/dist/cjs/hooks/use-on-fill.js +28 -7
  21. package/dist/cjs/hooks/use-paint-format.d.ts.map +1 -1
  22. package/dist/cjs/hooks/use-paint-format.js +10 -7
  23. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +1 -1
  24. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  25. package/dist/cjs/hooks/use-spreadsheet-state.js +12 -1
  26. package/dist/cjs/interface/apply-fill.d.ts +3 -3
  27. package/dist/cjs/interface/apply-fill.d.ts.map +1 -1
  28. package/dist/cjs/interface/apply-fill.js +100 -53
  29. package/dist/cjs/interface/spreadsheet-interface.d.ts +1 -1
  30. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  31. package/dist/cjs/sheet-cell.js +30 -6
  32. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  33. package/dist/esm/api/datatype.d.ts.map +1 -1
  34. package/dist/esm/api/datatype.js +8 -1
  35. package/dist/esm/api/fill-series-spec.d.ts +35 -0
  36. package/dist/esm/api/fill-series-spec.d.ts.map +1 -0
  37. package/dist/esm/api/fill-series-spec.js +160 -0
  38. package/dist/esm/api/fill.d.ts +95 -3
  39. package/dist/esm/api/fill.d.ts.map +1 -1
  40. package/dist/esm/api/fill.js +1158 -418
  41. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  42. package/dist/esm/api/immer-utils.js +20 -15
  43. package/dist/esm/api/intl.d.ts.map +1 -1
  44. package/dist/esm/api/paint-format.d.ts +15 -1
  45. package/dist/esm/api/paint-format.d.ts.map +1 -1
  46. package/dist/esm/api/paint-format.js +46 -1
  47. package/dist/esm/commands.d.ts +11 -1
  48. package/dist/esm/commands.d.ts.map +1 -1
  49. package/dist/esm/hooks/use-calculation.d.ts +1 -1
  50. package/dist/esm/hooks/use-on-fill.d.ts +13 -4
  51. package/dist/esm/hooks/use-on-fill.d.ts.map +1 -1
  52. package/dist/esm/hooks/use-on-fill.js +24 -4
  53. package/dist/esm/hooks/use-paint-format.d.ts.map +1 -1
  54. package/dist/esm/hooks/use-paint-format.js +10 -7
  55. package/dist/esm/hooks/use-spreadsheet-state.d.ts +1 -1
  56. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  57. package/dist/esm/hooks/use-spreadsheet-state.js +12 -1
  58. package/dist/esm/interface/apply-fill.d.ts +3 -3
  59. package/dist/esm/interface/apply-fill.d.ts.map +1 -1
  60. package/dist/esm/interface/apply-fill.js +93 -48
  61. package/dist/esm/interface/spreadsheet-interface.d.ts +1 -1
  62. package/dist/esm/sheet-cell.d.ts.map +1 -1
  63. package/dist/esm/sheet-cell.js +30 -6
  64. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  65. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"datatype.d.ts","sourceRoot":"","sources":["../../../api/datatype.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datatype.d.ts","sourceRoot":"","sources":["../../../api/datatype.ts"],"names":[],"mappings":"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"}
@@ -605,11 +605,18 @@ export var detectValueTypeAndPattern = function (value, locale, lenientGrouping,
605
605
  var percentValue = convertToNumber(value, locale, lenientGrouping) / 100;
606
606
  return ["numberValue", "PERCENT", percentValue, pattern];
607
607
  }
608
+ // A JS number carries no typed digits: its decimal expansion is float
609
+ // noise (0.1 + 0.2, the 5.333333333333333 of a fitted trend), never a
610
+ // format the user asked for. Excel keeps a computed or programmatic
611
+ // number General and clips it to General's significant digits, so only
612
+ // TEXT entry infers a decimal pattern from what was typed.
608
613
  return [
609
614
  "numberValue",
610
615
  "NUMBER",
611
616
  convertToNumber(value, locale, lenientGrouping),
612
- detectNumberFormatPattern(value, numberValue, "NUMBER", locale),
617
+ typeof value === "number"
618
+ ? "General"
619
+ : detectNumberFormatPattern(value, numberValue, "NUMBER", locale),
613
620
  ];
614
621
  }
615
622
  // Date time (check before date to catch time-only formats like "1:00 AM")
@@ -0,0 +1,35 @@
1
+ import type { FillSeriesSpec } from "@rowsncolumns/spreadsheet";
2
+ /** One fill line's Series-dialog result (see {@link generateSeriesSpecValues}). */
3
+ export type SeriesSpecLine = {
4
+ /**
5
+ * Trend only: the fitted value of every numeric seed as `{ index, value }`
6
+ * (`index` into the caller's `sourceValues`) — Excel replaces the starting
7
+ * values with the trend it fitted through them. Empty for every other spec.
8
+ */
9
+ seeds: {
10
+ index: number;
11
+ value: number;
12
+ }[];
13
+ /**
14
+ * The target values in fill order. SHORTER than the requested count when
15
+ * `stop` ends the series early — the targets past it are left untouched
16
+ * (Excel writes nothing there).
17
+ */
18
+ values: unknown[];
19
+ };
20
+ /**
21
+ * Value generator behind Excel's Series dialog (Home > Fill > Series…). The
22
+ * spec is explicit user intent, so unlike drag auto-fill nothing is detected:
23
+ * Linear adds `step`, Growth multiplies by `step`, Date advances `step`
24
+ * `dateUnit`s (weekday skips Sat/Sun, month clamps to month-end). `trend` fits
25
+ * a least-squares line (Linear) / exponential (Growth) through the seeds and,
26
+ * as Excel does, REWRITES the seeds with the fitted values before continuing
27
+ * the fit (a lone seed fits a flat line — the value repeats). A `stop` value
28
+ * ends the series at the last value that does not pass it: the line comes
29
+ * back shorter and the remaining selected cells are left alone. Returns
30
+ * `undefined` when the spec does not apply (AutoFill type, or seeds that are
31
+ * not numbers/dates) so the caller falls back to the regular fill-type
32
+ * generator.
33
+ */
34
+ export declare const generateSeriesSpecValues: (sourceValues: unknown[], spec: FillSeriesSpec, count: number, locale?: string) => SeriesSpecLine | undefined;
35
+ //# sourceMappingURL=fill-series-spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fill-series-spec.d.ts","sourceRoot":"","sources":["../../../api/fill-series-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C;;;;OAIG;IACH,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,wBAAwB,GACnC,cAAc,OAAO,EAAE,EACvB,MAAM,cAAc,EACpB,OAAO,MAAM,EACb,SAAS,MAAM,KACd,cAAc,GAAG,SAqDnB,CAAC"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Value generator behind Excel's Series dialog (Home > Fill > Series…). The
3
+ * spec is explicit user intent, so unlike drag auto-fill nothing is detected:
4
+ * Linear adds `step`, Growth multiplies by `step`, Date advances `step`
5
+ * `dateUnit`s (weekday skips Sat/Sun, month clamps to month-end). `trend` fits
6
+ * a least-squares line (Linear) / exponential (Growth) through the seeds and,
7
+ * as Excel does, REWRITES the seeds with the fitted values before continuing
8
+ * the fit (a lone seed fits a flat line — the value repeats). A `stop` value
9
+ * ends the series at the last value that does not pass it: the line comes
10
+ * back shorter and the remaining selected cells are left alone. Returns
11
+ * `undefined` when the spec does not apply (AutoFill type, or seeds that are
12
+ * not numbers/dates) so the caller falls back to the regular fill-type
13
+ * generator.
14
+ */
15
+ export var generateSeriesSpecValues = function (sourceValues, spec, count, locale) {
16
+ var _a;
17
+ if (spec.type === "autofill" || count <= 0)
18
+ return undefined;
19
+ if (spec.type === "date") {
20
+ var values_1 = generateDateSeries(sourceValues, spec, count, locale);
21
+ return values_1 ? { seeds: [], values: values_1 } : undefined;
22
+ }
23
+ var indexed = sourceValues
24
+ .map(function (v, index) { return ({ index: index, value: toNumber(v) }); })
25
+ .filter(function (seed) { return Number.isFinite(seed.value); });
26
+ if (!indexed.length)
27
+ return undefined;
28
+ var numbers = indexed.map(function (seed) { return seed.value; });
29
+ var step = (_a = spec.step) !== null && _a !== void 0 ? _a : 1;
30
+ var n = numbers.length;
31
+ if (spec.trend) {
32
+ // Least-squares trend through the seeds (x = 0..n-1), continued at x = n…
33
+ // A single seed has no slope: the fit is the flat line through it.
34
+ var ys_1 = spec.type === "growth"
35
+ ? numbers.map(function (y) { return (y > 0 ? Math.log(y) : NaN); })
36
+ : numbers;
37
+ if (ys_1.some(function (y) { return !Number.isFinite(y); }))
38
+ return undefined;
39
+ var xs = ys_1.map(function (_, i) { return i; });
40
+ var sumX = xs.reduce(function (a, b) { return a + b; }, 0);
41
+ var sumY = ys_1.reduce(function (a, b) { return a + b; }, 0);
42
+ var sumXY = xs.reduce(function (a, x, i) { return a + x * ys_1[i]; }, 0);
43
+ var sumXX = xs.reduce(function (a, x) { return a + x * x; }, 0);
44
+ var denom = n * sumXX - sumX * sumX;
45
+ var slope_1 = denom === 0 ? 0 : (n * sumXY - sumX * sumY) / denom;
46
+ var intercept_1 = (sumY - slope_1 * sumX) / n;
47
+ var fit_1 = function (x) {
48
+ var fitted = slope_1 * x + intercept_1;
49
+ return normalize(spec.type === "growth" ? Math.exp(fitted) : fitted);
50
+ };
51
+ return {
52
+ seeds: indexed.map(function (seed, position) { return ({
53
+ index: seed.index,
54
+ value: fit_1(position),
55
+ }); }),
56
+ values: Array.from({ length: count }, function (_, i) { return fit_1(n + i); }),
57
+ };
58
+ }
59
+ var values = [];
60
+ var current = numbers[n - 1];
61
+ for (var i = 0; i < count; i++) {
62
+ current =
63
+ spec.type === "growth" ? current * step : current + step;
64
+ current = normalize(current);
65
+ if (passesStop(current, step, spec))
66
+ break;
67
+ values.push(current);
68
+ }
69
+ return { seeds: [], values: values };
70
+ };
71
+ var toNumber = function (v) {
72
+ return typeof v === "number"
73
+ ? v
74
+ : typeof v === "string" && v.trim() !== "" && !isNaN(Number(v))
75
+ ? Number(v)
76
+ : NaN;
77
+ };
78
+ /** Excel's stop rule: the series ends once a value would move past `stop` in the series' direction. */
79
+ var passesStop = function (value, step, spec) {
80
+ var stop = spec.stop;
81
+ if (stop === undefined || !Number.isFinite(stop))
82
+ return false;
83
+ var ascending = spec.type === "growth" ? Math.abs(step) > 1 === value > 0 : step > 0;
84
+ return ascending ? value > stop + 1e-9 : value < stop - 1e-9;
85
+ };
86
+ /** Snap float noise (0.1 + 0.2) to a clean decimal. */
87
+ var normalize = function (x) {
88
+ if (!Number.isFinite(x))
89
+ return x;
90
+ var r = Math.round(x * 1e10) / 1e10;
91
+ return Math.abs(r - Math.round(r)) < 1e-9 ? Math.round(r) : r;
92
+ };
93
+ var toDateValue = function (value) {
94
+ if (value instanceof Date)
95
+ return isNaN(value.getTime()) ? null : value;
96
+ if (typeof value === "string" && value.trim()) {
97
+ var parsed = new Date(value);
98
+ return isNaN(parsed.getTime()) ? null : parsed;
99
+ }
100
+ return null;
101
+ };
102
+ var generateDateSeries = function (sourceValues, spec, count, locale) {
103
+ var _a, _b;
104
+ var dates = sourceValues
105
+ .map(toDateValue)
106
+ .filter(function (d) { return d !== null; });
107
+ if (!dates.length)
108
+ return undefined;
109
+ var last = dates[dates.length - 1];
110
+ var step = Math.trunc((_a = spec.step) !== null && _a !== void 0 ? _a : 1) || 1;
111
+ var unit = (_b = spec.dateUnit) !== null && _b !== void 0 ? _b : "day";
112
+ var result = [];
113
+ var current = new Date(last);
114
+ var lastDayOfMonth = last.getDate();
115
+ for (var i = 0; i < count; i++) {
116
+ switch (unit) {
117
+ case "day":
118
+ current.setDate(current.getDate() + step);
119
+ break;
120
+ case "weekday": {
121
+ var dir = step > 0 ? 1 : -1;
122
+ for (var k = 0; k < Math.abs(step); k++) {
123
+ do {
124
+ current.setDate(current.getDate() + dir);
125
+ } while (current.getDay() === 0 || current.getDay() === 6);
126
+ }
127
+ break;
128
+ }
129
+ case "month": {
130
+ // Keep the seed's day-of-month, clamped to the target month's length.
131
+ var target = new Date(last);
132
+ target.setDate(1);
133
+ target.setMonth(last.getMonth() + step * (i + 1));
134
+ var daysInMonth = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
135
+ target.setDate(Math.min(lastDayOfMonth, daysInMonth));
136
+ current.setTime(target.getTime());
137
+ break;
138
+ }
139
+ case "year": {
140
+ var target = new Date(last);
141
+ target.setDate(1);
142
+ target.setFullYear(last.getFullYear() + step * (i + 1));
143
+ var daysInMonth = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();
144
+ target.setDate(Math.min(lastDayOfMonth, daysInMonth));
145
+ current.setTime(target.getTime());
146
+ break;
147
+ }
148
+ }
149
+ if (spec.stop !== undefined && Number.isFinite(spec.stop)) {
150
+ // Date stop values are Excel serials; compare on whole days since epoch.
151
+ // Past the stop the line ends — the remaining cells stay untouched.
152
+ var serial = (current.getTime() - Date.UTC(1899, 11, 30)) / 86400000 +
153
+ current.getTimezoneOffset() / 1440;
154
+ var ascending = step > 0;
155
+ if (ascending ? serial > spec.stop + 1e-6 : serial < spec.stop - 1e-6) {
156
+ break;
157
+ }
158
+ }
159
+ // Mirrors `generateFillValues`' date cases, which hand back locale date
160
+ // strings that `SheetCell` re-parses into a date-formatted serial.
161
+ result.push(new Date(current).toLocaleDateString(locale));
162
+ }
163
+ return result;
164
+ };
@@ -3,11 +3,73 @@ import type { GridRange } from "@rowsncolumns/common-types";
3
3
  import { Direction } from "@rowsncolumns/common-types";
4
4
  import type { SelectionAttributes } from "@rowsncolumns/spreadsheet";
5
5
  import type { CellData } from "@rowsncolumns/spreadsheet";
6
+ import type { FillModifier, FillSeriesSpec } from "@rowsncolumns/spreadsheet";
6
7
  import type { CanvasGridProps } from "@rowsncolumns/spreadsheet";
7
8
  import type { Draft } from "immer";
8
9
  import type { CellXfsRegistry } from "../hooks/use-cellxfs-registry";
9
10
  import type { useSheetProperties } from "../hooks/use-sheet-properties";
10
- export type AutoFillType = "FillCopy" | "FillCustomList" | "FillDays" | "FillDefault" | "FillFormats" | "FillMonths" | "FillSeries" | "FillValues" | "FillWeekdays" | "FillYears" | "FlashFill" | "GrowthTrend" | "LinearTrend";
11
+ export type AutoFillType = "FillCopy" | "FillCustomList" | "FillDays" | "FillDefault" | "FillFormats" | "FillHours" | "FillMonths" | "FillSeries" | "FillValues" | "FillWeekdays"
12
+ /** Alias of Excel's `xlFillValues` under the Auto Fill Options label ("Fill Without Formatting"). */
13
+ | "FillWithoutFormatting" | "FillYears" | "FlashFill" | "GrowthTrend" | "LinearTrend";
14
+ /**
15
+ * Resolve the Ctrl/Cmd fill-handle toggle the way Excel does — ONE fill type
16
+ * for the whole drag, decided from what auto-detection would have done per
17
+ * fill line (each column of a vertical fill / row of a horizontal one).
18
+ * If ANY line would extend a series (2+ numbers, a date, a list name,
19
+ * "Item 1"), the toggle means Copy Cells for every line; only when every
20
+ * line would copy (lone numbers) does it mean Fill Series. Formula lines
21
+ * never vote (formulas always copy with relative-ref adjustment) and empty
22
+ * lines are ignored.
23
+ */
24
+ export declare const resolveToggledFillType: (detectedPerLine: (AutoFillType | undefined)[]) => AutoFillType;
25
+ /**
26
+ * Excel's Auto Fill Options payload modifiers: "Fill Formatting Only" (`FillFormats`) and
27
+ * "Fill Without Formatting" (`FillWithoutFormatting`; `FillValues` is the VBA `xlFillValues`
28
+ * spelling the AI fill tool uses). Neither is a series mode — the series is detected exactly as
29
+ * for a plain drag; they only change WHAT lands in each target cell.
30
+ */
31
+ export declare const isFormatsOnlyFillType: (fillType: AutoFillType | undefined) => fillType is "FillFormats";
32
+ export declare const isValuesOnlyFillType: (fillType: AutoFillType | undefined) => fillType is "FillValues" | "FillWithoutFormatting";
33
+ /**
34
+ * Thrown when a fill source is touched by merges that don't tile it with identically sized
35
+ * blocks — Excel refuses the fill with this exact message and writes nothing.
36
+ */
37
+ export declare class MergedFillSizeError extends Error {
38
+ constructor();
39
+ }
40
+ /**
41
+ * Marks a target cell the fill leaves exactly as it is: a Series-dialog `stop` value was reached
42
+ * before the selection's end, and Excel writes nothing into the remaining selected cells.
43
+ */
44
+ export declare const FILL_UNTOUCHED: unique symbol;
45
+ export type AutoFillCellValue<T extends CellData> = T | string | number | null | undefined | Draft<T> | typeof FILL_UNTOUCHED;
46
+ /** A seed cell rewritten by the fill (absolute coordinates on the sheet). */
47
+ export type AutoFillSeedCell<T extends CellData> = {
48
+ rowIndex: number;
49
+ columnIndex: number;
50
+ cell: T;
51
+ };
52
+ /**
53
+ * The per-target-cell payload (indexed `[row][column]` relative to the filled area — the target
54
+ * rectangle beyond the source). A merged seed additionally reports the merge blocks to land and
55
+ * the fill extent snapped to whole blocks (the area `applyFill` actually writes). A Series-dialog
56
+ * Trend reports the seed cells it rewrites with the fitted values (Excel replaces the starting
57
+ * values) in `seedCells`.
58
+ */
59
+ export type AutoFillResult<T extends CellData> = AutoFillCellValue<T>[][] & {
60
+ fillMerges?: GridRange[];
61
+ snappedFillBounds?: GridRange;
62
+ seedCells?: AutoFillSeedCell<T>[];
63
+ };
64
+ /**
65
+ * The merged-block geometry of a fill source: `undefined` when no merge touches it, the block
66
+ * size when identically sized merges tile it exactly (every merge inside the source, on the block
67
+ * lattice, and together covering it), else a {@link MergedFillSizeError}.
68
+ */
69
+ export declare const resolveMergedFillBlock: (range: GridRange, merges: GridRange[] | null | undefined) => {
70
+ rows: number;
71
+ cols: number;
72
+ } | undefined;
11
73
  /**
12
74
  * User-defined autofill lists. Each list is an array of strings that
13
75
  * the autofill engine treats as a cyclic sequence — e.g. starting from
@@ -36,6 +98,11 @@ export type GetAutoFillValuesProps<T extends CellData> = {
36
98
  * Area user is trying to fill
37
99
  */
38
100
  fillBounds: GridRange;
101
+ /**
102
+ * The sheet's merged ranges. A source tiled by identically sized merges fills block by block
103
+ * (each landed block merged like the seed); omit for plain per-cell fills.
104
+ */
105
+ merges?: GridRange[] | null;
39
106
  /**
40
107
  * Get cell data of a sheet
41
108
  */
@@ -61,6 +128,18 @@ export type GetAutoFillValuesProps<T extends CellData> = {
61
128
  * Auto fill type - if not specified, will auto-detect
62
129
  */
63
130
  fillType?: AutoFillType;
131
+ /**
132
+ * `"toggle"` when Ctrl/Cmd was held on the fill handle at release. Only
133
+ * consulted when `fillType` is not set: inverts the auto-detected
134
+ * copy↔series decision for the whole drag (see `resolveToggledFillType`).
135
+ */
136
+ modifier?: FillModifier;
137
+ /**
138
+ * Excel Series-dialog parameters. When present (and not `type:
139
+ * "autofill"`), the values come from the spec's generator — step/stop,
140
+ * trend, date unit — instead of the fill-type heuristics.
141
+ */
142
+ series?: FillSeriesSpec;
64
143
  /**
65
144
  * User-defined autofill lists. When the selection matches a
66
145
  * contiguous slice of one of these lists, the fill cycles through
@@ -72,6 +151,13 @@ export type GetAutoFillValuesProps<T extends CellData> = {
72
151
  */
73
152
  getDataValidationById?: ReturnType<typeof useSheetProperties>["getDataValidationById"];
74
153
  };
154
+ /**
155
+ * Continue a text+number series ("Item 1" → "Item 2"; "001" → "002" keeps the
156
+ * zero padding; "1st Period" → "2nd Period" re-derives the ordinal). One seed
157
+ * steps by ±1 (by fill direction); two or more take the seeds' difference.
158
+ */
159
+ export declare const generateTextNumberSeries: (values: string[], count: number, descending?: boolean) => string[] | null;
160
+ export declare const generateQuarterSeries: (values: string[], count: number, descending?: boolean) => string[] | null;
75
161
  /**
76
162
  * Detect the fill type based on selection data
77
163
  */
@@ -79,10 +165,16 @@ export declare const detectFillType: (selectionData: (string | number | boolean
79
165
  /**
80
166
  * Generate fill values based on type and pattern
81
167
  */
82
- export declare const generateFillValues: (sourceValues: any[], fillType: AutoFillType, count: number, locale?: string, customAutofillLists?: CustomAutofillList[]) => any[];
168
+ export declare const generateFillValues: (sourceValues: any[], fillType: AutoFillType, count: number, locale?: string, customAutofillLists?: CustomAutofillList[],
169
+ /**
170
+ * The fill walks away from the selection's start (fill up / fill left), so a
171
+ * single seed continues backwards: "Item 5" → "Item 4", Wednesday → Tuesday.
172
+ * Multi-seed lines already encode the direction in their reversed order.
173
+ */
174
+ descending?: boolean) => any[];
83
175
  /**
84
176
  * Get auto fill values
85
177
  * @returns T[][]
86
178
  */
87
- export declare const getAutoFillValues: <T extends CellData>({ sheetId, direction, selection, fillBounds, getCellData, getEffectiveValue, getFormattedValue, getSheetName, getDataValidationById, cellXfsRegistry, locale, fillType, customAutofillLists, }: GetAutoFillValuesProps<T>) => Promise<(T | string | number | null | undefined | Draft<T>)[][]>;
179
+ export declare const getAutoFillValues: <T extends CellData>({ sheetId, direction, selection, fillBounds, getCellData, getEffectiveValue, getFormattedValue, getSheetName, getDataValidationById, cellXfsRegistry, locale, fillType: requestedFillType, modifier, series, customAutofillLists, merges, }: GetAutoFillValuesProps<T>) => Promise<AutoFillResult<T>>;
88
180
  //# sourceMappingURL=fill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../api/fill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGxE,MAAM,MAAM,YAAY,GACpB,UAAU,GACV,gBAAgB,GAChB,UAAU,GACV,aAAa,GACb,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,WAAW,GACX,WAAW,GACX,aAAa,GACb,aAAa,CAAC;AAElB;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,EAAE,CAAC;AAE1C,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,QAAQ,IAAI;IACvD;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC9C;;OAEG;IACH,UAAU,EAAE,SAAS,CAAC;IACtB;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;IAC5D;;OAEG;IACH,iBAAiB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACxE;;OAEG;IACH,iBAAiB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACxE,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C;;OAEG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAChC,OAAO,kBAAkB,CAC1B,CAAC,uBAAuB,CAAC,CAAC;CAC5B,CAAC;AAqSF;;GAEG;AACH,eAAO,MAAM,cAAc,GACzB,eAAe,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,EACxE,eAAa,EACb,sBAAsB,kBAAkB,EAAE,KACzC,YA6KF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,GAAG,EAAE,EACnB,UAAU,YAAY,EACtB,OAAO,MAAM,EACb,SAAS,MAAM,EACf,sBAAsB,kBAAkB,EAAE,KACzC,GAAG,EAqTL,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,CAAC,SAAS,QAAQ,EAAE,gMAczD,sBAAsB,CAAC,CAAC,CAAC,KAAG,OAAO,CACpC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAyiBxD,CAAC"}
1
+ {"version":3,"file":"fill.d.ts","sourceRoot":"","sources":["../../../api/fill.ts"],"names":[],"mappings":"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"}