@gridsheet/react-dev 3.0.0-rc.2 → 3.0.0-rc.5
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/README.md +10 -38
- package/dist/index.js +181 -257
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Development tools for [GridSheet](https://github.com/walkframe/gridsheet).
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
`@gridsheet/react-dev` provides a `Debugger` component that gives you real-time visibility into the internal state of a GridSheet instance. It is intended for use during development only and should **not** be included in production builds.
|
|
5
|
+
> **Note:** Intended for use during development only. Do not include in production builds.
|
|
8
6
|
|
|
9
7
|
## Installation
|
|
10
8
|
|
|
@@ -16,19 +14,19 @@ pnpm add -D @gridsheet/react-dev
|
|
|
16
14
|
|
|
17
15
|
## Usage
|
|
18
16
|
|
|
19
|
-
Pass a `
|
|
17
|
+
Pass a `book` object (created via `useBook` from `@gridsheet/react-core`) to the `Debugger` component.
|
|
20
18
|
|
|
21
19
|
```tsx
|
|
22
20
|
import React from 'react';
|
|
23
|
-
import { GridSheet,
|
|
21
|
+
import { GridSheet, useBook } from '@gridsheet/react-core';
|
|
24
22
|
import { Debugger } from '@gridsheet/react-dev';
|
|
25
23
|
|
|
26
24
|
export default function App() {
|
|
27
|
-
const
|
|
25
|
+
const book = useBook();
|
|
28
26
|
return (
|
|
29
27
|
<>
|
|
30
|
-
<GridSheet
|
|
31
|
-
<Debugger
|
|
28
|
+
<GridSheet book={book} />
|
|
29
|
+
<Debugger book={book} />
|
|
32
30
|
</>
|
|
33
31
|
);
|
|
34
32
|
}
|
|
@@ -38,36 +36,10 @@ export default function App() {
|
|
|
38
36
|
|
|
39
37
|
### `Debugger`
|
|
40
38
|
|
|
41
|
-
| Prop | Type
|
|
42
|
-
|
|
43
|
-
| `
|
|
44
|
-
| `intervalMs` | `number`
|
|
45
|
-
|
|
46
|
-
## Panel Layout
|
|
47
|
-
|
|
48
|
-
The `Debugger` renders a resizable panel divided into two rows:
|
|
49
|
-
|
|
50
|
-
### Top row (resizable height)
|
|
51
|
-
|
|
52
|
-
| Panel | Description |
|
|
53
|
-
|------------------------|------------------------------------------------------------------------|
|
|
54
|
-
| **Wire State** | Snapshot of the shared wire state (choosing address, history, etc.). |
|
|
55
|
-
| **Cell** | Data of the currently selected cell (value, style, meta, etc.). |
|
|
56
|
-
| **Formula Expressions**| Parsed AST of the formula in the selected cell (if any). |
|
|
57
|
-
| **Formula Tokens** | Tokenized result of the formula lexer for the selected cell (if any). |
|
|
58
|
-
|
|
59
|
-
### Sheet tabs
|
|
60
|
-
|
|
61
|
-
Tabs to switch which sheet's internal data is shown in the bottom row.
|
|
62
|
-
|
|
63
|
-
### Bottom row (resizable height)
|
|
64
|
-
|
|
65
|
-
| Panel | Description |
|
|
66
|
-
|----------------|--------------------------------------------------|
|
|
67
|
-
| **Table Data** | Raw table instance data for the selected sheet. |
|
|
68
|
-
| **Store Data** | Internal store state for the selected sheet. |
|
|
69
|
-
|
|
70
|
-
Both rows can be resized by dragging the divider between them. Heights are persisted in `sessionStorage`.
|
|
39
|
+
| Prop | Type | Default | Description |
|
|
40
|
+
|--------------|------------|---------|------------------------------------------------------|
|
|
41
|
+
| `book` | `BookType` | — | The book object connected to a `GridSheet` instance. |
|
|
42
|
+
| `intervalMs` | `number` | `500` | Polling interval (ms) for refreshing the state view. |
|
|
71
43
|
|
|
72
44
|
## License
|
|
73
45
|
|
package/dist/index.js
CHANGED
|
@@ -1,234 +1,159 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from "react";
|
|
3
|
-
import { a2p, x2c, Lexer, FormulaParser, Sheet } from "@gridsheet/react-core";
|
|
4
|
-
import { Light } from "react-syntax-highlighter";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
get: (
|
|
16
|
-
set: (
|
|
17
|
-
|
|
18
|
-
sessionStorage.setItem(key, value);
|
|
19
|
-
}
|
|
1
|
+
import { jsxs as s, jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { useState as L, useEffect as N } from "react";
|
|
3
|
+
import { a2p as X, x2c as ee, Lexer as te, FormulaParser as oe, Sheet as re } from "@gridsheet/react-core";
|
|
4
|
+
import { Light as Y } from "react-syntax-highlighter";
|
|
5
|
+
import ne from "react-syntax-highlighter/dist/esm/languages/hljs/json";
|
|
6
|
+
import ie from "react-syntax-highlighter/dist/esm/styles/hljs/atom-one-light";
|
|
7
|
+
import se from "react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night";
|
|
8
|
+
import de from "react-syntax-highlighter/dist/esm/styles/hljs/solarized-dark";
|
|
9
|
+
import le from "react-syntax-highlighter/dist/esm/styles/hljs/solarized-light";
|
|
10
|
+
import ae from "react-syntax-highlighter/dist/esm/styles/hljs/docco";
|
|
11
|
+
import ce from "react-syntax-highlighter/dist/esm/styles/hljs/atelier-seaside-light";
|
|
12
|
+
import pe from "react-syntax-highlighter/dist/esm/styles/hljs/atelier-heath-light";
|
|
13
|
+
Y.registerLanguage("json", ne);
|
|
14
|
+
const x = {
|
|
15
|
+
get: (c) => typeof window < "u" ? sessionStorage.getItem(c) : null,
|
|
16
|
+
set: (c, h) => {
|
|
17
|
+
typeof window < "u" && sessionStorage.setItem(c, h);
|
|
20
18
|
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
theme
|
|
19
|
+
}, b = ({
|
|
20
|
+
data: c,
|
|
21
|
+
replacer: h,
|
|
22
|
+
theme: o
|
|
26
23
|
}) => {
|
|
27
|
-
const
|
|
28
|
-
return /* @__PURE__ */
|
|
29
|
-
|
|
24
|
+
const y = JSON.stringify(c, h, 2) ?? "";
|
|
25
|
+
return /* @__PURE__ */ r(
|
|
26
|
+
Y,
|
|
30
27
|
{
|
|
31
28
|
language: "json",
|
|
32
|
-
style:
|
|
33
|
-
showLineNumbers:
|
|
29
|
+
style: o,
|
|
30
|
+
showLineNumbers: !0,
|
|
34
31
|
customStyle: { margin: 0, fontSize: "10px", minHeight: "100%", borderRadius: 0, whiteSpace: "pre" },
|
|
35
32
|
codeTagProps: { style: { display: "block", whiteSpace: "pre", fontSize: "10px" } },
|
|
36
|
-
children:
|
|
33
|
+
children: y
|
|
37
34
|
}
|
|
38
35
|
);
|
|
39
|
-
}
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
const savedBottom = ss.get("gs-debugger-bottom-height");
|
|
53
|
-
if (savedBottom) {
|
|
54
|
-
setBottomHeight(Number(savedBottom));
|
|
55
|
-
}
|
|
56
|
-
const savedFormula = ss.get("gs-debugger-formula-view");
|
|
57
|
-
if (savedFormula) {
|
|
58
|
-
setFormulaView(savedFormula);
|
|
59
|
-
}
|
|
60
|
-
}, []);
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
const updateSnapshot = () => {
|
|
63
|
-
if (!registry) {
|
|
36
|
+
}, Ie = ({ book: c, intervalMs: h = 500 }) => {
|
|
37
|
+
const { registry: o } = c, [y, $] = L({}), [u, E] = L(null), [H, R] = L(200), [j, F] = L(200), [p, W] = L("expressions");
|
|
38
|
+
N(() => {
|
|
39
|
+
const e = x.get("gs-debugger-top-height");
|
|
40
|
+
e && R(Number(e));
|
|
41
|
+
const t = x.get("gs-debugger-bottom-height");
|
|
42
|
+
t && F(Number(t));
|
|
43
|
+
const n = x.get("gs-debugger-formula-view");
|
|
44
|
+
n && W(n);
|
|
45
|
+
}, []), N(() => {
|
|
46
|
+
const e = () => {
|
|
47
|
+
if (!o)
|
|
64
48
|
return;
|
|
65
|
-
}
|
|
66
49
|
const {
|
|
67
|
-
choosingAddress,
|
|
68
|
-
choosingSheetId,
|
|
69
|
-
editingAddress,
|
|
70
|
-
editingSheetId,
|
|
71
|
-
ready,
|
|
72
|
-
sheetIdsByName,
|
|
73
|
-
sheetHead,
|
|
74
|
-
cellHead,
|
|
75
|
-
paletteBySheetName,
|
|
76
|
-
solvedCaches,
|
|
77
|
-
copyingSheetId,
|
|
78
|
-
copyingZone,
|
|
79
|
-
cutting,
|
|
80
|
-
historyIndex,
|
|
81
|
-
historyLimit,
|
|
82
|
-
histories,
|
|
83
|
-
asyncPending,
|
|
84
|
-
asyncInflight
|
|
85
|
-
} =
|
|
86
|
-
|
|
87
|
-
asyncPending,
|
|
88
|
-
asyncInflight,
|
|
89
|
-
ready,
|
|
90
|
-
sheetIdsByName,
|
|
91
|
-
sheetHead,
|
|
92
|
-
cellHead,
|
|
93
|
-
paletteBySheetName,
|
|
94
|
-
solvedCaches,
|
|
95
|
-
choosingAddress,
|
|
96
|
-
choosingSheetId,
|
|
97
|
-
editingAddress,
|
|
98
|
-
editingSheetId,
|
|
99
|
-
copyingSheetId,
|
|
100
|
-
copyingZone,
|
|
101
|
-
cutting,
|
|
102
|
-
historyIndex,
|
|
103
|
-
historyLimit,
|
|
104
|
-
histories
|
|
50
|
+
choosingAddress: n,
|
|
51
|
+
choosingSheetId: i,
|
|
52
|
+
editingAddress: l,
|
|
53
|
+
editingSheetId: a,
|
|
54
|
+
ready: d,
|
|
55
|
+
sheetIdsByName: B,
|
|
56
|
+
sheetHead: m,
|
|
57
|
+
cellHead: w,
|
|
58
|
+
paletteBySheetName: I,
|
|
59
|
+
solvedCaches: f,
|
|
60
|
+
copyingSheetId: O,
|
|
61
|
+
copyingZone: U,
|
|
62
|
+
cutting: V,
|
|
63
|
+
historyIndex: Z,
|
|
64
|
+
historyLimit: q,
|
|
65
|
+
histories: G,
|
|
66
|
+
asyncPending: K,
|
|
67
|
+
asyncInflight: Q
|
|
68
|
+
} = o;
|
|
69
|
+
$({
|
|
70
|
+
asyncPending: K,
|
|
71
|
+
asyncInflight: Q,
|
|
72
|
+
ready: d,
|
|
73
|
+
sheetIdsByName: B,
|
|
74
|
+
sheetHead: m,
|
|
75
|
+
cellHead: w,
|
|
76
|
+
paletteBySheetName: I,
|
|
77
|
+
solvedCaches: f,
|
|
78
|
+
choosingAddress: n,
|
|
79
|
+
choosingSheetId: i,
|
|
80
|
+
editingAddress: l,
|
|
81
|
+
editingSheetId: a,
|
|
82
|
+
copyingSheetId: O,
|
|
83
|
+
copyingZone: U,
|
|
84
|
+
cutting: V,
|
|
85
|
+
historyIndex: Z,
|
|
86
|
+
historyLimit: q,
|
|
87
|
+
histories: G
|
|
105
88
|
});
|
|
106
89
|
};
|
|
107
|
-
|
|
108
|
-
const
|
|
109
|
-
return () => clearInterval(
|
|
110
|
-
}, [
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
let registryCellSheetName = "";
|
|
123
|
-
let registryFormulaExpr = null;
|
|
124
|
-
let registryFormulaTokens = null;
|
|
125
|
-
if (registry && activeTabId !== null) {
|
|
126
|
-
const { contextsBySheetId } = registry;
|
|
127
|
-
const context = contextsBySheetId[activeTabId];
|
|
128
|
-
if (context) {
|
|
129
|
-
activeStoreData = context.store;
|
|
130
|
-
const sheet = context.store.sheetReactive.current;
|
|
131
|
-
if (sheet) {
|
|
132
|
-
activeTableData = sheet;
|
|
133
|
-
}
|
|
90
|
+
e();
|
|
91
|
+
const t = setInterval(e, h);
|
|
92
|
+
return () => clearInterval(t);
|
|
93
|
+
}, [o, h]);
|
|
94
|
+
const v = y.sheetIdsByName ? Object.entries(y.sheetIdsByName).map(([e, t]) => ({ id: t, name: e })).sort((e, t) => e.id - t.id) : [];
|
|
95
|
+
N(() => {
|
|
96
|
+
u === null && v.length > 0 && E(v[0].id);
|
|
97
|
+
}, [v.length, u]);
|
|
98
|
+
let z = null, T = null, g = null, D = null, C = (o == null ? void 0 : o.choosingAddress) || "", S = "", M = null, _ = null;
|
|
99
|
+
if (o && u !== null) {
|
|
100
|
+
const { contextsBySheetId: e } = o, t = e[u];
|
|
101
|
+
if (t) {
|
|
102
|
+
z = t.store;
|
|
103
|
+
const n = t.store.sheetReactive.current;
|
|
104
|
+
n && (T = n);
|
|
134
105
|
}
|
|
135
106
|
}
|
|
136
|
-
if (
|
|
137
|
-
const { contextsBySheetId } =
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (entry) {
|
|
142
|
-
registryCellSheetName = entry[0];
|
|
143
|
-
}
|
|
107
|
+
if (o && o.choosingSheetId != null) {
|
|
108
|
+
const { contextsBySheetId: e } = o, t = e[o.choosingSheetId];
|
|
109
|
+
if (o.sheetIdsByName) {
|
|
110
|
+
const n = Object.entries(o.sheetIdsByName).find(([, i]) => i === o.choosingSheetId);
|
|
111
|
+
n && (S = n[0]);
|
|
144
112
|
}
|
|
145
|
-
if (
|
|
146
|
-
const
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
registryCellAddress = `header:${x2c(store.choosing.x)}`;
|
|
156
|
-
} else if (isLeftHeaderSelecting) {
|
|
157
|
-
registryCellAddress = `header:${store.choosing.y}`;
|
|
158
|
-
}
|
|
159
|
-
if (pos && idMatrix[pos.y]) {
|
|
160
|
-
const id = idMatrix[pos.y][pos.x];
|
|
161
|
-
if (id) {
|
|
162
|
-
registryCellData = registry.data[id];
|
|
163
|
-
registrySystemData = registry.systems[id] ?? null;
|
|
164
|
-
const text = registryCellData == null ? void 0 : registryCellData.value;
|
|
165
|
-
if (typeof text === "string" && text.startsWith("=")) {
|
|
113
|
+
if (t) {
|
|
114
|
+
const n = t.store.sheetReactive.current, i = t.store;
|
|
115
|
+
if (n) {
|
|
116
|
+
const a = (n.__raw__ || n).idMatrix, d = i.topHeaderSelecting, B = i.leftHeaderSelecting, m = d ? { y: 0, x: i.choosing.x } : B ? { y: i.choosing.y, x: 0 } : X(o.choosingAddress);
|
|
117
|
+
if (d ? C = `header:${ee(i.choosing.x)}` : B && (C = `header:${i.choosing.y}`), m && a[m.y]) {
|
|
118
|
+
const w = a[m.y][m.x];
|
|
119
|
+
if (w) {
|
|
120
|
+
g = o.data[w], D = o.systems[w] ?? null;
|
|
121
|
+
const I = g == null ? void 0 : g.value;
|
|
122
|
+
if (typeof I == "string" && I.startsWith("="))
|
|
166
123
|
try {
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
registryFormulaExpr = parser.build();
|
|
172
|
-
} catch (e) {
|
|
173
|
-
registryFormulaExpr = { error: String(e) };
|
|
124
|
+
const f = new te(I.substring(1));
|
|
125
|
+
f.tokenize(), _ = f.tokens, M = new oe(f.tokens).build();
|
|
126
|
+
} catch (f) {
|
|
127
|
+
M = { error: String(f) };
|
|
174
128
|
}
|
|
175
|
-
}
|
|
176
129
|
}
|
|
177
130
|
}
|
|
178
131
|
}
|
|
179
132
|
}
|
|
180
133
|
}
|
|
181
|
-
const
|
|
182
|
-
if (
|
|
183
|
-
return
|
|
184
|
-
|
|
185
|
-
if (value instanceof Map) {
|
|
186
|
-
return Object.fromEntries(value.entries());
|
|
187
|
-
}
|
|
188
|
-
if (value instanceof Set) {
|
|
189
|
-
return Array.from(value);
|
|
190
|
-
}
|
|
191
|
-
return value;
|
|
192
|
-
};
|
|
193
|
-
const jsonReplacer = (key, value) => {
|
|
194
|
-
if (value instanceof Sheet) {
|
|
195
|
-
return value.toString();
|
|
196
|
-
}
|
|
197
|
-
return baseReplacer(key, value);
|
|
198
|
-
};
|
|
199
|
-
const startDrag = (e) => {
|
|
134
|
+
const k = (e, t) => {
|
|
135
|
+
if (!(e === "registry" || e === "__raw__" || t && typeof t == "object" && "current" in t && Object.keys(t).length === 1))
|
|
136
|
+
return t instanceof Map ? Object.fromEntries(t.entries()) : t instanceof Set ? Array.from(t) : t;
|
|
137
|
+
}, A = (e, t) => t instanceof re ? t.toString() : k(e, t), P = (e) => {
|
|
200
138
|
e.preventDefault();
|
|
201
|
-
const
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
ss.set("gs-debugger-top-height", String(h));
|
|
207
|
-
};
|
|
208
|
-
const onMouseUp = () => {
|
|
209
|
-
document.removeEventListener("mousemove", onMouseMove);
|
|
210
|
-
document.removeEventListener("mouseup", onMouseUp);
|
|
139
|
+
const t = e.clientY, n = H, i = (a) => {
|
|
140
|
+
const d = Math.max(100, n + a.clientY - t);
|
|
141
|
+
R(d), x.set("gs-debugger-top-height", String(d));
|
|
142
|
+
}, l = () => {
|
|
143
|
+
document.removeEventListener("mousemove", i), document.removeEventListener("mouseup", l);
|
|
211
144
|
};
|
|
212
|
-
document.addEventListener("mousemove",
|
|
213
|
-
|
|
214
|
-
};
|
|
215
|
-
const startDragBottom = (e) => {
|
|
145
|
+
document.addEventListener("mousemove", i), document.addEventListener("mouseup", l);
|
|
146
|
+
}, J = (e) => {
|
|
216
147
|
e.preventDefault();
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
ss.set("gs-debugger-bottom-height", String(h));
|
|
223
|
-
};
|
|
224
|
-
const onMouseUp = () => {
|
|
225
|
-
document.removeEventListener("mousemove", onMouseMove);
|
|
226
|
-
document.removeEventListener("mouseup", onMouseUp);
|
|
148
|
+
const t = e.clientY, n = j, i = (a) => {
|
|
149
|
+
const d = Math.max(100, n + a.clientY - t);
|
|
150
|
+
F(d), x.set("gs-debugger-bottom-height", String(d));
|
|
151
|
+
}, l = () => {
|
|
152
|
+
document.removeEventListener("mousemove", i), document.removeEventListener("mouseup", l);
|
|
227
153
|
};
|
|
228
|
-
document.addEventListener("mousemove",
|
|
229
|
-
document.addEventListener("mouseup", onMouseUp);
|
|
154
|
+
document.addEventListener("mousemove", i), document.addEventListener("mouseup", l);
|
|
230
155
|
};
|
|
231
|
-
return /* @__PURE__ */
|
|
156
|
+
return /* @__PURE__ */ s(
|
|
232
157
|
"div",
|
|
233
158
|
{
|
|
234
159
|
style: {
|
|
@@ -242,17 +167,17 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
242
167
|
overflow: "hidden"
|
|
243
168
|
},
|
|
244
169
|
children: [
|
|
245
|
-
/* @__PURE__ */
|
|
170
|
+
/* @__PURE__ */ s(
|
|
246
171
|
"div",
|
|
247
172
|
{
|
|
248
173
|
style: {
|
|
249
174
|
display: "flex",
|
|
250
175
|
flexDirection: "row",
|
|
251
|
-
height: `${
|
|
176
|
+
height: `${H}px`,
|
|
252
177
|
overflow: "hidden"
|
|
253
178
|
},
|
|
254
179
|
children: [
|
|
255
|
-
/* @__PURE__ */
|
|
180
|
+
/* @__PURE__ */ s(
|
|
256
181
|
"div",
|
|
257
182
|
{
|
|
258
183
|
style: {
|
|
@@ -263,7 +188,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
263
188
|
position: "relative"
|
|
264
189
|
},
|
|
265
190
|
children: [
|
|
266
|
-
/* @__PURE__ */
|
|
191
|
+
/* @__PURE__ */ r(
|
|
267
192
|
"div",
|
|
268
193
|
{
|
|
269
194
|
style: {
|
|
@@ -278,11 +203,11 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
278
203
|
children: "Registry State"
|
|
279
204
|
}
|
|
280
205
|
),
|
|
281
|
-
/* @__PURE__ */
|
|
206
|
+
/* @__PURE__ */ r(b, { data: y, replacer: A, theme: ie })
|
|
282
207
|
]
|
|
283
208
|
}
|
|
284
209
|
),
|
|
285
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ s(
|
|
286
211
|
"div",
|
|
287
212
|
{
|
|
288
213
|
style: {
|
|
@@ -293,7 +218,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
293
218
|
position: "relative"
|
|
294
219
|
},
|
|
295
220
|
children: [
|
|
296
|
-
/* @__PURE__ */
|
|
221
|
+
/* @__PURE__ */ s(
|
|
297
222
|
"div",
|
|
298
223
|
{
|
|
299
224
|
style: {
|
|
@@ -307,16 +232,16 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
307
232
|
},
|
|
308
233
|
children: [
|
|
309
234
|
"Cell: ",
|
|
310
|
-
|
|
311
|
-
|
|
235
|
+
S && `'${S}'!`,
|
|
236
|
+
C
|
|
312
237
|
]
|
|
313
238
|
}
|
|
314
239
|
),
|
|
315
|
-
|
|
240
|
+
g ? /* @__PURE__ */ r(b, { data: g, replacer: k, theme: ce }) : /* @__PURE__ */ r("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No cell data" })
|
|
316
241
|
]
|
|
317
242
|
}
|
|
318
243
|
),
|
|
319
|
-
/* @__PURE__ */
|
|
244
|
+
/* @__PURE__ */ s(
|
|
320
245
|
"div",
|
|
321
246
|
{
|
|
322
247
|
style: {
|
|
@@ -327,7 +252,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
327
252
|
position: "relative"
|
|
328
253
|
},
|
|
329
254
|
children: [
|
|
330
|
-
/* @__PURE__ */
|
|
255
|
+
/* @__PURE__ */ s(
|
|
331
256
|
"div",
|
|
332
257
|
{
|
|
333
258
|
style: {
|
|
@@ -341,32 +266,32 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
341
266
|
},
|
|
342
267
|
children: [
|
|
343
268
|
"System: ",
|
|
344
|
-
|
|
345
|
-
|
|
269
|
+
S && `'${S}'!`,
|
|
270
|
+
C
|
|
346
271
|
]
|
|
347
272
|
}
|
|
348
273
|
),
|
|
349
|
-
|
|
274
|
+
D ? /* @__PURE__ */ r(b, { data: D, replacer: k, theme: pe }) : /* @__PURE__ */ r("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No system data" })
|
|
350
275
|
]
|
|
351
276
|
}
|
|
352
277
|
),
|
|
353
|
-
/* @__PURE__ */
|
|
278
|
+
/* @__PURE__ */ s(
|
|
354
279
|
"div",
|
|
355
280
|
{
|
|
356
281
|
style: {
|
|
357
282
|
flex: 1,
|
|
358
283
|
overflow: "auto",
|
|
359
|
-
backgroundColor:
|
|
284
|
+
backgroundColor: p === "expressions" ? "#fffbf0" : "#f5f0ff",
|
|
360
285
|
position: "relative"
|
|
361
286
|
},
|
|
362
287
|
children: [
|
|
363
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ s(
|
|
364
289
|
"div",
|
|
365
290
|
{
|
|
366
291
|
style: {
|
|
367
292
|
position: "sticky",
|
|
368
293
|
top: 0,
|
|
369
|
-
background:
|
|
294
|
+
background: p === "expressions" ? "#fffbf0" : "#f5f0ff",
|
|
370
295
|
zIndex: 1,
|
|
371
296
|
padding: "6px 12px",
|
|
372
297
|
fontWeight: "bold",
|
|
@@ -376,14 +301,13 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
376
301
|
gap: "8px"
|
|
377
302
|
},
|
|
378
303
|
children: [
|
|
379
|
-
/* @__PURE__ */
|
|
380
|
-
/* @__PURE__ */
|
|
304
|
+
/* @__PURE__ */ r("span", { children: p === "expressions" ? "Formula Expressions" : "Formula Tokens" }),
|
|
305
|
+
/* @__PURE__ */ r(
|
|
381
306
|
"button",
|
|
382
307
|
{
|
|
383
308
|
onClick: () => {
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
ss.set("gs-debugger-formula-view", next);
|
|
309
|
+
const e = p === "expressions" ? "tokens" : "expressions";
|
|
310
|
+
W(e), x.set("gs-debugger-formula-view", e);
|
|
387
311
|
},
|
|
388
312
|
style: {
|
|
389
313
|
marginLeft: "auto",
|
|
@@ -394,30 +318,30 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
394
318
|
borderRadius: "4px",
|
|
395
319
|
background: "#fff"
|
|
396
320
|
},
|
|
397
|
-
children:
|
|
321
|
+
children: p === "expressions" ? "→ Tokens" : "→ Expressions"
|
|
398
322
|
}
|
|
399
323
|
)
|
|
400
324
|
]
|
|
401
325
|
}
|
|
402
326
|
),
|
|
403
|
-
|
|
404
|
-
|
|
327
|
+
g ? /* @__PURE__ */ r(
|
|
328
|
+
b,
|
|
405
329
|
{
|
|
406
|
-
data:
|
|
407
|
-
replacer:
|
|
408
|
-
theme:
|
|
330
|
+
data: p === "expressions" ? M : _,
|
|
331
|
+
replacer: k,
|
|
332
|
+
theme: p === "expressions" ? le : ae
|
|
409
333
|
}
|
|
410
|
-
) : /* @__PURE__ */
|
|
334
|
+
) : /* @__PURE__ */ r("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No cell selected" })
|
|
411
335
|
]
|
|
412
336
|
}
|
|
413
337
|
)
|
|
414
338
|
]
|
|
415
339
|
}
|
|
416
340
|
),
|
|
417
|
-
/* @__PURE__ */
|
|
341
|
+
/* @__PURE__ */ r(
|
|
418
342
|
"div",
|
|
419
343
|
{
|
|
420
|
-
onMouseDown:
|
|
344
|
+
onMouseDown: P,
|
|
421
345
|
style: {
|
|
422
346
|
height: "6px",
|
|
423
347
|
backgroundColor: "#dee2e6",
|
|
@@ -433,7 +357,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
433
357
|
}
|
|
434
358
|
}
|
|
435
359
|
),
|
|
436
|
-
/* @__PURE__ */
|
|
360
|
+
/* @__PURE__ */ s(
|
|
437
361
|
"div",
|
|
438
362
|
{
|
|
439
363
|
style: {
|
|
@@ -443,42 +367,42 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
443
367
|
backgroundColor: "#f8f9fa"
|
|
444
368
|
},
|
|
445
369
|
children: [
|
|
446
|
-
|
|
370
|
+
v.map((e) => /* @__PURE__ */ s(
|
|
447
371
|
"div",
|
|
448
372
|
{
|
|
449
|
-
onClick: () =>
|
|
373
|
+
onClick: () => E(e.id),
|
|
450
374
|
style: {
|
|
451
375
|
padding: "8px 16px",
|
|
452
376
|
cursor: "pointer",
|
|
453
377
|
fontWeight: "bold",
|
|
454
|
-
borderBottom:
|
|
455
|
-
color:
|
|
378
|
+
borderBottom: u === e.id ? "2px solid #0d6efd" : "2px solid transparent",
|
|
379
|
+
color: u === e.id ? "#0d6efd" : "#495057"
|
|
456
380
|
},
|
|
457
381
|
children: [
|
|
458
|
-
|
|
382
|
+
e.name,
|
|
459
383
|
" (ID: ",
|
|
460
|
-
|
|
384
|
+
e.id,
|
|
461
385
|
")"
|
|
462
386
|
]
|
|
463
387
|
},
|
|
464
|
-
|
|
388
|
+
e.id
|
|
465
389
|
)),
|
|
466
|
-
|
|
390
|
+
v.length === 0 && /* @__PURE__ */ r("div", { style: { padding: "8px 16px", color: "#6c757d" }, children: "No sheets detected" })
|
|
467
391
|
]
|
|
468
392
|
}
|
|
469
393
|
),
|
|
470
|
-
/* @__PURE__ */
|
|
394
|
+
/* @__PURE__ */ s(
|
|
471
395
|
"div",
|
|
472
396
|
{
|
|
473
397
|
style: {
|
|
474
398
|
display: "flex",
|
|
475
399
|
flexDirection: "row",
|
|
476
|
-
height: `${
|
|
400
|
+
height: `${j}px`,
|
|
477
401
|
backgroundColor: "#282c34",
|
|
478
402
|
overflow: "hidden"
|
|
479
403
|
},
|
|
480
404
|
children: [
|
|
481
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ s(
|
|
482
406
|
"div",
|
|
483
407
|
{
|
|
484
408
|
style: {
|
|
@@ -489,7 +413,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
489
413
|
backgroundColor: "#282c34"
|
|
490
414
|
},
|
|
491
415
|
children: [
|
|
492
|
-
/* @__PURE__ */
|
|
416
|
+
/* @__PURE__ */ r(
|
|
493
417
|
"div",
|
|
494
418
|
{
|
|
495
419
|
style: {
|
|
@@ -505,11 +429,11 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
505
429
|
children: "Sheet Data"
|
|
506
430
|
}
|
|
507
431
|
),
|
|
508
|
-
|
|
432
|
+
T ? /* @__PURE__ */ r(b, { data: T, replacer: k, theme: se }) : /* @__PURE__ */ r("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "Sheet instance not found" })
|
|
509
433
|
]
|
|
510
434
|
}
|
|
511
435
|
),
|
|
512
|
-
/* @__PURE__ */
|
|
436
|
+
/* @__PURE__ */ s(
|
|
513
437
|
"div",
|
|
514
438
|
{
|
|
515
439
|
style: {
|
|
@@ -519,7 +443,7 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
519
443
|
position: "relative"
|
|
520
444
|
},
|
|
521
445
|
children: [
|
|
522
|
-
/* @__PURE__ */
|
|
446
|
+
/* @__PURE__ */ r(
|
|
523
447
|
"div",
|
|
524
448
|
{
|
|
525
449
|
style: {
|
|
@@ -535,17 +459,17 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
535
459
|
children: "Store Data"
|
|
536
460
|
}
|
|
537
461
|
),
|
|
538
|
-
|
|
462
|
+
z ? /* @__PURE__ */ r(b, { data: z, replacer: A, theme: de }) : /* @__PURE__ */ r("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "Store state not found" })
|
|
539
463
|
]
|
|
540
464
|
}
|
|
541
465
|
)
|
|
542
466
|
]
|
|
543
467
|
}
|
|
544
468
|
),
|
|
545
|
-
/* @__PURE__ */
|
|
469
|
+
/* @__PURE__ */ r(
|
|
546
470
|
"div",
|
|
547
471
|
{
|
|
548
|
-
onMouseDown:
|
|
472
|
+
onMouseDown: J,
|
|
549
473
|
style: {
|
|
550
474
|
height: "6px",
|
|
551
475
|
backgroundColor: "#dee2e6",
|
|
@@ -566,6 +490,6 @@ const Debugger = ({ book, intervalMs = 500 }) => {
|
|
|
566
490
|
);
|
|
567
491
|
};
|
|
568
492
|
export {
|
|
569
|
-
Debugger
|
|
493
|
+
Ie as Debugger
|
|
570
494
|
};
|
|
571
495
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Debugger.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport type { BookType } from '@gridsheet/react-core';\nimport { a2p, x2c, Lexer, FormulaParser, Sheet } from '@gridsheet/react-core';\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport type { SyntaxHighlighterProps } from 'react-syntax-highlighter';\nimport jsonLang from 'react-syntax-highlighter/dist/esm/languages/hljs/json';\nimport atomOneLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atom-one-light';\nimport tomorrowNight from 'react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night';\nimport solarizedDark from 'react-syntax-highlighter/dist/esm/styles/hljs/solarized-dark';\nimport solarizedLight from 'react-syntax-highlighter/dist/esm/styles/hljs/solarized-light';\nimport docco from 'react-syntax-highlighter/dist/esm/styles/hljs/docco';\nimport atelierSeasideLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atelier-seaside-light';\nimport atelierHeathLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atelier-heath-light';\n\nSyntaxHighlighter.registerLanguage('json', jsonLang);\n\nconst ss = {\n get: (key: string) => (typeof window !== 'undefined' ? sessionStorage.getItem(key) : null),\n set: (key: string, value: string) => {\n if (typeof window !== 'undefined') {\n sessionStorage.setItem(key, value);\n }\n },\n};\n\ntype HljsStyle = SyntaxHighlighterProps['style'];\n\nconst JsonCode: React.FC<{ data: any; replacer?: (k: string, v: any) => any; theme: HljsStyle }> = ({\n data,\n replacer,\n theme,\n}) => {\n const code = JSON.stringify(data, replacer, 2) ?? '';\n return (\n <SyntaxHighlighter\n language=\"json\"\n style={theme}\n showLineNumbers\n customStyle={{ margin: 0, fontSize: '10px', minHeight: '100%', borderRadius: 0, whiteSpace: 'pre' }}\n codeTagProps={{ style: { display: 'block', whiteSpace: 'pre', fontSize: '10px' } }}\n >\n {code}\n </SyntaxHighlighter>\n );\n};\n\nexport type DebuggerProps = {\n book: BookType;\n intervalMs?: number;\n};\n\nexport const Debugger: React.FC<DebuggerProps> = ({ book, intervalMs = 500 }) => {\n const { registry } = book;\n const [snapshot, setSnapshot] = useState<any>({});\n const [activeTabId, setActiveTabId] = useState<number | null>(null);\n const [topHeight, setTopHeight] = useState<number>(200);\n const [bottomHeight, setBottomHeight] = useState<number>(200);\n const [formulaView, setFormulaView] = useState<'expressions' | 'tokens'>('expressions');\n\n useEffect(() => {\n const savedTop = ss.get('gs-debugger-top-height');\n if (savedTop) {\n setTopHeight(Number(savedTop));\n }\n const savedBottom = ss.get('gs-debugger-bottom-height');\n if (savedBottom) {\n setBottomHeight(Number(savedBottom));\n }\n const savedFormula = ss.get('gs-debugger-formula-view') as 'expressions' | 'tokens';\n if (savedFormula) {\n setFormulaView(savedFormula);\n }\n }, []);\n\n useEffect(() => {\n const updateSnapshot = () => {\n if (!registry) {\n return;\n }\n\n const {\n choosingAddress,\n choosingSheetId,\n editingAddress,\n editingSheetId,\n ready,\n sheetIdsByName,\n sheetHead,\n cellHead,\n paletteBySheetName,\n solvedCaches,\n copyingSheetId,\n copyingZone,\n cutting,\n historyIndex,\n historyLimit,\n histories,\n asyncPending,\n asyncInflight,\n } = registry;\n\n setSnapshot({\n asyncPending,\n asyncInflight,\n ready,\n sheetIdsByName,\n sheetHead,\n cellHead,\n paletteBySheetName,\n solvedCaches,\n choosingAddress,\n choosingSheetId,\n editingAddress,\n editingSheetId,\n copyingSheetId,\n copyingZone,\n cutting,\n historyIndex,\n historyLimit,\n histories,\n });\n };\n\n updateSnapshot();\n\n const intervalId = setInterval(updateSnapshot, intervalMs);\n return () => clearInterval(intervalId);\n }, [registry, intervalMs]);\n\n const sheets = snapshot.sheetIdsByName\n ? Object.entries(snapshot.sheetIdsByName)\n .map(([name, id]) => ({ id: id as number, name }))\n .sort((a, b) => a.id - b.id)\n : [];\n\n useEffect(() => {\n if (activeTabId === null && sheets.length > 0) {\n setActiveTabId(sheets[0].id);\n }\n }, [sheets.length, activeTabId]);\n\n let activeStoreData = null;\n let activeTableData = null;\n\n // Cell data for the currently selected cell (registry.choosingSheetId / choosingAddress)\n let registryCellData = null;\n let registrySystemData = null;\n let registryCellAddress = registry?.choosingAddress || '';\n let registryCellSheetName = '';\n let registryFormulaExpr = null;\n let registryFormulaTokens = null;\n\n if (registry && activeTabId !== null) {\n const { contextsBySheetId } = registry;\n const context = contextsBySheetId[activeTabId];\n\n if (context) {\n activeStoreData = context.store;\n\n const sheet = context.store.sheetReactive.current;\n if (sheet) {\n activeTableData = sheet;\n }\n }\n }\n\n // Resolve cell data for the currently selected cell (registry.choosingSheetId / choosingAddress)\n if (registry && registry.choosingSheetId != null) {\n const { contextsBySheetId } = registry;\n const choosingContext = contextsBySheetId[registry.choosingSheetId];\n\n // Resolve sheet name\n if (registry.sheetIdsByName) {\n const entry = Object.entries(registry.sheetIdsByName).find(([, id]) => id === registry.choosingSheetId);\n if (entry) {\n registryCellSheetName = entry[0];\n }\n }\n\n if (choosingContext) {\n const sheet = choosingContext.store.sheetReactive.current;\n const store = choosingContext.store;\n if (sheet) {\n const rawTable = (sheet as any).__raw__ || sheet;\n const idMatrix = rawTable.idMatrix;\n\n // When a header cell is selected, use y=0 (top header) or x=0 (left header)\n const isTopHeaderSelecting = store.topHeaderSelecting;\n const isLeftHeaderSelecting = store.leftHeaderSelecting;\n const pos = isTopHeaderSelecting\n ? { y: 0, x: store.choosing.x }\n : isLeftHeaderSelecting\n ? { y: store.choosing.y, x: 0 }\n : a2p(registry.choosingAddress);\n\n if (isTopHeaderSelecting) {\n registryCellAddress = `header:${x2c(store.choosing.x)}`;\n } else if (isLeftHeaderSelecting) {\n registryCellAddress = `header:${store.choosing.y}`;\n }\n\n if (pos && idMatrix[pos.y]) {\n const id = idMatrix[pos.y][pos.x];\n if (id) {\n registryCellData = registry.data[id];\n registrySystemData = registry.systems[id] ?? null;\n\n // Parse formula\n const text = registryCellData?.value;\n if (typeof text === 'string' && text.startsWith('=')) {\n try {\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n registryFormulaTokens = lexer.tokens;\n const parser = new FormulaParser(lexer.tokens);\n registryFormulaExpr = parser.build();\n } catch (e) {\n registryFormulaExpr = { error: String(e) };\n }\n }\n }\n }\n }\n }\n }\n\n const baseReplacer = (key: string, value: any) => {\n // Avoid circular refs, noisy internals, and React RefObjects\n if (\n key === 'registry' ||\n key === '__raw__' ||\n (value && typeof value === 'object' && 'current' in value && Object.keys(value).length === 1) // heuristic to skip React ref objects\n ) {\n return undefined;\n }\n if (value instanceof Map) {\n return Object.fromEntries(value.entries());\n }\n if (value instanceof Set) {\n return Array.from(value);\n }\n return value;\n };\n\n // Replace nested Sheet instances with their string representation (for Registry State / Store Data panels)\n const jsonReplacer = (key: string, value: any) => {\n if (value instanceof Sheet) {\n return value.toString();\n }\n return baseReplacer(key, value);\n };\n\n const startDrag = (e: React.MouseEvent) => {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = topHeight;\n const onMouseMove = (moveEvent: MouseEvent) => {\n const h = Math.max(100, startHeight + moveEvent.clientY - startY);\n setTopHeight(h);\n ss.set('gs-debugger-top-height', String(h));\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n const startDragBottom = (e: React.MouseEvent) => {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = bottomHeight;\n const onMouseMove = (moveEvent: MouseEvent) => {\n const h = Math.max(100, startHeight + moveEvent.clientY - startY);\n setBottomHeight(h);\n ss.set('gs-debugger-bottom-height', String(h));\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n fontFamily: 'monospace',\n fontSize: '12px',\n color: '#212529',\n border: '1px solid #dee2e6',\n borderRadius: '6px',\n overflow: 'hidden',\n }}\n >\n {/* Top pane: Registry State | Cell | System | Formula */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n height: `${topHeight}px`,\n overflow: 'hidden',\n }}\n >\n {/* Registry State panel */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n backgroundColor: '#fafafa',\n overflow: 'auto',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#fafafa',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n Registry State\n </div>\n <JsonCode data={snapshot} replacer={jsonReplacer} theme={atomOneLight} />\n </div>\n\n {/* Registry Cell Value: cell data for registry.choosingSheetId / choosingAddress */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n overflow: 'auto',\n backgroundColor: '#f0f8f0',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#f0f8f0',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n Cell: {registryCellSheetName && `'${registryCellSheetName}'!`}\n {registryCellAddress}\n </div>\n {registryCellData ? (\n <JsonCode data={registryCellData} replacer={baseReplacer} theme={atelierSeasideLight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No cell data</div>\n )}\n </div>\n\n {/* System: systems[id] for the choosing cell */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n overflow: 'auto',\n backgroundColor: '#fdf0f2',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#fdf0f2',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n System: {registryCellSheetName && `'${registryCellSheetName}'!`}\n {registryCellAddress}\n </div>\n {registrySystemData ? (\n <JsonCode data={registrySystemData} replacer={baseReplacer} theme={atelierHeathLight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No system data</div>\n )}\n </div>\n\n {/* Formula: toggling between Expressions and Tokens */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n backgroundColor: formulaView === 'expressions' ? '#fffbf0' : '#f5f0ff',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: formulaView === 'expressions' ? '#fffbf0' : '#f5f0ff',\n zIndex: 1,\n padding: '6px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>{formulaView === 'expressions' ? 'Formula Expressions' : 'Formula Tokens'}</span>\n <button\n onClick={() => {\n const next = formulaView === 'expressions' ? 'tokens' : 'expressions';\n setFormulaView(next);\n ss.set('gs-debugger-formula-view', next);\n }}\n style={{\n marginLeft: 'auto',\n fontSize: '11px',\n padding: '2px 8px',\n cursor: 'pointer',\n border: '1px solid #aaa',\n borderRadius: '4px',\n background: '#fff',\n }}\n >\n {formulaView === 'expressions' ? '→ Tokens' : '→ Expressions'}\n </button>\n </div>\n {registryCellData ? (\n <JsonCode\n data={formulaView === 'expressions' ? registryFormulaExpr : registryFormulaTokens}\n replacer={baseReplacer}\n theme={formulaView === 'expressions' ? solarizedLight : docco}\n />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No cell selected</div>\n )}\n </div>\n </div>\n\n {/* Resizer for top pane */}\n <div\n onMouseDown={startDrag}\n style={{\n height: '6px',\n backgroundColor: '#dee2e6',\n cursor: 'row-resize',\n transition: 'background-color 0.2s',\n zIndex: 10,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#adb5bd';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#dee2e6';\n }}\n />\n\n {/* Sheet tabs */}\n <div\n style={{\n display: 'flex',\n borderBottom: '1px solid #dee2e6',\n borderTop: '1px solid #dee2e6',\n backgroundColor: '#f8f9fa',\n }}\n >\n {sheets.map((sheet) => (\n <div\n key={sheet.id}\n onClick={() => setActiveTabId(sheet.id)}\n style={{\n padding: '8px 16px',\n cursor: 'pointer',\n fontWeight: 'bold',\n borderBottom: activeTabId === sheet.id ? '2px solid #0d6efd' : '2px solid transparent',\n color: activeTabId === sheet.id ? '#0d6efd' : '#495057',\n }}\n >\n {sheet.name} (ID: {sheet.id})\n </div>\n ))}\n {sheets.length === 0 && <div style={{ padding: '8px 16px', color: '#6c757d' }}>No sheets detected</div>}\n </div>\n\n {/* Bottom pane: Sheet Data | Store Data */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n height: `${bottomHeight}px`,\n backgroundColor: '#282c34',\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #3a3a3a',\n overflow: 'auto',\n position: 'relative',\n backgroundColor: '#282c34',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#21252b',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #3a3a3a',\n color: '#abb2bf',\n }}\n >\n Sheet Data\n </div>\n {activeTableData ? (\n <JsonCode data={activeTableData} replacer={baseReplacer} theme={tomorrowNight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>Sheet instance not found</div>\n )}\n </div>\n\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n backgroundColor: '#282c34',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#21252b',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #3a3a3a',\n color: '#abb2bf',\n }}\n >\n Store Data\n </div>\n {activeStoreData ? (\n <JsonCode data={activeStoreData} replacer={jsonReplacer} theme={solarizedDark} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>Store state not found</div>\n )}\n </div>\n </div>\n\n {/* Resizer for bottom pane */}\n <div\n onMouseDown={startDragBottom}\n style={{\n height: '6px',\n backgroundColor: '#dee2e6',\n cursor: 'row-resize',\n transition: 'background-color 0.2s',\n zIndex: 10,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#adb5bd';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#dee2e6';\n }}\n />\n </div>\n );\n};\n"],"names":["SyntaxHighlighter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Debugger.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport type { BookType } from '@gridsheet/react-core';\nimport { a2p, x2c, Lexer, FormulaParser, Sheet } from '@gridsheet/react-core';\nimport { Light as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport type { SyntaxHighlighterProps } from 'react-syntax-highlighter';\nimport jsonLang from 'react-syntax-highlighter/dist/esm/languages/hljs/json';\nimport atomOneLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atom-one-light';\nimport tomorrowNight from 'react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night';\nimport solarizedDark from 'react-syntax-highlighter/dist/esm/styles/hljs/solarized-dark';\nimport solarizedLight from 'react-syntax-highlighter/dist/esm/styles/hljs/solarized-light';\nimport docco from 'react-syntax-highlighter/dist/esm/styles/hljs/docco';\nimport atelierSeasideLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atelier-seaside-light';\nimport atelierHeathLight from 'react-syntax-highlighter/dist/esm/styles/hljs/atelier-heath-light';\n\nSyntaxHighlighter.registerLanguage('json', jsonLang);\n\nconst ss = {\n get: (key: string) => (typeof window !== 'undefined' ? sessionStorage.getItem(key) : null),\n set: (key: string, value: string) => {\n if (typeof window !== 'undefined') {\n sessionStorage.setItem(key, value);\n }\n },\n};\n\ntype HljsStyle = SyntaxHighlighterProps['style'];\n\nconst JsonCode: React.FC<{ data: any; replacer?: (k: string, v: any) => any; theme: HljsStyle }> = ({\n data,\n replacer,\n theme,\n}) => {\n const code = JSON.stringify(data, replacer, 2) ?? '';\n return (\n <SyntaxHighlighter\n language=\"json\"\n style={theme}\n showLineNumbers\n customStyle={{ margin: 0, fontSize: '10px', minHeight: '100%', borderRadius: 0, whiteSpace: 'pre' }}\n codeTagProps={{ style: { display: 'block', whiteSpace: 'pre', fontSize: '10px' } }}\n >\n {code}\n </SyntaxHighlighter>\n );\n};\n\nexport type DebuggerProps = {\n book: BookType;\n intervalMs?: number;\n};\n\nexport const Debugger: React.FC<DebuggerProps> = ({ book, intervalMs = 500 }) => {\n const { registry } = book;\n const [snapshot, setSnapshot] = useState<any>({});\n const [activeTabId, setActiveTabId] = useState<number | null>(null);\n const [topHeight, setTopHeight] = useState<number>(200);\n const [bottomHeight, setBottomHeight] = useState<number>(200);\n const [formulaView, setFormulaView] = useState<'expressions' | 'tokens'>('expressions');\n\n useEffect(() => {\n const savedTop = ss.get('gs-debugger-top-height');\n if (savedTop) {\n setTopHeight(Number(savedTop));\n }\n const savedBottom = ss.get('gs-debugger-bottom-height');\n if (savedBottom) {\n setBottomHeight(Number(savedBottom));\n }\n const savedFormula = ss.get('gs-debugger-formula-view') as 'expressions' | 'tokens';\n if (savedFormula) {\n setFormulaView(savedFormula);\n }\n }, []);\n\n useEffect(() => {\n const updateSnapshot = () => {\n if (!registry) {\n return;\n }\n\n const {\n choosingAddress,\n choosingSheetId,\n editingAddress,\n editingSheetId,\n ready,\n sheetIdsByName,\n sheetHead,\n cellHead,\n paletteBySheetName,\n solvedCaches,\n copyingSheetId,\n copyingZone,\n cutting,\n historyIndex,\n historyLimit,\n histories,\n asyncPending,\n asyncInflight,\n } = registry;\n\n setSnapshot({\n asyncPending,\n asyncInflight,\n ready,\n sheetIdsByName,\n sheetHead,\n cellHead,\n paletteBySheetName,\n solvedCaches,\n choosingAddress,\n choosingSheetId,\n editingAddress,\n editingSheetId,\n copyingSheetId,\n copyingZone,\n cutting,\n historyIndex,\n historyLimit,\n histories,\n });\n };\n\n updateSnapshot();\n\n const intervalId = setInterval(updateSnapshot, intervalMs);\n return () => clearInterval(intervalId);\n }, [registry, intervalMs]);\n\n const sheets = snapshot.sheetIdsByName\n ? Object.entries(snapshot.sheetIdsByName)\n .map(([name, id]) => ({ id: id as number, name }))\n .sort((a, b) => a.id - b.id)\n : [];\n\n useEffect(() => {\n if (activeTabId === null && sheets.length > 0) {\n setActiveTabId(sheets[0].id);\n }\n }, [sheets.length, activeTabId]);\n\n let activeStoreData = null;\n let activeTableData = null;\n\n // Cell data for the currently selected cell (registry.choosingSheetId / choosingAddress)\n let registryCellData = null;\n let registrySystemData = null;\n let registryCellAddress = registry?.choosingAddress || '';\n let registryCellSheetName = '';\n let registryFormulaExpr = null;\n let registryFormulaTokens = null;\n\n if (registry && activeTabId !== null) {\n const { contextsBySheetId } = registry;\n const context = contextsBySheetId[activeTabId];\n\n if (context) {\n activeStoreData = context.store;\n\n const sheet = context.store.sheetReactive.current;\n if (sheet) {\n activeTableData = sheet;\n }\n }\n }\n\n // Resolve cell data for the currently selected cell (registry.choosingSheetId / choosingAddress)\n if (registry && registry.choosingSheetId != null) {\n const { contextsBySheetId } = registry;\n const choosingContext = contextsBySheetId[registry.choosingSheetId];\n\n // Resolve sheet name\n if (registry.sheetIdsByName) {\n const entry = Object.entries(registry.sheetIdsByName).find(([, id]) => id === registry.choosingSheetId);\n if (entry) {\n registryCellSheetName = entry[0];\n }\n }\n\n if (choosingContext) {\n const sheet = choosingContext.store.sheetReactive.current;\n const store = choosingContext.store;\n if (sheet) {\n const rawTable = (sheet as any).__raw__ || sheet;\n const idMatrix = rawTable.idMatrix;\n\n // When a header cell is selected, use y=0 (top header) or x=0 (left header)\n const isTopHeaderSelecting = store.topHeaderSelecting;\n const isLeftHeaderSelecting = store.leftHeaderSelecting;\n const pos = isTopHeaderSelecting\n ? { y: 0, x: store.choosing.x }\n : isLeftHeaderSelecting\n ? { y: store.choosing.y, x: 0 }\n : a2p(registry.choosingAddress);\n\n if (isTopHeaderSelecting) {\n registryCellAddress = `header:${x2c(store.choosing.x)}`;\n } else if (isLeftHeaderSelecting) {\n registryCellAddress = `header:${store.choosing.y}`;\n }\n\n if (pos && idMatrix[pos.y]) {\n const id = idMatrix[pos.y][pos.x];\n if (id) {\n registryCellData = registry.data[id];\n registrySystemData = registry.systems[id] ?? null;\n\n // Parse formula\n const text = registryCellData?.value;\n if (typeof text === 'string' && text.startsWith('=')) {\n try {\n const lexer = new Lexer(text.substring(1));\n lexer.tokenize();\n registryFormulaTokens = lexer.tokens;\n const parser = new FormulaParser(lexer.tokens);\n registryFormulaExpr = parser.build();\n } catch (e) {\n registryFormulaExpr = { error: String(e) };\n }\n }\n }\n }\n }\n }\n }\n\n const baseReplacer = (key: string, value: any) => {\n // Avoid circular refs, noisy internals, and React RefObjects\n if (\n key === 'registry' ||\n key === '__raw__' ||\n (value && typeof value === 'object' && 'current' in value && Object.keys(value).length === 1) // heuristic to skip React ref objects\n ) {\n return undefined;\n }\n if (value instanceof Map) {\n return Object.fromEntries(value.entries());\n }\n if (value instanceof Set) {\n return Array.from(value);\n }\n return value;\n };\n\n // Replace nested Sheet instances with their string representation (for Registry State / Store Data panels)\n const jsonReplacer = (key: string, value: any) => {\n if (value instanceof Sheet) {\n return value.toString();\n }\n return baseReplacer(key, value);\n };\n\n const startDrag = (e: React.MouseEvent) => {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = topHeight;\n const onMouseMove = (moveEvent: MouseEvent) => {\n const h = Math.max(100, startHeight + moveEvent.clientY - startY);\n setTopHeight(h);\n ss.set('gs-debugger-top-height', String(h));\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n const startDragBottom = (e: React.MouseEvent) => {\n e.preventDefault();\n const startY = e.clientY;\n const startHeight = bottomHeight;\n const onMouseMove = (moveEvent: MouseEvent) => {\n const h = Math.max(100, startHeight + moveEvent.clientY - startY);\n setBottomHeight(h);\n ss.set('gs-debugger-bottom-height', String(h));\n };\n const onMouseUp = () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n fontFamily: 'monospace',\n fontSize: '12px',\n color: '#212529',\n border: '1px solid #dee2e6',\n borderRadius: '6px',\n overflow: 'hidden',\n }}\n >\n {/* Top pane: Registry State | Cell | System | Formula */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n height: `${topHeight}px`,\n overflow: 'hidden',\n }}\n >\n {/* Registry State panel */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n backgroundColor: '#fafafa',\n overflow: 'auto',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#fafafa',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n Registry State\n </div>\n <JsonCode data={snapshot} replacer={jsonReplacer} theme={atomOneLight} />\n </div>\n\n {/* Registry Cell Value: cell data for registry.choosingSheetId / choosingAddress */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n overflow: 'auto',\n backgroundColor: '#f0f8f0',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#f0f8f0',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n Cell: {registryCellSheetName && `'${registryCellSheetName}'!`}\n {registryCellAddress}\n </div>\n {registryCellData ? (\n <JsonCode data={registryCellData} replacer={baseReplacer} theme={atelierSeasideLight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No cell data</div>\n )}\n </div>\n\n {/* System: systems[id] for the choosing cell */}\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #dee2e6',\n overflow: 'auto',\n backgroundColor: '#fdf0f2',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#fdf0f2',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n }}\n >\n System: {registryCellSheetName && `'${registryCellSheetName}'!`}\n {registryCellAddress}\n </div>\n {registrySystemData ? (\n <JsonCode data={registrySystemData} replacer={baseReplacer} theme={atelierHeathLight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No system data</div>\n )}\n </div>\n\n {/* Formula: toggling between Expressions and Tokens */}\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n backgroundColor: formulaView === 'expressions' ? '#fffbf0' : '#f5f0ff',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: formulaView === 'expressions' ? '#fffbf0' : '#f5f0ff',\n zIndex: 1,\n padding: '6px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #ccc',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n }}\n >\n <span>{formulaView === 'expressions' ? 'Formula Expressions' : 'Formula Tokens'}</span>\n <button\n onClick={() => {\n const next = formulaView === 'expressions' ? 'tokens' : 'expressions';\n setFormulaView(next);\n ss.set('gs-debugger-formula-view', next);\n }}\n style={{\n marginLeft: 'auto',\n fontSize: '11px',\n padding: '2px 8px',\n cursor: 'pointer',\n border: '1px solid #aaa',\n borderRadius: '4px',\n background: '#fff',\n }}\n >\n {formulaView === 'expressions' ? '→ Tokens' : '→ Expressions'}\n </button>\n </div>\n {registryCellData ? (\n <JsonCode\n data={formulaView === 'expressions' ? registryFormulaExpr : registryFormulaTokens}\n replacer={baseReplacer}\n theme={formulaView === 'expressions' ? solarizedLight : docco}\n />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>No cell selected</div>\n )}\n </div>\n </div>\n\n {/* Resizer for top pane */}\n <div\n onMouseDown={startDrag}\n style={{\n height: '6px',\n backgroundColor: '#dee2e6',\n cursor: 'row-resize',\n transition: 'background-color 0.2s',\n zIndex: 10,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#adb5bd';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#dee2e6';\n }}\n />\n\n {/* Sheet tabs */}\n <div\n style={{\n display: 'flex',\n borderBottom: '1px solid #dee2e6',\n borderTop: '1px solid #dee2e6',\n backgroundColor: '#f8f9fa',\n }}\n >\n {sheets.map((sheet) => (\n <div\n key={sheet.id}\n onClick={() => setActiveTabId(sheet.id)}\n style={{\n padding: '8px 16px',\n cursor: 'pointer',\n fontWeight: 'bold',\n borderBottom: activeTabId === sheet.id ? '2px solid #0d6efd' : '2px solid transparent',\n color: activeTabId === sheet.id ? '#0d6efd' : '#495057',\n }}\n >\n {sheet.name} (ID: {sheet.id})\n </div>\n ))}\n {sheets.length === 0 && <div style={{ padding: '8px 16px', color: '#6c757d' }}>No sheets detected</div>}\n </div>\n\n {/* Bottom pane: Sheet Data | Store Data */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'row',\n height: `${bottomHeight}px`,\n backgroundColor: '#282c34',\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n flex: 1,\n borderRight: '1px solid #3a3a3a',\n overflow: 'auto',\n position: 'relative',\n backgroundColor: '#282c34',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#21252b',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #3a3a3a',\n color: '#abb2bf',\n }}\n >\n Sheet Data\n </div>\n {activeTableData ? (\n <JsonCode data={activeTableData} replacer={baseReplacer} theme={tomorrowNight} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>Sheet instance not found</div>\n )}\n </div>\n\n <div\n style={{\n flex: 1,\n overflow: 'auto',\n backgroundColor: '#282c34',\n position: 'relative',\n }}\n >\n <div\n style={{\n position: 'sticky',\n top: 0,\n background: '#21252b',\n zIndex: 1,\n padding: '8px 12px',\n fontWeight: 'bold',\n borderBottom: '2px solid #3a3a3a',\n color: '#abb2bf',\n }}\n >\n Store Data\n </div>\n {activeStoreData ? (\n <JsonCode data={activeStoreData} replacer={jsonReplacer} theme={solarizedDark} />\n ) : (\n <div style={{ fontStyle: 'italic', color: '#6c757d', padding: '12px' }}>Store state not found</div>\n )}\n </div>\n </div>\n\n {/* Resizer for bottom pane */}\n <div\n onMouseDown={startDragBottom}\n style={{\n height: '6px',\n backgroundColor: '#dee2e6',\n cursor: 'row-resize',\n transition: 'background-color 0.2s',\n zIndex: 10,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#adb5bd';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#dee2e6';\n }}\n />\n </div>\n );\n};\n"],"names":["SyntaxHighlighter","jsonLang","ss","key","value","JsonCode","data","replacer","theme","code","jsx","Debugger","book","intervalMs","registry","snapshot","setSnapshot","useState","activeTabId","setActiveTabId","topHeight","setTopHeight","bottomHeight","setBottomHeight","formulaView","setFormulaView","useEffect","savedTop","savedBottom","savedFormula","updateSnapshot","choosingAddress","choosingSheetId","editingAddress","editingSheetId","ready","sheetIdsByName","sheetHead","cellHead","paletteBySheetName","solvedCaches","copyingSheetId","copyingZone","cutting","historyIndex","historyLimit","histories","asyncPending","asyncInflight","intervalId","sheets","name","id","a","b","activeStoreData","activeTableData","registryCellData","registrySystemData","registryCellAddress","registryCellSheetName","registryFormulaExpr","registryFormulaTokens","contextsBySheetId","context","sheet","choosingContext","entry","store","idMatrix","isTopHeaderSelecting","isLeftHeaderSelecting","pos","a2p","x2c","text","lexer","Lexer","FormulaParser","e","baseReplacer","jsonReplacer","Sheet","startDrag","startY","startHeight","onMouseMove","moveEvent","h","onMouseUp","startDragBottom","jsxs","atomOneLight","atelierSeasideLight","atelierHeathLight","next","solarizedLight","docco","tomorrowNight","solarizedDark"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gridsheet/react-dev",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.5",
|
|
4
4
|
"description": "Development tools for GridSheet",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"homepage": "https://gridsheet.walkframe.com/",
|
|
35
35
|
"packageManager": "pnpm@10.6.5",
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@gridsheet/react-core": ">=3.0.0-rc.
|
|
37
|
+
"@gridsheet/react-core": ">=3.0.0-rc.5",
|
|
38
38
|
"react": ">=16.9.0",
|
|
39
39
|
"react-dom": ">=16.9.0"
|
|
40
40
|
},
|