@gridsheet/core 3.0.0-rc.10
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/LICENSE +190 -0
- package/README.md +17 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +28 -0
- package/dist/constants.js.map +1 -0
- package/dist/formula/evaluator.d.ts +134 -0
- package/dist/formula/evaluator.d.ts.map +1 -0
- package/dist/formula/evaluator.js +585 -0
- package/dist/formula/evaluator.js.map +1 -0
- package/dist/formula/formula-error.d.ts +10 -0
- package/dist/formula/formula-error.d.ts.map +1 -0
- package/dist/formula/formula-error.js +15 -0
- package/dist/formula/formula-error.js.map +1 -0
- package/dist/formula/functions/__async.d.ts +67 -0
- package/dist/formula/functions/__async.d.ts.map +1 -0
- package/dist/formula/functions/__async.js +70 -0
- package/dist/formula/functions/__async.js.map +1 -0
- package/dist/formula/functions/__base.d.ts +112 -0
- package/dist/formula/functions/__base.d.ts.map +1 -0
- package/dist/formula/functions/__base.js +265 -0
- package/dist/formula/functions/__base.js.map +1 -0
- package/dist/formula/functions/__utils.d.ts +28 -0
- package/dist/formula/functions/__utils.d.ts.map +1 -0
- package/dist/formula/functions/__utils.js +179 -0
- package/dist/formula/functions/__utils.js.map +1 -0
- package/dist/formula/functions/abs.d.ts +9 -0
- package/dist/formula/functions/abs.d.ts.map +1 -0
- package/dist/formula/functions/abs.js +15 -0
- package/dist/formula/functions/abs.js.map +1 -0
- package/dist/formula/functions/add.d.ts +10 -0
- package/dist/formula/functions/add.d.ts.map +1 -0
- package/dist/formula/functions/add.js +37 -0
- package/dist/formula/functions/add.js.map +1 -0
- package/dist/formula/functions/and.d.ts +9 -0
- package/dist/formula/functions/and.d.ts.map +1 -0
- package/dist/formula/functions/and.js +23 -0
- package/dist/formula/functions/and.js.map +1 -0
- package/dist/formula/functions/arrayformula.d.ts +12 -0
- package/dist/formula/functions/arrayformula.d.ts.map +1 -0
- package/dist/formula/functions/arrayformula.js +24 -0
- package/dist/formula/functions/arrayformula.js.map +1 -0
- package/dist/formula/functions/average.d.ts +9 -0
- package/dist/formula/functions/average.d.ts.map +1 -0
- package/dist/formula/functions/average.js +40 -0
- package/dist/formula/functions/average.js.map +1 -0
- package/dist/formula/functions/concat.d.ts +9 -0
- package/dist/formula/functions/concat.d.ts.map +1 -0
- package/dist/formula/functions/concat.js +27 -0
- package/dist/formula/functions/concat.js.map +1 -0
- package/dist/formula/functions/count.d.ts +9 -0
- package/dist/formula/functions/count.d.ts.map +1 -0
- package/dist/formula/functions/count.js +32 -0
- package/dist/formula/functions/count.js.map +1 -0
- package/dist/formula/functions/counta.d.ts +9 -0
- package/dist/formula/functions/counta.d.ts.map +1 -0
- package/dist/formula/functions/counta.js +32 -0
- package/dist/formula/functions/counta.js.map +1 -0
- package/dist/formula/functions/divide.d.ts +10 -0
- package/dist/formula/functions/divide.d.ts.map +1 -0
- package/dist/formula/functions/divide.js +34 -0
- package/dist/formula/functions/divide.js.map +1 -0
- package/dist/formula/functions/eq.d.ts +9 -0
- package/dist/formula/functions/eq.d.ts.map +1 -0
- package/dist/formula/functions/eq.js +19 -0
- package/dist/formula/functions/eq.js.map +1 -0
- package/dist/formula/functions/gt.d.ts +9 -0
- package/dist/formula/functions/gt.d.ts.map +1 -0
- package/dist/formula/functions/gt.js +19 -0
- package/dist/formula/functions/gt.js.map +1 -0
- package/dist/formula/functions/gte.d.ts +9 -0
- package/dist/formula/functions/gte.d.ts.map +1 -0
- package/dist/formula/functions/gte.js +19 -0
- package/dist/formula/functions/gte.js.map +1 -0
- package/dist/formula/functions/if.d.ts +9 -0
- package/dist/formula/functions/if.d.ts.map +1 -0
- package/dist/formula/functions/if.js +29 -0
- package/dist/formula/functions/if.js.map +1 -0
- package/dist/formula/functions/iferror.d.ts +10 -0
- package/dist/formula/functions/iferror.d.ts.map +1 -0
- package/dist/formula/functions/iferror.js +28 -0
- package/dist/formula/functions/iferror.js.map +1 -0
- package/dist/formula/functions/len.d.ts +9 -0
- package/dist/formula/functions/len.d.ts.map +1 -0
- package/dist/formula/functions/len.js +21 -0
- package/dist/formula/functions/len.js.map +1 -0
- package/dist/formula/functions/lt.d.ts +9 -0
- package/dist/formula/functions/lt.d.ts.map +1 -0
- package/dist/formula/functions/lt.js +19 -0
- package/dist/formula/functions/lt.js.map +1 -0
- package/dist/formula/functions/lte.d.ts +9 -0
- package/dist/formula/functions/lte.d.ts.map +1 -0
- package/dist/formula/functions/lte.js +19 -0
- package/dist/formula/functions/lte.js.map +1 -0
- package/dist/formula/functions/max.d.ts +9 -0
- package/dist/formula/functions/max.d.ts.map +1 -0
- package/dist/formula/functions/max.js +37 -0
- package/dist/formula/functions/max.js.map +1 -0
- package/dist/formula/functions/min.d.ts +9 -0
- package/dist/formula/functions/min.d.ts.map +1 -0
- package/dist/formula/functions/min.js +37 -0
- package/dist/formula/functions/min.js.map +1 -0
- package/dist/formula/functions/minus.d.ts +10 -0
- package/dist/formula/functions/minus.d.ts.map +1 -0
- package/dist/formula/functions/minus.js +41 -0
- package/dist/formula/functions/minus.js.map +1 -0
- package/dist/formula/functions/multiply.d.ts +9 -0
- package/dist/formula/functions/multiply.d.ts.map +1 -0
- package/dist/formula/functions/multiply.js +19 -0
- package/dist/formula/functions/multiply.js.map +1 -0
- package/dist/formula/functions/ne.d.ts +9 -0
- package/dist/formula/functions/ne.d.ts.map +1 -0
- package/dist/formula/functions/ne.js +19 -0
- package/dist/formula/functions/ne.js.map +1 -0
- package/dist/formula/functions/not.d.ts +9 -0
- package/dist/formula/functions/not.d.ts.map +1 -0
- package/dist/formula/functions/not.js +22 -0
- package/dist/formula/functions/not.js.map +1 -0
- package/dist/formula/functions/now.d.ts +9 -0
- package/dist/formula/functions/now.d.ts.map +1 -0
- package/dist/formula/functions/now.js +14 -0
- package/dist/formula/functions/now.js.map +1 -0
- package/dist/formula/functions/or.d.ts +9 -0
- package/dist/formula/functions/or.d.ts.map +1 -0
- package/dist/formula/functions/or.js +23 -0
- package/dist/formula/functions/or.js.map +1 -0
- package/dist/formula/functions/power.d.ts +9 -0
- package/dist/formula/functions/power.d.ts.map +1 -0
- package/dist/formula/functions/power.js +18 -0
- package/dist/formula/functions/power.js.map +1 -0
- package/dist/formula/functions/sum.d.ts +9 -0
- package/dist/formula/functions/sum.d.ts.map +1 -0
- package/dist/formula/functions/sum.js +34 -0
- package/dist/formula/functions/sum.js.map +1 -0
- package/dist/formula/functions/uminus.d.ts +9 -0
- package/dist/formula/functions/uminus.d.ts.map +1 -0
- package/dist/formula/functions/uminus.js +17 -0
- package/dist/formula/functions/uminus.js.map +1 -0
- package/dist/formula/mapping.d.ts +11 -0
- package/dist/formula/mapping.d.ts.map +1 -0
- package/dist/formula/mapping.js +82 -0
- package/dist/formula/mapping.js.map +1 -0
- package/dist/formula/solver.d.ts +39 -0
- package/dist/formula/solver.d.ts.map +1 -0
- package/dist/formula/solver.js +71 -0
- package/dist/formula/solver.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +132 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/autofill.d.ts +22 -0
- package/dist/lib/autofill.d.ts.map +1 -0
- package/dist/lib/autofill.js +276 -0
- package/dist/lib/autofill.js.map +1 -0
- package/dist/lib/book.d.ts +131 -0
- package/dist/lib/book.d.ts.map +1 -0
- package/dist/lib/book.js +53 -0
- package/dist/lib/book.js.map +1 -0
- package/dist/lib/cell.d.ts +17 -0
- package/dist/lib/cell.d.ts.map +1 -0
- package/dist/lib/cell.js +17 -0
- package/dist/lib/cell.js.map +1 -0
- package/dist/lib/coords.d.ts +22 -0
- package/dist/lib/coords.d.ts.map +1 -0
- package/dist/lib/coords.js +73 -0
- package/dist/lib/coords.js.map +1 -0
- package/dist/lib/date.d.ts +2 -0
- package/dist/lib/date.d.ts.map +1 -0
- package/dist/lib/date.js +91 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/lib/dom.d.ts +7 -0
- package/dist/lib/dom.d.ts.map +1 -0
- package/dist/lib/dom.js +28 -0
- package/dist/lib/dom.js.map +1 -0
- package/dist/lib/filter.d.ts +7 -0
- package/dist/lib/filter.d.ts.map +1 -0
- package/dist/lib/filter.js +122 -0
- package/dist/lib/filter.js.map +1 -0
- package/dist/lib/input.d.ts +28 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +73 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/label.d.ts +4 -0
- package/dist/lib/label.d.ts.map +1 -0
- package/dist/lib/label.js +10 -0
- package/dist/lib/label.js.map +1 -0
- package/dist/lib/operation.d.ts +31 -0
- package/dist/lib/operation.d.ts.map +1 -0
- package/dist/lib/operation.js +36 -0
- package/dist/lib/operation.js.map +1 -0
- package/dist/lib/palette.d.ts +2 -0
- package/dist/lib/palette.d.ts.map +1 -0
- package/dist/lib/palette.js +26 -0
- package/dist/lib/palette.js.map +1 -0
- package/dist/lib/popup.d.ts +24 -0
- package/dist/lib/popup.d.ts.map +1 -0
- package/dist/lib/popup.js +21 -0
- package/dist/lib/popup.js.map +1 -0
- package/dist/lib/reference.d.ts +19 -0
- package/dist/lib/reference.d.ts.map +1 -0
- package/dist/lib/reference.js +40 -0
- package/dist/lib/reference.js.map +1 -0
- package/dist/lib/sheet.d.ts +512 -0
- package/dist/lib/sheet.d.ts.map +1 -0
- package/dist/lib/sheet.js +1530 -0
- package/dist/lib/sheet.js.map +1 -0
- package/dist/lib/sheet_utils.d.ts +55 -0
- package/dist/lib/sheet_utils.d.ts.map +1 -0
- package/dist/lib/sheet_utils.js +125 -0
- package/dist/lib/sheet_utils.js.map +1 -0
- package/dist/lib/spatial.d.ts +79 -0
- package/dist/lib/spatial.d.ts.map +1 -0
- package/dist/lib/spatial.js +227 -0
- package/dist/lib/spatial.js.map +1 -0
- package/dist/lib/time.d.ts +29 -0
- package/dist/lib/time.d.ts.map +1 -0
- package/dist/lib/time.js +113 -0
- package/dist/lib/time.js.map +1 -0
- package/dist/lib/virtualization.d.ts +22 -0
- package/dist/lib/virtualization.d.ts.map +1 -0
- package/dist/lib/virtualization.js +91 -0
- package/dist/lib/virtualization.js.map +1 -0
- package/dist/policy/core.d.ts +161 -0
- package/dist/policy/core.d.ts.map +1 -0
- package/dist/policy/core.js +248 -0
- package/dist/policy/core.js.map +1 -0
- package/dist/policy/thousand_separator.d.ts +4 -0
- package/dist/policy/thousand_separator.d.ts.map +1 -0
- package/dist/policy/thousand_separator.js +13 -0
- package/dist/policy/thousand_separator.js.map +1 -0
- package/dist/sentinels.d.ts +40 -0
- package/dist/sentinels.d.ts.map +1 -0
- package/dist/sentinels.js +41 -0
- package/dist/sentinels.js.map +1 -0
- package/dist/styles/embedder.d.ts +2 -0
- package/dist/styles/embedder.d.ts.map +1 -0
- package/dist/styles/embedder.js +11 -0
- package/dist/styles/embedder.js.map +1 -0
- package/dist/styles/minified.d.ts +3 -0
- package/dist/styles/minified.d.ts.map +1 -0
- package/dist/styles/minified.js +6 -0
- package/dist/styles/minified.js.map +1 -0
- package/dist/types.d.ts +310 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +5 -0
- package/dist/utils.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import I from "dayjs";
|
|
2
|
+
import { complementSelectingArea as P, zoneToArea as F, createMatrix as G, areaShape as q, areaToZone as A, concatAreas as T } from "./spatial.js";
|
|
3
|
+
import { p2a as L } from "./coords.js";
|
|
4
|
+
import { Time as E } from "./time.js";
|
|
5
|
+
const m = "dashed 1px #888888", M = {
|
|
6
|
+
left: ["horizontal", -1],
|
|
7
|
+
right: ["horizontal", 1],
|
|
8
|
+
up: ["vertical", -1],
|
|
9
|
+
down: ["vertical", 1],
|
|
10
|
+
none: ["none", 0]
|
|
11
|
+
};
|
|
12
|
+
class U {
|
|
13
|
+
constructor(i, t) {
|
|
14
|
+
const { sheetReactive: s, choosing: r, selectingZone: n } = i, o = s.current;
|
|
15
|
+
if (!o)
|
|
16
|
+
throw new Error("Sheet is not available");
|
|
17
|
+
this.src = P(F(n), r), this.direction = this.suggestDirection(t), this.dst = this.getDestinationArea(t), this.sheet = o;
|
|
18
|
+
}
|
|
19
|
+
get applied() {
|
|
20
|
+
var c, x;
|
|
21
|
+
const [i, t] = M[this.direction], { top: s, left: r, bottom: n, right: o } = this.src, e = G(n - s + 1, o - r + 1);
|
|
22
|
+
for (let a = s; a <= n; a++)
|
|
23
|
+
for (let b = r; b <= o; b++)
|
|
24
|
+
e[a - s][b - r] = this.sheet.getCell({ y: a, x: b }, { resolution: "SYSTEM" }) ?? null;
|
|
25
|
+
const h = q(this.src), d = q(this.dst), u = {};
|
|
26
|
+
if (i === "horizontal")
|
|
27
|
+
for (let a = 0; a < d.rows; a++) {
|
|
28
|
+
const b = this.getChangePatterns(e[a], "");
|
|
29
|
+
for (let f = 0; f < d.cols; f++) {
|
|
30
|
+
const y = (c = e[a % h.rows]) == null ? void 0 : c[f % h.cols], v = t > 0 ? this.dst.left + f : this.dst.right - f, S = t > 0 ? f % h.cols : (h.cols - 1 - f % h.cols) % h.cols, k = { y: this.dst.top + a, x: v }, z = this.sheet.getId(k), R = b[S].next().value, C = (y == null ? void 0 : y.formulaEnabled) ?? !0 ? this.sheet.processFormula(R, {
|
|
31
|
+
dependency: z
|
|
32
|
+
}) : R;
|
|
33
|
+
u[L(k)] = {
|
|
34
|
+
...y,
|
|
35
|
+
value: C
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (i === "vertical")
|
|
40
|
+
for (let a = 0; a < d.cols; a++) {
|
|
41
|
+
const b = this.getChangePatterns(
|
|
42
|
+
e.map((f) => f[a]),
|
|
43
|
+
""
|
|
44
|
+
);
|
|
45
|
+
for (let f = 0; f < d.rows; f++) {
|
|
46
|
+
const y = (x = e[f % h.rows]) == null ? void 0 : x[a % h.cols], v = t > 0 ? this.dst.top + f : this.dst.bottom - f, S = t > 0 ? f % h.rows : (h.rows - 1 - f % h.rows) % h.rows, k = b[S].next().value;
|
|
47
|
+
u[L({ y: v, x: this.dst.left + a })] = { ...y, value: k };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return this.sheet.update({
|
|
51
|
+
diff: u,
|
|
52
|
+
operator: "USER",
|
|
53
|
+
undoReflection: {
|
|
54
|
+
sheetId: this.sheet.id,
|
|
55
|
+
selectingZone: A(this.src)
|
|
56
|
+
},
|
|
57
|
+
redoReflection: {
|
|
58
|
+
sheetId: this.sheet.id,
|
|
59
|
+
selectingZone: A(this.dst)
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
get wholeArea() {
|
|
64
|
+
return T(this.src, this.dst);
|
|
65
|
+
}
|
|
66
|
+
getCellStyle(i) {
|
|
67
|
+
const { x: t, y: s } = i, r = {}, { top: n, left: o, bottom: e, right: h } = this.src;
|
|
68
|
+
switch (this.direction) {
|
|
69
|
+
case "left": {
|
|
70
|
+
this.dst.left <= t && t <= this.dst.right && (n === s && (r.borderTop = m), e === s - 1 && (r.borderTop = m)), this.dst.left === t && n <= s && s <= e && (r.borderLeft = m);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "right": {
|
|
74
|
+
this.dst.left <= t && t <= this.dst.right && (n === s && (r.borderTop = m), e === s - 1 && (r.borderTop = m)), this.dst.right === t - 1 && n <= s && s <= e && (r.borderLeft = m);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
case "up": {
|
|
78
|
+
this.dst.top <= s && s <= this.dst.bottom && (o === t && (r.borderLeft = m), h === t - 1 && (r.borderLeft = m)), this.dst.top === s && o <= t && t <= h && (r.borderTop = m);
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "down": {
|
|
82
|
+
this.dst.top <= s && s <= this.dst.bottom && (o === t && (r.borderLeft = m), h === t - 1 && (r.borderLeft = m)), this.dst.bottom === s - 1 && o <= t && t <= h && (r.borderTop = m);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return r;
|
|
87
|
+
}
|
|
88
|
+
getDestinationArea(i) {
|
|
89
|
+
const { x: t, y: s } = i, { top: r, left: n, bottom: o, right: e } = this.src;
|
|
90
|
+
switch (this.direction) {
|
|
91
|
+
case "left":
|
|
92
|
+
return { top: r, bottom: o, left: t, right: n - 1 };
|
|
93
|
+
case "right":
|
|
94
|
+
return { top: r, bottom: o, left: e + 1, right: t };
|
|
95
|
+
case "up":
|
|
96
|
+
return { left: n, right: e, top: s, bottom: r - 1 };
|
|
97
|
+
case "down":
|
|
98
|
+
return { left: n, right: e, top: o + 1, bottom: s };
|
|
99
|
+
}
|
|
100
|
+
return this.src;
|
|
101
|
+
}
|
|
102
|
+
suggestDirection(i) {
|
|
103
|
+
const { top: t, left: s, bottom: r, right: n } = this.src;
|
|
104
|
+
let o = 0, e = 0;
|
|
105
|
+
return i.x < s ? o = i.x - s : i.x > n && (o = i.x - n), i.y < t ? e = i.y - t : i.y > r && (e = i.y - r), Math.abs(o) > 0 && Math.abs(e) > 0 ? Math.abs(o) > Math.abs(e) ? o < 0 ? "left" : "right" : e < 0 ? "up" : "down" : o !== 0 ? o < 0 ? "left" : "right" : e !== 0 ? e < 0 ? "up" : "down" : "none";
|
|
106
|
+
}
|
|
107
|
+
getChangePatterns(i, t) {
|
|
108
|
+
const s = [], r = Z(i), [n, o] = M[this.direction];
|
|
109
|
+
return r.forEach((e) => {
|
|
110
|
+
const h = o > 0 ? e.last : e.first;
|
|
111
|
+
switch (e.kind) {
|
|
112
|
+
case "other": {
|
|
113
|
+
s.push(w(e.first));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
case "formula": {
|
|
117
|
+
const d = e.first, u = this.sheet;
|
|
118
|
+
function* l() {
|
|
119
|
+
let c = 0;
|
|
120
|
+
const x = i.length * o;
|
|
121
|
+
for (; ; )
|
|
122
|
+
c += x, yield u.processFormula(d, {
|
|
123
|
+
dependency: t,
|
|
124
|
+
slideY: n === "vertical" ? c : 0,
|
|
125
|
+
slideX: n === "horizontal" ? c : 0
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
s.push(l());
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
case "number": {
|
|
132
|
+
if (!e.equidistant) {
|
|
133
|
+
s.push(w(e.first), ...e.nexts.map((l) => w(l)));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
function* d() {
|
|
137
|
+
let l = h;
|
|
138
|
+
const c = e.numericDelta * o;
|
|
139
|
+
for (; ; )
|
|
140
|
+
l += c, yield l;
|
|
141
|
+
}
|
|
142
|
+
const u = d();
|
|
143
|
+
s.push(u, ...e.nexts.map(() => u));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
case "date": {
|
|
147
|
+
const d = (c) => o > 0 ? e.time.add(c) : e.time.sub(c);
|
|
148
|
+
if (!e.equidistant) {
|
|
149
|
+
s.push(w(e.first), ...e.nexts.map((c) => w(c)));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
function* u() {
|
|
153
|
+
let c = h;
|
|
154
|
+
for (; ; )
|
|
155
|
+
c = d(c), yield new Date(c);
|
|
156
|
+
}
|
|
157
|
+
const l = u();
|
|
158
|
+
s.push(l, ...e.nexts.map(() => l));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
case "string+number": {
|
|
162
|
+
if (!e.equidistant) {
|
|
163
|
+
s.push(w(e.first), ...e.nexts.map((l) => w(l)));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
function* d() {
|
|
167
|
+
const { prefix: l } = g(e.first), { number: c } = g(h);
|
|
168
|
+
let x = c;
|
|
169
|
+
const a = e.numericDelta * o;
|
|
170
|
+
for (; ; )
|
|
171
|
+
x += a, yield `${l}${Math.abs(x)}`;
|
|
172
|
+
}
|
|
173
|
+
const u = d();
|
|
174
|
+
s.push(u, ...e.nexts.map(() => u));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}), s;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function* w(p) {
|
|
182
|
+
for (; ; )
|
|
183
|
+
yield p;
|
|
184
|
+
}
|
|
185
|
+
const N = new RegExp("(.+?)(\\d+)$"), g = (p) => {
|
|
186
|
+
const i = p.match(N);
|
|
187
|
+
if (i) {
|
|
188
|
+
const [, t, s] = i;
|
|
189
|
+
return { prefix: t, number: Number(s) };
|
|
190
|
+
}
|
|
191
|
+
return { prefix: "", number: 0 };
|
|
192
|
+
};
|
|
193
|
+
class D {
|
|
194
|
+
constructor(i) {
|
|
195
|
+
this.time = E.create(), this.numericDelta = 0, this.equidistant = !0, this.first = i, this.nexts = [], this.kind = this.discriminate(i);
|
|
196
|
+
}
|
|
197
|
+
discriminate(i) {
|
|
198
|
+
const t = i instanceof Date ? "date" : typeof i;
|
|
199
|
+
return t === "number" || t === "date" ? t : t === "string" && i[0] === "=" ? "formula" : t === "string" && i.match(N) ? "string+number" : "other";
|
|
200
|
+
}
|
|
201
|
+
get last() {
|
|
202
|
+
return this.nexts.length === 0 ? this.first : this.nexts[this.nexts.length - 1];
|
|
203
|
+
}
|
|
204
|
+
add(i) {
|
|
205
|
+
const t = this.discriminate(i);
|
|
206
|
+
if (this.kind !== t || t === "other" || t === "formula")
|
|
207
|
+
return new D(i);
|
|
208
|
+
if (this.nexts.length === 0)
|
|
209
|
+
switch (t) {
|
|
210
|
+
case "date": {
|
|
211
|
+
this.time = E.fromDates(i, this.first);
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case "number": {
|
|
215
|
+
this.numericDelta = i - this.first;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case "string+number": {
|
|
219
|
+
const { prefix: s, number: r } = g(this.first), { prefix: n, number: o } = g(i);
|
|
220
|
+
s === n && (this.numericDelta = o - r);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
this.nexts.push(i);
|
|
225
|
+
}
|
|
226
|
+
subdivide() {
|
|
227
|
+
if (this.nexts.length === 0)
|
|
228
|
+
return [];
|
|
229
|
+
const i = [];
|
|
230
|
+
let t = this;
|
|
231
|
+
switch (this.kind) {
|
|
232
|
+
case "date": {
|
|
233
|
+
const s = this.nexts.every((r, n) => n === 0 || I(r).isSame(this.time.add(this.nexts[n - 1])));
|
|
234
|
+
return this.equidistant = s, [];
|
|
235
|
+
}
|
|
236
|
+
case "number": {
|
|
237
|
+
const s = this.nexts.every((r, n) => n === 0 || r === this.first + this.numericDelta * (n + 1));
|
|
238
|
+
return this.equidistant = s, [];
|
|
239
|
+
}
|
|
240
|
+
case "string+number": {
|
|
241
|
+
const { prefix: s } = g(this.first);
|
|
242
|
+
for (let r = 0; r < t.nexts.length; r++) {
|
|
243
|
+
const n = t.nexts[r], { prefix: o, number: e } = g(n);
|
|
244
|
+
if (s !== o) {
|
|
245
|
+
const h = this.nexts.splice(r, this.nexts.length);
|
|
246
|
+
t = new D(h.splice(0, 1)[0]), h.forEach(t.add.bind(t)), i.push(t, ...t.subdivide());
|
|
247
|
+
break;
|
|
248
|
+
} else {
|
|
249
|
+
const { number: h } = g(t.first);
|
|
250
|
+
e !== h + (r + 1) * t.numericDelta && (t.equidistant = !1);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
return i;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function Z(p) {
|
|
260
|
+
var s, r;
|
|
261
|
+
let i = new D((s = p[0]) == null ? void 0 : s.value);
|
|
262
|
+
const t = [i];
|
|
263
|
+
for (let n = 1; n < p.length; n++) {
|
|
264
|
+
const o = (r = p[n]) == null ? void 0 : r.value, e = i.add(o);
|
|
265
|
+
e && (t.push(e), i = e);
|
|
266
|
+
}
|
|
267
|
+
for (let n = t.length - 1; n >= 0; n--) {
|
|
268
|
+
const o = t[n];
|
|
269
|
+
t.splice(n + 1, 0, ...o.subdivide());
|
|
270
|
+
}
|
|
271
|
+
return t;
|
|
272
|
+
}
|
|
273
|
+
export {
|
|
274
|
+
U as Autofill
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=autofill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autofill.js","sources":["../../src/lib/autofill.ts"],"sourcesContent":["import dayjs from 'dayjs';\nimport type { AreaType, CellsByAddressType, CellType, CSSPropertiesLike, PointType, RefLike, ZoneType } from '../types';\nimport { Sheet } from './sheet';\nimport { areaShape, areaToZone, complementSelectingArea, concatAreas, zoneToArea, createMatrix } from './spatial';\nimport { p2a } from './coords';\nimport { Time } from './time';\n\ntype AutofillStore = {\n sheetReactive: RefLike<Sheet>;\n choosing: PointType;\n selectingZone: ZoneType;\n};\n\nconst BORDER_AUTOFILL_DRAGGING = 'dashed 1px #888888';\n\ntype Direction = 'left' | 'right' | 'up' | 'down' | 'none';\ntype Orientation = 'horizontal' | 'vertical' | 'none';\nconst DirectionMapping: {\n [key: string]: [Orientation, number];\n} = {\n left: ['horizontal', -1],\n right: ['horizontal', 1],\n up: ['vertical', -1],\n down: ['vertical', 1],\n none: ['none', 0],\n};\n\nexport class Autofill {\n private readonly src: AreaType;\n private readonly dst: AreaType;\n private readonly direction: Direction;\n private readonly sheet: Sheet;\n constructor(store: AutofillStore, draggingTo: PointType) {\n const { sheetReactive: sheetRef, choosing, selectingZone } = store;\n const sheet = sheetRef.current;\n if (!sheet) {\n throw new Error('Sheet is not available');\n }\n this.src = complementSelectingArea(zoneToArea(selectingZone), choosing);\n this.direction = this.suggestDirection(draggingTo);\n this.dst = this.getDestinationArea(draggingTo);\n this.sheet = sheet;\n }\n\n public get applied(): Sheet {\n const [orientation, sign] = DirectionMapping[this.direction];\n const { top: sTop, left: sLeft, bottom: sBottom, right: sRight } = this.src;\n const matrix = createMatrix(sBottom - sTop + 1, sRight - sLeft + 1) as (CellType | null)[][];\n for (let y = sTop; y <= sBottom; y++) {\n for (let x = sLeft; x <= sRight; x++) {\n matrix[y - sTop][x - sLeft] = this.sheet.getCell({ y, x }, { resolution: 'SYSTEM' }) ?? null;\n }\n }\n const srcShape = areaShape(this.src);\n const dstShape = areaShape(this.dst);\n\n const diff: CellsByAddressType = {};\n if (orientation === 'horizontal') {\n for (let i = 0; i < dstShape.rows; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(matrix[i], '');\n for (let j = 0; j < dstShape.cols; j++) {\n const baseCell = matrix[i % srcShape.rows]?.[j % srcShape.cols];\n const x = sign > 0 ? this.dst.left + j : this.dst.right - j;\n const px = sign > 0 ? j % srcShape.cols : (srcShape.cols - 1 - (j % srcShape.cols)) % srcShape.cols;\n const point = { y: this.dst.top + i, x };\n const id = this.sheet.getId(point);\n const value = patterns[px].next().value;\n const nextValue =\n (baseCell?.formulaEnabled ?? true)\n ? this.sheet.processFormula(value, {\n dependency: id,\n })\n : value;\n diff[p2a(point)] = {\n ...baseCell,\n value: nextValue,\n };\n }\n }\n } else if (orientation === 'vertical') {\n for (let i = 0; i < dstShape.cols; i++) {\n // TODO: pass the originPath\n const patterns = this.getChangePatterns(\n matrix.map((row) => row[i]),\n '',\n );\n for (let j = 0; j < dstShape.rows; j++) {\n const baseCell = matrix[j % srcShape.rows]?.[i % srcShape.cols];\n const y = sign > 0 ? this.dst.top + j : this.dst.bottom - j;\n const py = sign > 0 ? j % srcShape.rows : (srcShape.rows - 1 - (j % srcShape.rows)) % srcShape.rows;\n const value = patterns[py].next().value;\n diff[p2a({ y, x: this.dst.left + i })] = { ...baseCell, value };\n }\n }\n }\n const sheet = this.sheet.update({\n diff,\n operator: 'USER',\n undoReflection: {\n sheetId: this.sheet.id,\n selectingZone: areaToZone(this.src),\n },\n redoReflection: {\n sheetId: this.sheet.id,\n selectingZone: areaToZone(this.dst),\n },\n });\n return sheet;\n }\n\n public get wholeArea() {\n return concatAreas(this.src, this.dst);\n }\n\n public getCellStyle(target: PointType) {\n const { x, y } = target;\n const style: CSSPropertiesLike = {};\n const { top, left, bottom, right } = this.src;\n\n switch (this.direction) {\n case 'left': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.left === x && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'right': {\n if (this.dst.left <= x && x <= this.dst.right) {\n if (top === y) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n if (bottom === y - 1) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.right === x - 1 && top <= y && y <= bottom) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n\n case 'up': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.top === y && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n case 'down': {\n if (this.dst.top <= y && y <= this.dst.bottom) {\n if (left === x) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n if (right === x - 1) {\n style.borderLeft = BORDER_AUTOFILL_DRAGGING;\n }\n }\n if (this.dst.bottom === y - 1 && left <= x && x <= right) {\n style.borderTop = BORDER_AUTOFILL_DRAGGING;\n }\n break;\n }\n }\n return style;\n }\n\n private getDestinationArea(autofillDraggingTo: PointType): AreaType {\n const { x, y } = autofillDraggingTo;\n const { top, left, bottom, right } = this.src;\n switch (this.direction) {\n case 'left':\n return { top, bottom, left: x, right: left - 1 };\n case 'right':\n return { top, bottom, left: right + 1, right: x };\n case 'up':\n return { left, right, top: y, bottom: top - 1 };\n case 'down':\n return { left, right, top: bottom + 1, bottom: y };\n }\n return this.src;\n }\n\n private suggestDirection(draggingTo: PointType): Direction {\n const { top, left, bottom, right } = this.src;\n let horizontal = 0,\n vertical = 0;\n if (draggingTo.x < left) {\n horizontal = draggingTo.x - left;\n } else if (draggingTo.x > right) {\n horizontal = draggingTo.x - right;\n }\n if (draggingTo.y < top) {\n vertical = draggingTo.y - top;\n } else if (draggingTo.y > bottom) {\n vertical = draggingTo.y - bottom;\n }\n // diagonal\n if (Math.abs(horizontal) > 0 && Math.abs(vertical) > 0) {\n if (Math.abs(horizontal) > Math.abs(vertical)) {\n return horizontal < 0 ? 'left' : 'right';\n }\n return vertical < 0 ? 'up' : 'down';\n }\n if (horizontal !== 0) {\n return horizontal < 0 ? 'left' : 'right';\n }\n if (vertical !== 0) {\n return vertical < 0 ? 'up' : 'down';\n }\n return 'none';\n }\n\n private getChangePatterns(cells: (CellType | null)[], id: string): Generator[] {\n const result: Generator[] = [];\n const groups = groupByType(cells);\n const [orientation, sign] = DirectionMapping[this.direction];\n groups.forEach((group) => {\n const lastValue = sign > 0 ? group.last : group.first;\n switch (group.kind) {\n case 'other': {\n result.push(pass(group.first));\n return;\n }\n case 'formula': {\n const value = group.first;\n const sheet = this.sheet;\n\n function* generateFormula() {\n let slide = 0;\n const skip = cells.length * sign;\n while (true) {\n slide += skip;\n yield sheet.processFormula(value, {\n dependency: id,\n slideY: orientation === 'vertical' ? slide : 0,\n slideX: orientation === 'horizontal' ? slide : 0,\n });\n }\n }\n result.push(generateFormula());\n return;\n }\n case 'number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateNumber() {\n let value = lastValue;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield value;\n }\n }\n const g = generateNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'date': {\n const next = (d: Date) => {\n return sign > 0 ? group.time.add(d) : group.time.sub(d);\n };\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateDate() {\n let value = lastValue as Date;\n while (true) {\n value = next(value);\n yield new Date(value);\n }\n }\n const g = generateDate();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n case 'string+number': {\n if (!group.equidistant) {\n result.push(pass(group.first), ...group.nexts.map((v) => pass(v)));\n return;\n }\n\n function* generateStringNumber() {\n const { prefix } = extractStringNumber(group.first as string);\n const { number: lastNumber } = extractStringNumber(lastValue as string);\n let value = lastNumber;\n const skip = group.numericDelta * sign;\n while (true) {\n value += skip;\n yield `${prefix}${Math.abs(value)}`;\n }\n }\n const g = generateStringNumber();\n result.push(g, ...group.nexts.map(() => g));\n return;\n }\n }\n });\n return result;\n }\n}\n\nfunction* pass(value: any) {\n while (true) {\n yield value;\n }\n}\n\ntype GroupKind = 'number' | 'date' | 'string+number' | 'formula' | 'other';\n\nconst StringNumberPattern = new RegExp('(.+?)(\\\\d+)$');\n\nconst extractStringNumber = (value: string) => {\n const match = value.match(StringNumberPattern);\n if (match) {\n const [, prefix, n] = match;\n return { prefix, number: Number(n) };\n }\n return { prefix: '', number: 0 };\n};\n\nclass TypedGroup {\n public time: Time = Time.create();\n public numericDelta: number = 0;\n public kind: GroupKind;\n public nexts: any[];\n public first: any;\n public equidistant = true;\n\n constructor(value: any) {\n this.first = value;\n this.nexts = [];\n this.kind = this.discriminate(value);\n }\n private discriminate(value: any): GroupKind {\n const kind = value instanceof Date ? 'date' : typeof value;\n if (kind === 'number' || kind === 'date') {\n return kind;\n }\n if (kind === 'string' && value[0] === '=') {\n return 'formula';\n } else if (kind === 'string' && value.match(StringNumberPattern)) {\n return 'string+number';\n }\n return 'other';\n }\n\n public get last() {\n if (this.nexts.length === 0) {\n return this.first;\n }\n return this.nexts[this.nexts.length - 1];\n }\n\n public add(value: any): TypedGroup | undefined {\n const kind = this.discriminate(value);\n if (this.kind !== kind || kind === 'other' || kind === 'formula') {\n return new TypedGroup(value);\n }\n if (this.nexts.length === 0) {\n switch (kind) {\n case 'date': {\n this.time = Time.fromDates(value as Date, this.first as Date);\n break;\n }\n case 'number': {\n this.numericDelta = (value as number) - this.first;\n break;\n }\n case 'string+number': {\n const { prefix: prefix1, number: number1 } = extractStringNumber(this.first as string);\n const { prefix: prefix2, number: number2 } = extractStringNumber(value as string);\n if (prefix1 === prefix2) {\n this.numericDelta = number2 - number1;\n }\n break;\n }\n }\n }\n this.nexts.push(value);\n }\n\n public subdivide() {\n if (this.nexts.length === 0) {\n return [];\n }\n\n const news: TypedGroup[] = [];\n\n let lastGroup: TypedGroup = this;\n switch (this.kind) {\n case 'date': {\n const eq = this.nexts.every((v, i) => i === 0 || dayjs(v).isSame(this.time.add(this.nexts[i - 1])));\n this.equidistant = eq;\n return [];\n }\n case 'number': {\n const eq = this.nexts.every((v, i) => i === 0 || v === this.first + this.numericDelta * (i + 1));\n this.equidistant = eq;\n return [];\n }\n case 'string+number': {\n const { prefix: basePrefix } = extractStringNumber(this.first as string);\n for (let i = 0; i < lastGroup.nexts.length; i++) {\n const next = lastGroup.nexts[i];\n const { prefix, number } = extractStringNumber(next as string);\n if (basePrefix !== prefix) {\n const nexts = this.nexts.splice(i, this.nexts.length);\n lastGroup = new TypedGroup(nexts.splice(0, 1)[0]);\n nexts.forEach(lastGroup.add.bind(lastGroup));\n news.push(lastGroup, ...lastGroup.subdivide());\n break;\n } else {\n const { number: firstNumber } = extractStringNumber(lastGroup.first as string);\n if (number !== firstNumber + (i + 1) * lastGroup.numericDelta) {\n lastGroup.equidistant = false;\n }\n }\n }\n break;\n }\n }\n\n return news;\n }\n}\n\nfunction groupByType(cells: (CellType | null)[]): TypedGroup[] {\n let group = new TypedGroup(cells[0]?.value);\n const groups: TypedGroup[] = [group];\n\n for (let i = 1; i < cells.length; i++) {\n const value = cells[i]?.value;\n const nextGroup = group.add(value);\n if (nextGroup) {\n groups.push(nextGroup);\n group = nextGroup;\n }\n }\n for (let i = groups.length - 1; i >= 0; i--) {\n const group = groups[i];\n groups.splice(i + 1, 0, ...group.subdivide());\n }\n return groups;\n}\n"],"names":["BORDER_AUTOFILL_DRAGGING","DirectionMapping","Autofill","store","draggingTo","sheetRef","choosing","selectingZone","sheet","complementSelectingArea","zoneToArea","orientation","sign","sTop","sLeft","sBottom","sRight","matrix","createMatrix","y","x","srcShape","areaShape","dstShape","diff","i","patterns","j","baseCell","_a","px","point","id","value","nextValue","p2a","row","_b","py","areaToZone","concatAreas","target","style","top","left","bottom","right","autofillDraggingTo","horizontal","vertical","cells","result","groups","groupByType","group","lastValue","pass","generateFormula","slide","skip","v","generateNumber","g","next","d","generateDate","generateStringNumber","prefix","extractStringNumber","lastNumber","StringNumberPattern","match","n","TypedGroup","Time","kind","prefix1","number1","prefix2","number2","news","lastGroup","eq","dayjs","basePrefix","number","nexts","firstNumber","nextGroup"],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Pending } from '../sentinels';
|
|
2
|
+
import { HistoryType, RefPaletteType, SheetIdsByName, ContextsBySheetId, ZoneType, CellsByIdType, SystemsByIdType, Id, FeedbackType, EditorEvent, CursorStateType } from '../types';
|
|
3
|
+
import { UserSheet, Sheet } from './sheet';
|
|
4
|
+
import { FunctionMapping } from '../formula/functions/__base';
|
|
5
|
+
import { PolicyType } from '../policy/core';
|
|
6
|
+
export type RegistryProps = {
|
|
7
|
+
historyLimit?: number;
|
|
8
|
+
additionalFunctions?: FunctionMapping;
|
|
9
|
+
policies?: {
|
|
10
|
+
[policyName: string]: PolicyType | null;
|
|
11
|
+
};
|
|
12
|
+
onSave?: FeedbackType;
|
|
13
|
+
onChange?: FeedbackType;
|
|
14
|
+
onRemoveRows?: (args: {
|
|
15
|
+
sheet: UserSheet;
|
|
16
|
+
ys: number[];
|
|
17
|
+
}) => void;
|
|
18
|
+
onRemoveCols?: (args: {
|
|
19
|
+
sheet: UserSheet;
|
|
20
|
+
xs: number[];
|
|
21
|
+
}) => void;
|
|
22
|
+
onInsertRows?: (args: {
|
|
23
|
+
sheet: UserSheet;
|
|
24
|
+
y: number;
|
|
25
|
+
numRows: number;
|
|
26
|
+
}) => void;
|
|
27
|
+
onInsertCols?: (args: {
|
|
28
|
+
sheet: UserSheet;
|
|
29
|
+
x: number;
|
|
30
|
+
numCols: number;
|
|
31
|
+
}) => void;
|
|
32
|
+
onSelect?: FeedbackType;
|
|
33
|
+
onKeyUp?: (args: {
|
|
34
|
+
e: EditorEvent;
|
|
35
|
+
points: CursorStateType;
|
|
36
|
+
}) => void;
|
|
37
|
+
onInit?: (args: {
|
|
38
|
+
sheet: UserSheet;
|
|
39
|
+
}) => void;
|
|
40
|
+
};
|
|
41
|
+
export type BookProps = RegistryProps;
|
|
42
|
+
export declare class Registry {
|
|
43
|
+
sheetHead: number;
|
|
44
|
+
cellHead: number;
|
|
45
|
+
data: CellsByIdType;
|
|
46
|
+
systems: SystemsByIdType;
|
|
47
|
+
sheetIdsByName: SheetIdsByName;
|
|
48
|
+
contextsBySheetId: ContextsBySheetId;
|
|
49
|
+
choosingSheetId: number;
|
|
50
|
+
choosingAddress: string;
|
|
51
|
+
editingSheetId: number;
|
|
52
|
+
editingAddress: string;
|
|
53
|
+
paletteBySheetName: {
|
|
54
|
+
[sheetName: string]: RefPaletteType;
|
|
55
|
+
};
|
|
56
|
+
lastFocused: HTMLTextAreaElement | null;
|
|
57
|
+
solvedCaches: Map<Id, any>;
|
|
58
|
+
/** IDs of non-origin cells that received spilled values (populated in spill(), cleared in clearSolvedCaches()). */
|
|
59
|
+
lastSpilledTargetIds: Set<Id>;
|
|
60
|
+
/** Currently in-flight async formula Pending sentinels (keyed by cell ID). */
|
|
61
|
+
asyncPending: Map<string, Pending>;
|
|
62
|
+
/** In-flight async formulas shared by cache key (for useInflight). */
|
|
63
|
+
asyncInflight?: Map<string, {
|
|
64
|
+
pending: Pending;
|
|
65
|
+
expireTime?: number;
|
|
66
|
+
}>;
|
|
67
|
+
copyingSheetId: number;
|
|
68
|
+
copyingZone: ZoneType;
|
|
69
|
+
cutting: boolean;
|
|
70
|
+
histories: HistoryType[];
|
|
71
|
+
historyIndex: number;
|
|
72
|
+
historyLimit: number;
|
|
73
|
+
lastHistory?: HistoryType;
|
|
74
|
+
currentHistory?: HistoryType;
|
|
75
|
+
/** StrictMode guard: Map from action object (identity) to cached reducer result.
|
|
76
|
+
* Using a Map instead of a single slot allows multiple batched dispatches to coexist. */
|
|
77
|
+
_strictModeCache?: Map<unknown, unknown>;
|
|
78
|
+
/** StrictMode guard: Map from useId component key to assigned sheetId.
|
|
79
|
+
* Prevents double-increment of sheetHead when useState initializer runs twice in Strict Mode. */
|
|
80
|
+
_componentSheetIds: Map<string, number>;
|
|
81
|
+
ready: boolean;
|
|
82
|
+
functions: FunctionMapping;
|
|
83
|
+
policies: {
|
|
84
|
+
[policyName: string]: PolicyType | null;
|
|
85
|
+
};
|
|
86
|
+
onSave?: FeedbackType;
|
|
87
|
+
onChange?: FeedbackType;
|
|
88
|
+
onRemoveRows?: (args: {
|
|
89
|
+
sheet: UserSheet;
|
|
90
|
+
ys: number[];
|
|
91
|
+
}) => void;
|
|
92
|
+
onRemoveCols?: (args: {
|
|
93
|
+
sheet: UserSheet;
|
|
94
|
+
xs: number[];
|
|
95
|
+
}) => void;
|
|
96
|
+
onInsertRows?: (args: {
|
|
97
|
+
sheet: UserSheet;
|
|
98
|
+
y: number;
|
|
99
|
+
numRows: number;
|
|
100
|
+
}) => void;
|
|
101
|
+
onInsertCols?: (args: {
|
|
102
|
+
sheet: UserSheet;
|
|
103
|
+
x: number;
|
|
104
|
+
numCols: number;
|
|
105
|
+
}) => void;
|
|
106
|
+
onSelect?: FeedbackType;
|
|
107
|
+
onKeyUp?: (args: {
|
|
108
|
+
e: EditorEvent;
|
|
109
|
+
points: CursorStateType;
|
|
110
|
+
}) => void;
|
|
111
|
+
onInit?: (args: {
|
|
112
|
+
sheet: UserSheet;
|
|
113
|
+
}) => void;
|
|
114
|
+
transmit: (newBook?: TransmitProps) => void;
|
|
115
|
+
/** Injected by react-core / preact-core to create a store action for sheet updates. */
|
|
116
|
+
updateSheet: (sheet: Sheet) => {
|
|
117
|
+
type: number;
|
|
118
|
+
value: any;
|
|
119
|
+
};
|
|
120
|
+
boot(): void;
|
|
121
|
+
constructor({ historyLimit, additionalFunctions, policies, onSave, onChange, onRemoveRows, onRemoveCols, onInsertRows, onInsertCols, onSelect, onKeyUp, onInit, }?: RegistryProps);
|
|
122
|
+
}
|
|
123
|
+
export type TransmitProps = Partial<Registry>;
|
|
124
|
+
export declare const createRegistry: (props?: RegistryProps) => Registry;
|
|
125
|
+
/** @deprecated use createRegistry */
|
|
126
|
+
export declare const createBinding: (props?: RegistryProps) => Registry;
|
|
127
|
+
export type BookType = {
|
|
128
|
+
registry: Registry;
|
|
129
|
+
};
|
|
130
|
+
export declare const createBook: (props?: RegistryProps) => BookType;
|
|
131
|
+
//# sourceMappingURL=book.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"book.d.ts","sourceRoot":"","sources":["../../src/lib/book.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/book.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { RESET_ZONE as I, DEFAULT_HISTORY_LIMIT as g } from "../constants.js";
|
|
2
|
+
import { functions as S } from "../formula/mapping.js";
|
|
3
|
+
class m {
|
|
4
|
+
constructor({
|
|
5
|
+
historyLimit: i,
|
|
6
|
+
additionalFunctions: n,
|
|
7
|
+
policies: t = {},
|
|
8
|
+
onSave: h,
|
|
9
|
+
onChange: s,
|
|
10
|
+
onRemoveRows: e,
|
|
11
|
+
onRemoveCols: a,
|
|
12
|
+
onInsertRows: d,
|
|
13
|
+
onInsertCols: l,
|
|
14
|
+
onSelect: u,
|
|
15
|
+
onKeyUp: y,
|
|
16
|
+
onInit: p
|
|
17
|
+
} = {}) {
|
|
18
|
+
this.sheetHead = 0, this.cellHead = 0, this.data = {}, this.systems = {}, this.sheetIdsByName = {}, this.contextsBySheetId = {}, this.choosingSheetId = 0, this.choosingAddress = "", this.editingSheetId = 0, this.editingAddress = "", this.paletteBySheetName = {}, this.lastFocused = null, this.solvedCaches = /* @__PURE__ */ new Map(), this.lastSpilledTargetIds = /* @__PURE__ */ new Set(), this.asyncPending = /* @__PURE__ */ new Map(), this.copyingSheetId = 0, this.copyingZone = I, this.cutting = !1, this.histories = [], this.historyIndex = -1, this.historyLimit = g, this._componentSheetIds = /* @__PURE__ */ new Map(), this.ready = !1, this.functions = {}, this.policies = {}, this.transmit = (o) => {
|
|
19
|
+
}, this.updateSheet = (o) => ({ type: 0, value: o }), i != null && (this.historyLimit = i), this.functions = {
|
|
20
|
+
...S,
|
|
21
|
+
...n
|
|
22
|
+
};
|
|
23
|
+
for (const o in this.functions) {
|
|
24
|
+
const f = this.functions[o];
|
|
25
|
+
f.__name = o;
|
|
26
|
+
}
|
|
27
|
+
this.policies = t, this.onSave = h, this.onChange = s, this.onRemoveRows = e, this.onRemoveCols = a, this.onInsertRows = d, this.onInsertCols = l, this.onSelect = u, this.onKeyUp = y, this.onInit = p;
|
|
28
|
+
}
|
|
29
|
+
boot() {
|
|
30
|
+
if (this.ready || Object.keys(this.contextsBySheetId).length === 0)
|
|
31
|
+
return;
|
|
32
|
+
const i = Object.keys(this.contextsBySheetId), n = [];
|
|
33
|
+
for (let t = 0; t < i.length; t++) {
|
|
34
|
+
const h = i[t], s = this.contextsBySheetId[h], e = s.store.sheetReactive.current;
|
|
35
|
+
if (!e || e.status === 0)
|
|
36
|
+
return;
|
|
37
|
+
n.push(s);
|
|
38
|
+
}
|
|
39
|
+
for (let t = 0; t < n.length; t++) {
|
|
40
|
+
const { store: h, dispatch: s } = n[t], e = h.sheetReactive.current;
|
|
41
|
+
e && (e.resolveFormulas(), s(this.updateSheet(e)));
|
|
42
|
+
}
|
|
43
|
+
this.ready = !0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const r = (c = {}) => new m(c), v = r, w = (c = {}) => ({ registry: r(c) });
|
|
47
|
+
export {
|
|
48
|
+
m as Registry,
|
|
49
|
+
v as createBinding,
|
|
50
|
+
w as createBook,
|
|
51
|
+
r as createRegistry
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=book.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"book.js","sources":["../../src/lib/book.ts"],"sourcesContent":["import { DEFAULT_HISTORY_LIMIT, RESET_ZONE } from '../constants';\nimport { Pending } from '../sentinels';\n\nimport type {\n HistoryType,\n RefPaletteType,\n SheetIdsByName,\n ContextsBySheetId,\n ZoneType,\n CellsByIdType,\n SystemsByIdType,\n System,\n Id,\n StoreDispatchType,\n FeedbackType,\n EditorEvent,\n CursorStateType,\n} from '../types';\nimport type { UserSheet, Sheet } from './sheet';\nimport type { FunctionMapping } from '../formula/functions/__base';\nimport { functions as functionsDefault } from '../formula/mapping';\nimport { PolicyType } from '../policy/core';\n\nexport type RegistryProps = {\n historyLimit?: number;\n additionalFunctions?: FunctionMapping;\n policies?: { [policyName: string]: PolicyType | null };\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onRemoveRows?: (args: { sheet: UserSheet; ys: number[] }) => void;\n onRemoveCols?: (args: { sheet: UserSheet; xs: number[] }) => void;\n onInsertRows?: (args: { sheet: UserSheet; y: number; numRows: number }) => void;\n onInsertCols?: (args: { sheet: UserSheet; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { sheet: UserSheet }) => void;\n};\n\nexport type BookProps = RegistryProps;\n\nexport class Registry {\n sheetHead: number = 0;\n cellHead: number = 0;\n data: CellsByIdType = {};\n systems: SystemsByIdType = {};\n sheetIdsByName: SheetIdsByName = {};\n contextsBySheetId: ContextsBySheetId = {};\n choosingSheetId: number = 0;\n choosingAddress: string = '';\n editingSheetId: number = 0;\n editingAddress: string = '';\n paletteBySheetName: { [sheetName: string]: RefPaletteType } = {};\n lastFocused: HTMLTextAreaElement | null = null;\n solvedCaches: Map<Id, any> = new Map();\n /** IDs of non-origin cells that received spilled values (populated in spill(), cleared in clearSolvedCaches()). */\n lastSpilledTargetIds: Set<Id> = new Set();\n /** Currently in-flight async formula Pending sentinels (keyed by cell ID). */\n asyncPending: Map<string, Pending> = new Map();\n /** In-flight async formulas shared by cache key (for useInflight). */\n asyncInflight?: Map<string, { pending: Pending; expireTime?: number }>;\n copyingSheetId: number = 0;\n copyingZone: ZoneType = RESET_ZONE;\n cutting: boolean = false;\n histories: HistoryType[] = [];\n historyIndex: number = -1;\n historyLimit: number = DEFAULT_HISTORY_LIMIT;\n lastHistory?: HistoryType;\n currentHistory?: HistoryType;\n /** StrictMode guard: Map from action object (identity) to cached reducer result.\n * Using a Map instead of a single slot allows multiple batched dispatches to coexist. */\n _strictModeCache?: Map<unknown, unknown>;\n /** StrictMode guard: Map from useId component key to assigned sheetId.\n * Prevents double-increment of sheetHead when useState initializer runs twice in Strict Mode. */\n _componentSheetIds: Map<string, number> = new Map();\n ready = false;\n functions: FunctionMapping = {};\n policies: { [policyName: string]: PolicyType | null } = {};\n onSave?: FeedbackType;\n onChange?: FeedbackType;\n onRemoveRows?: (args: { sheet: UserSheet; ys: number[] }) => void;\n onRemoveCols?: (args: { sheet: UserSheet; xs: number[] }) => void;\n onInsertRows?: (args: { sheet: UserSheet; y: number; numRows: number }) => void;\n onInsertCols?: (args: { sheet: UserSheet; x: number; numCols: number }) => void;\n onSelect?: FeedbackType;\n onKeyUp?: (args: { e: EditorEvent; points: CursorStateType }) => void;\n onInit?: (args: { sheet: UserSheet }) => void;\n\n transmit: (newBook?: TransmitProps) => void = (newBook?: TransmitProps) => {\n // This method will be overridden by useBook\n };\n\n /** Injected by react-core / preact-core to create a store action for sheet updates. */\n updateSheet: (sheet: Sheet) => { type: number; value: any } = (sheet) => ({ type: 0, value: sheet });\n\n public boot() {\n if (this.ready || Object.keys(this.contextsBySheetId).length === 0) {\n return;\n }\n const keys = Object.keys(this.contextsBySheetId);\n const tobe: StoreDispatchType[] = [];\n for (let i = 0; i < keys.length; i++) {\n const sheetId = keys[i];\n const storeDispatch = this.contextsBySheetId[sheetId];\n const sheet = storeDispatch.store.sheetReactive.current;\n if (!sheet || sheet.status === 0) {\n return;\n }\n tobe.push(storeDispatch);\n }\n for (let i = 0; i < tobe.length; i++) {\n const { store, dispatch } = tobe[i];\n const sheet = store.sheetReactive.current;\n if (!sheet) {\n continue;\n }\n sheet.resolveFormulas();\n dispatch(this.updateSheet(sheet));\n }\n this.ready = true;\n }\n\n constructor({\n historyLimit,\n additionalFunctions,\n policies = {},\n onSave,\n onChange,\n onRemoveRows,\n onRemoveCols,\n onInsertRows,\n onInsertCols,\n onSelect,\n onKeyUp,\n onInit,\n }: RegistryProps = {}) {\n if (historyLimit != null) {\n this.historyLimit = historyLimit;\n }\n this.functions = {\n ...functionsDefault,\n ...additionalFunctions,\n };\n for (const fnName in this.functions) {\n const fn = this.functions[fnName];\n fn.__name = fnName;\n }\n this.policies = policies;\n this.onSave = onSave;\n this.onChange = onChange;\n this.onRemoveRows = onRemoveRows;\n this.onRemoveCols = onRemoveCols;\n this.onInsertRows = onInsertRows;\n this.onInsertCols = onInsertCols;\n this.onSelect = onSelect;\n this.onKeyUp = onKeyUp;\n this.onInit = onInit;\n }\n}\n\nexport type TransmitProps = Partial<Registry>;\n\nexport const createRegistry = (props: RegistryProps = {}) => {\n return new Registry(props);\n};\n\n/** @deprecated use createRegistry */\nexport const createBinding = createRegistry;\n\nexport type BookType = {\n registry: Registry;\n};\n\nexport const createBook = (props: RegistryProps = {}): BookType => {\n return { registry: createRegistry(props) };\n};\n"],"names":["Registry","historyLimit","additionalFunctions","policies","onSave","onChange","onRemoveRows","onRemoveCols","onInsertRows","onInsertCols","onSelect","onKeyUp","onInit","RESET_ZONE","DEFAULT_HISTORY_LIMIT","newBook","sheet","functionsDefault","fnName","fn","keys","tobe","i","sheetId","storeDispatch","store","dispatch","createRegistry","props","createBinding","createBook"],"mappings":";;AAwCO,MAAMA,EAAS;AAAA,EAiFpB,YAAY;AAAA,IACV,cAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,UAAAC,IAAW,CAAC;AAAA,IACZ,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,EACF,IAAmB,IAAI;AA7FH,SAAA,YAAA,GACD,KAAA,WAAA,GACnB,KAAA,OAAsB,CAAC,GACvB,KAAA,UAA2B,CAAC,GAC5B,KAAA,iBAAiC,CAAC,GAClC,KAAA,oBAAuC,CAAC,GACd,KAAA,kBAAA,GACA,KAAA,kBAAA,IACD,KAAA,iBAAA,GACA,KAAA,iBAAA,IACzB,KAAA,qBAA8D,CAAC,GACrB,KAAA,cAAA,MAC1C,KAAA,mCAAiC,IAAI,GAErC,KAAA,2CAAoC,IAAI,GAExC,KAAA,mCAAyC,IAAI,GAGpB,KAAA,iBAAA,GACD,KAAA,cAAAC,GACL,KAAA,UAAA,IACnB,KAAA,YAA2B,CAAC,GACL,KAAA,eAAA,IACA,KAAA,eAAAC,GAQvB,KAAA,yCAA8C,IAAI,GAC1C,KAAA,QAAA,IACR,KAAA,YAA6B,CAAC,GAC9B,KAAA,WAAwD,CAAC,GAWzD,KAAA,WAA8C,CAACC,MAA4B;AAAA,IAE3E,GAGA,KAAA,cAA8D,CAACC,OAAW,EAAE,MAAM,GAAG,OAAOA,MA2CtFf,KAAgB,SAClB,KAAK,eAAeA,IAEtB,KAAK,YAAY;AAAA,MACf,GAAGgB;AAAAA,MACH,GAAGf;AAAA,IACL;AACW,eAAAgB,KAAU,KAAK,WAAW;AAC7B,YAAAC,IAAK,KAAK,UAAUD,CAAM;AAChC,MAAAC,EAAG,SAASD;AAAA,IAAA;AAEd,SAAK,WAAWf,GAChB,KAAK,SAASC,GACd,KAAK,WAAWC,GAChB,KAAK,eAAeC,GACpB,KAAK,eAAeC,GACpB,KAAK,eAAeC,GACpB,KAAK,eAAeC,GACpB,KAAK,WAAWC,GAChB,KAAK,UAAUC,GACf,KAAK,SAASC;AAAA,EAAA;AAAA,EA7DT,OAAO;AACR,QAAA,KAAK,SAAS,OAAO,KAAK,KAAK,iBAAiB,EAAE,WAAW;AAC/D;AAEF,UAAMQ,IAAO,OAAO,KAAK,KAAK,iBAAiB,GACzCC,IAA4B,CAAC;AACnC,aAASC,IAAI,GAAGA,IAAIF,EAAK,QAAQE,KAAK;AAC9B,YAAAC,IAAUH,EAAKE,CAAC,GAChBE,IAAgB,KAAK,kBAAkBD,CAAO,GAC9CP,IAAQQ,EAAc,MAAM,cAAc;AAChD,UAAI,CAACR,KAASA,EAAM,WAAW;AAC7B;AAEF,MAAAK,EAAK,KAAKG,CAAa;AAAA,IAAA;AAEzB,aAASF,IAAI,GAAGA,IAAID,EAAK,QAAQC,KAAK;AACpC,YAAM,EAAE,OAAAG,GAAO,UAAAC,MAAaL,EAAKC,CAAC,GAC5BN,IAAQS,EAAM,cAAc;AAClC,MAAKT,MAGLA,EAAM,gBAAgB,GACbU,EAAA,KAAK,YAAYV,CAAK,CAAC;AAAA,IAAA;AAElC,SAAK,QAAQ;AAAA,EAAA;AAuCjB;AAIO,MAAMW,IAAiB,CAACC,IAAuB,OAC7C,IAAI5B,EAAS4B,CAAK,GAIdC,IAAgBF,GAMhBG,IAAa,CAACF,IAAuB,QACzC,EAAE,UAAUD,EAAeC,CAAK,EAAE;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AsyncCache, CellType, System } from '../types';
|
|
2
|
+
export declare const filterCellFields: (cell: CellType, ignoreFields: (keyof CellType)[]) => CellType;
|
|
3
|
+
/**
|
|
4
|
+
* Ensure that `registry.systems[id]` exists, initialising it with sensible
|
|
5
|
+
* defaults when missing. Any keys present in `defaults` that are absent on
|
|
6
|
+
* the existing System object are filled in.
|
|
7
|
+
* Returns the (possibly freshly-created) `System` object.
|
|
8
|
+
*/
|
|
9
|
+
export declare const ensureSys: (registry: {
|
|
10
|
+
systems: Record<string, System>;
|
|
11
|
+
}, id: string, defaults?: Partial<System>) => System;
|
|
12
|
+
/**
|
|
13
|
+
* Write an `AsyncCache` entry into `cell.asyncCaches[key]`, creating the
|
|
14
|
+
* `asyncCaches` record if it does not yet exist.
|
|
15
|
+
*/
|
|
16
|
+
export declare const setAsyncCache: (cell: CellType, key: string, ac: AsyncCache) => void;
|
|
17
|
+
//# sourceMappingURL=cell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell.d.ts","sourceRoot":"","sources":["../../src/lib/cell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,gBAAgB,GAAI,MAAM,QAAQ,EAAE,cAAc,CAAC,MAAM,QAAQ,CAAC,EAAE,KAAG,QAOnF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GACpB,UAAU;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC7C,IAAI,MAAM,EACV,WAAU,OAAO,CAAC,MAAM,CAAM,KAC7B,MASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,EAAE,KAAK,MAAM,EAAE,IAAI,UAAU,KAAG,IAK3E,CAAC"}
|
package/dist/lib/cell.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const r = (s, e) => e.length === 0 ? s : Object.fromEntries(
|
|
2
|
+
Object.entries(s).filter(([t]) => !e.includes(t))
|
|
3
|
+
), o = (s, e, t = {}) => {
|
|
4
|
+
s.systems[e] == null && (s.systems[e] = {});
|
|
5
|
+
const n = s.systems[e];
|
|
6
|
+
for (const c of Object.keys(t))
|
|
7
|
+
n[c] ?? (n[c] = t[c]);
|
|
8
|
+
return n;
|
|
9
|
+
}, f = (s, e, t) => {
|
|
10
|
+
s.asyncCaches || (s.asyncCaches = {}), s.asyncCaches[e] = t;
|
|
11
|
+
};
|
|
12
|
+
export {
|
|
13
|
+
o as ensureSys,
|
|
14
|
+
r as filterCellFields,
|
|
15
|
+
f as setAsyncCache
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=cell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell.js","sources":["../../src/lib/cell.ts"],"sourcesContent":["import type { AsyncCache, CellType, System } from '../types';\n\nexport const filterCellFields = (cell: CellType, ignoreFields: (keyof CellType)[]): CellType => {\n if (ignoreFields.length === 0) {\n return cell;\n }\n return Object.fromEntries(\n Object.entries(cell).filter(([key]) => !ignoreFields.includes(key as keyof CellType)),\n ) as CellType;\n};\n\n/**\n * Ensure that `registry.systems[id]` exists, initialising it with sensible\n * defaults when missing. Any keys present in `defaults` that are absent on\n * the existing System object are filled in.\n * Returns the (possibly freshly-created) `System` object.\n */\nexport const ensureSys = (\n registry: { systems: Record<string, System> },\n id: string,\n defaults: Partial<System> = {},\n): System => {\n if (registry.systems[id] == null) {\n registry.systems[id] = {};\n }\n const sys = registry.systems[id];\n for (const key of Object.keys(defaults) as (keyof System)[]) {\n (sys as any)[key] ??= defaults[key];\n }\n return sys;\n};\n\n/**\n * Write an `AsyncCache` entry into `cell.asyncCaches[key]`, creating the\n * `asyncCaches` record if it does not yet exist.\n */\nexport const setAsyncCache = (cell: CellType, key: string, ac: AsyncCache): void => {\n if (!cell.asyncCaches) {\n cell.asyncCaches = {};\n }\n cell.asyncCaches[key] = ac;\n};\n"],"names":["filterCellFields","cell","ignoreFields","key","ensureSys","registry","id","defaults","sys","setAsyncCache","ac"],"mappings":"AAEa,MAAAA,IAAmB,CAACC,GAAgBC,MAC3CA,EAAa,WAAW,IACnBD,IAEF,OAAO;AAAA,EACZ,OAAO,QAAQA,CAAI,EAAE,OAAO,CAAC,CAACE,CAAG,MAAM,CAACD,EAAa,SAASC,CAAqB,CAAC;AACtF,GASWC,IAAY,CACvBC,GACAC,GACAC,IAA4B,CAAA,MACjB;AACX,EAAIF,EAAS,QAAQC,CAAE,KAAK,SACjBD,EAAA,QAAQC,CAAE,IAAI,CAAC;AAEpB,QAAAE,IAAMH,EAAS,QAAQC,CAAE;AAC/B,aAAWH,KAAO,OAAO,KAAKI,CAAQ;AACnC,IAAAC,EAAAL,OAAAK,EAAAL,KAAqBI,EAASJ,CAAG;AAE7B,SAAAK;AACT,GAMaC,IAAgB,CAACR,GAAgBE,GAAaO,MAAyB;AAC9E,EAACT,EAAK,gBACRA,EAAK,cAAc,CAAC,IAEjBA,EAAA,YAAYE,CAAG,IAAIO;AAC1B;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Address, ExtraPointType } from '../types';
|
|
2
|
+
export declare const x2c: (x: number) => string;
|
|
3
|
+
export declare const c2x: (col: string, absolute?: boolean) => number;
|
|
4
|
+
export declare const y2r: (y: number) => string;
|
|
5
|
+
export declare const r2y: (row: number | string, absolute?: boolean) => number;
|
|
6
|
+
export declare const p2a: ({ y, x, absX, absY }: Partial<ExtraPointType>) => string;
|
|
7
|
+
export declare const a2p: (address: Address) => ExtraPointType;
|
|
8
|
+
export declare const grantAddressAbsolute: (address: Address, absCol: boolean, absRow: boolean) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the row header cell address for a given row number by prepending `0`.
|
|
11
|
+
* e.g. rh(6) → '06', rh(1) → '01'
|
|
12
|
+
*/
|
|
13
|
+
export declare const rh: (y: number) => string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the column header cell address for a given column letter or column index
|
|
16
|
+
* (1-based, same as point.x) by appending `0`.
|
|
17
|
+
* e.g. ch('A') → 'A0', ch(1) → 'A0'
|
|
18
|
+
*/
|
|
19
|
+
export declare const ch: (col: string | number) => string;
|
|
20
|
+
export declare const stripAddressAbsolute: (address: Address) => string;
|
|
21
|
+
export declare const buildIdentifiedRef: (id: string, absX?: boolean, absY?: boolean) => string;
|
|
22
|
+
//# sourceMappingURL=coords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coords.d.ts","sourceRoot":"","sources":["../../src/lib/coords.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAa,cAAc,EAAE,MAAM,UAAU,CAAC;AAwDnE,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,KAAG,MAM/B,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,kBAAgB,KAAG,MAGnD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAK5B,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,GAAG,MAAM,EAAE,kBAAgB,WAKzD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,sBAAsB,OAAO,CAAC,cAAc,CAAC,WAOhE,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,SAAS,OAAO,KAAG,cAWtC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,EAAE,QAAQ,OAAO,EAAE,QAAQ,OAAO,WAOtF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,KAAG,MAAiB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,EAAE,GAAI,KAAK,MAAM,GAAG,MAAM,KAAG,MAC0B,CAAC;AAErE,eAAO,MAAM,oBAAoB,GAAI,SAAS,OAAO,WAEpD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,IAAI,MAAM,EAAE,cAAY,EAAE,cAAY,KAAG,MAE3E,CAAC"}
|