@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 CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  Development tools for [GridSheet](https://github.com/walkframe/gridsheet).
4
4
 
5
- ## Overview
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 `hub` object (created via `useHub` from `@gridsheet/react-core`) to the `Debugger` component.
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, useHub } from '@gridsheet/react-core';
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 hub = useHub();
25
+ const book = useBook();
28
26
  return (
29
27
  <>
30
- <GridSheet hub={hub} />
31
- <Debugger hub={hub} />
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 | Default | Description |
42
- |--------------|-----------|---------|-------------------------------------------------------|
43
- | `hub` | `HubType` | — | The hub object connected to a `GridSheet` instance. |
44
- | `intervalMs` | `number` | `500` | Polling interval (ms) for refreshing the state view. |
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 jsonLang from "react-syntax-highlighter/dist/esm/languages/hljs/json";
6
- import atomOneLight from "react-syntax-highlighter/dist/esm/styles/hljs/atom-one-light";
7
- import tomorrowNight from "react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night";
8
- import solarizedDark from "react-syntax-highlighter/dist/esm/styles/hljs/solarized-dark";
9
- import solarizedLight from "react-syntax-highlighter/dist/esm/styles/hljs/solarized-light";
10
- import docco from "react-syntax-highlighter/dist/esm/styles/hljs/docco";
11
- import atelierSeasideLight from "react-syntax-highlighter/dist/esm/styles/hljs/atelier-seaside-light";
12
- import atelierHeathLight from "react-syntax-highlighter/dist/esm/styles/hljs/atelier-heath-light";
13
- Light.registerLanguage("json", jsonLang);
14
- const ss = {
15
- get: (key) => typeof window !== "undefined" ? sessionStorage.getItem(key) : null,
16
- set: (key, value) => {
17
- if (typeof window !== "undefined") {
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
- const JsonCode = ({
23
- data,
24
- replacer,
25
- theme
19
+ }, b = ({
20
+ data: c,
21
+ replacer: h,
22
+ theme: o
26
23
  }) => {
27
- const code = JSON.stringify(data, replacer, 2) ?? "";
28
- return /* @__PURE__ */ jsx(
29
- Light,
24
+ const y = JSON.stringify(c, h, 2) ?? "";
25
+ return /* @__PURE__ */ r(
26
+ Y,
30
27
  {
31
28
  language: "json",
32
- style: theme,
33
- showLineNumbers: true,
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: code
33
+ children: y
37
34
  }
38
35
  );
39
- };
40
- const Debugger = ({ book, intervalMs = 500 }) => {
41
- const { registry } = book;
42
- const [snapshot, setSnapshot] = useState({});
43
- const [activeTabId, setActiveTabId] = useState(null);
44
- const [topHeight, setTopHeight] = useState(200);
45
- const [bottomHeight, setBottomHeight] = useState(200);
46
- const [formulaView, setFormulaView] = useState("expressions");
47
- useEffect(() => {
48
- const savedTop = ss.get("gs-debugger-top-height");
49
- if (savedTop) {
50
- setTopHeight(Number(savedTop));
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
- } = registry;
86
- setSnapshot({
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
- updateSnapshot();
108
- const intervalId = setInterval(updateSnapshot, intervalMs);
109
- return () => clearInterval(intervalId);
110
- }, [registry, intervalMs]);
111
- const sheets = snapshot.sheetIdsByName ? Object.entries(snapshot.sheetIdsByName).map(([name, id]) => ({ id, name })).sort((a, b) => a.id - b.id) : [];
112
- useEffect(() => {
113
- if (activeTabId === null && sheets.length > 0) {
114
- setActiveTabId(sheets[0].id);
115
- }
116
- }, [sheets.length, activeTabId]);
117
- let activeStoreData = null;
118
- let activeTableData = null;
119
- let registryCellData = null;
120
- let registrySystemData = null;
121
- let registryCellAddress = (registry == null ? void 0 : registry.choosingAddress) || "";
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 (registry && registry.choosingSheetId != null) {
137
- const { contextsBySheetId } = registry;
138
- const choosingContext = contextsBySheetId[registry.choosingSheetId];
139
- if (registry.sheetIdsByName) {
140
- const entry = Object.entries(registry.sheetIdsByName).find(([, id]) => id === registry.choosingSheetId);
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 (choosingContext) {
146
- const sheet = choosingContext.store.sheetReactive.current;
147
- const store = choosingContext.store;
148
- if (sheet) {
149
- const rawTable = sheet.__raw__ || sheet;
150
- const idMatrix = rawTable.idMatrix;
151
- const isTopHeaderSelecting = store.topHeaderSelecting;
152
- const isLeftHeaderSelecting = store.leftHeaderSelecting;
153
- const pos = isTopHeaderSelecting ? { y: 0, x: store.choosing.x } : isLeftHeaderSelecting ? { y: store.choosing.y, x: 0 } : a2p(registry.choosingAddress);
154
- if (isTopHeaderSelecting) {
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 lexer = new Lexer(text.substring(1));
168
- lexer.tokenize();
169
- registryFormulaTokens = lexer.tokens;
170
- const parser = new FormulaParser(lexer.tokens);
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 baseReplacer = (key, value) => {
182
- if (key === "registry" || key === "__raw__" || value && typeof value === "object" && "current" in value && Object.keys(value).length === 1) {
183
- return void 0;
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 startY = e.clientY;
202
- const startHeight = topHeight;
203
- const onMouseMove = (moveEvent) => {
204
- const h = Math.max(100, startHeight + moveEvent.clientY - startY);
205
- setTopHeight(h);
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", onMouseMove);
213
- document.addEventListener("mouseup", onMouseUp);
214
- };
215
- const startDragBottom = (e) => {
145
+ document.addEventListener("mousemove", i), document.addEventListener("mouseup", l);
146
+ }, J = (e) => {
216
147
  e.preventDefault();
217
- const startY = e.clientY;
218
- const startHeight = bottomHeight;
219
- const onMouseMove = (moveEvent) => {
220
- const h = Math.max(100, startHeight + moveEvent.clientY - startY);
221
- setBottomHeight(h);
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", onMouseMove);
229
- document.addEventListener("mouseup", onMouseUp);
154
+ document.addEventListener("mousemove", i), document.addEventListener("mouseup", l);
230
155
  };
231
- return /* @__PURE__ */ jsxs(
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__ */ jsxs(
170
+ /* @__PURE__ */ s(
246
171
  "div",
247
172
  {
248
173
  style: {
249
174
  display: "flex",
250
175
  flexDirection: "row",
251
- height: `${topHeight}px`,
176
+ height: `${H}px`,
252
177
  overflow: "hidden"
253
178
  },
254
179
  children: [
255
- /* @__PURE__ */ jsxs(
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__ */ jsx(
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__ */ jsx(JsonCode, { data: snapshot, replacer: jsonReplacer, theme: atomOneLight })
206
+ /* @__PURE__ */ r(b, { data: y, replacer: A, theme: ie })
282
207
  ]
283
208
  }
284
209
  ),
285
- /* @__PURE__ */ jsxs(
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__ */ jsxs(
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
- registryCellSheetName && `'${registryCellSheetName}'!`,
311
- registryCellAddress
235
+ S && `'${S}'!`,
236
+ C
312
237
  ]
313
238
  }
314
239
  ),
315
- registryCellData ? /* @__PURE__ */ jsx(JsonCode, { data: registryCellData, replacer: baseReplacer, theme: atelierSeasideLight }) : /* @__PURE__ */ jsx("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No cell data" })
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__ */ jsxs(
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__ */ jsxs(
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
- registryCellSheetName && `'${registryCellSheetName}'!`,
345
- registryCellAddress
269
+ S && `'${S}'!`,
270
+ C
346
271
  ]
347
272
  }
348
273
  ),
349
- registrySystemData ? /* @__PURE__ */ jsx(JsonCode, { data: registrySystemData, replacer: baseReplacer, theme: atelierHeathLight }) : /* @__PURE__ */ jsx("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No system data" })
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__ */ jsxs(
278
+ /* @__PURE__ */ s(
354
279
  "div",
355
280
  {
356
281
  style: {
357
282
  flex: 1,
358
283
  overflow: "auto",
359
- backgroundColor: formulaView === "expressions" ? "#fffbf0" : "#f5f0ff",
284
+ backgroundColor: p === "expressions" ? "#fffbf0" : "#f5f0ff",
360
285
  position: "relative"
361
286
  },
362
287
  children: [
363
- /* @__PURE__ */ jsxs(
288
+ /* @__PURE__ */ s(
364
289
  "div",
365
290
  {
366
291
  style: {
367
292
  position: "sticky",
368
293
  top: 0,
369
- background: formulaView === "expressions" ? "#fffbf0" : "#f5f0ff",
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__ */ jsx("span", { children: formulaView === "expressions" ? "Formula Expressions" : "Formula Tokens" }),
380
- /* @__PURE__ */ jsx(
304
+ /* @__PURE__ */ r("span", { children: p === "expressions" ? "Formula Expressions" : "Formula Tokens" }),
305
+ /* @__PURE__ */ r(
381
306
  "button",
382
307
  {
383
308
  onClick: () => {
384
- const next = formulaView === "expressions" ? "tokens" : "expressions";
385
- setFormulaView(next);
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: formulaView === "expressions" ? "→ Tokens" : "→ Expressions"
321
+ children: p === "expressions" ? "→ Tokens" : "→ Expressions"
398
322
  }
399
323
  )
400
324
  ]
401
325
  }
402
326
  ),
403
- registryCellData ? /* @__PURE__ */ jsx(
404
- JsonCode,
327
+ g ? /* @__PURE__ */ r(
328
+ b,
405
329
  {
406
- data: formulaView === "expressions" ? registryFormulaExpr : registryFormulaTokens,
407
- replacer: baseReplacer,
408
- theme: formulaView === "expressions" ? solarizedLight : docco
330
+ data: p === "expressions" ? M : _,
331
+ replacer: k,
332
+ theme: p === "expressions" ? le : ae
409
333
  }
410
- ) : /* @__PURE__ */ jsx("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "No cell selected" })
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__ */ jsx(
341
+ /* @__PURE__ */ r(
418
342
  "div",
419
343
  {
420
- onMouseDown: startDrag,
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__ */ jsxs(
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
- sheets.map((sheet) => /* @__PURE__ */ jsxs(
370
+ v.map((e) => /* @__PURE__ */ s(
447
371
  "div",
448
372
  {
449
- onClick: () => setActiveTabId(sheet.id),
373
+ onClick: () => E(e.id),
450
374
  style: {
451
375
  padding: "8px 16px",
452
376
  cursor: "pointer",
453
377
  fontWeight: "bold",
454
- borderBottom: activeTabId === sheet.id ? "2px solid #0d6efd" : "2px solid transparent",
455
- color: activeTabId === sheet.id ? "#0d6efd" : "#495057"
378
+ borderBottom: u === e.id ? "2px solid #0d6efd" : "2px solid transparent",
379
+ color: u === e.id ? "#0d6efd" : "#495057"
456
380
  },
457
381
  children: [
458
- sheet.name,
382
+ e.name,
459
383
  " (ID: ",
460
- sheet.id,
384
+ e.id,
461
385
  ")"
462
386
  ]
463
387
  },
464
- sheet.id
388
+ e.id
465
389
  )),
466
- sheets.length === 0 && /* @__PURE__ */ jsx("div", { style: { padding: "8px 16px", color: "#6c757d" }, children: "No sheets detected" })
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__ */ jsxs(
394
+ /* @__PURE__ */ s(
471
395
  "div",
472
396
  {
473
397
  style: {
474
398
  display: "flex",
475
399
  flexDirection: "row",
476
- height: `${bottomHeight}px`,
400
+ height: `${j}px`,
477
401
  backgroundColor: "#282c34",
478
402
  overflow: "hidden"
479
403
  },
480
404
  children: [
481
- /* @__PURE__ */ jsxs(
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__ */ jsx(
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
- activeTableData ? /* @__PURE__ */ jsx(JsonCode, { data: activeTableData, replacer: baseReplacer, theme: tomorrowNight }) : /* @__PURE__ */ jsx("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "Sheet instance not found" })
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__ */ jsxs(
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__ */ jsx(
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
- activeStoreData ? /* @__PURE__ */ jsx(JsonCode, { data: activeStoreData, replacer: jsonReplacer, theme: solarizedDark }) : /* @__PURE__ */ jsx("div", { style: { fontStyle: "italic", color: "#6c757d", padding: "12px" }, children: "Store state not found" })
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__ */ jsx(
469
+ /* @__PURE__ */ r(
546
470
  "div",
547
471
  {
548
- onMouseDown: startDragBottom,
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":";;;;;;;;;;;;AAcAA,MAAkB,iBAAiB,QAAQ,QAAQ;AAEnD,MAAM,KAAK;AAAA,EACT,KAAK,CAAC,QAAiB,OAAO,WAAW,cAAc,eAAe,QAAQ,GAAG,IAAI;AAAA,EACrF,KAAK,CAAC,KAAa,UAAkB;AAC/B,QAAA,OAAO,WAAW,aAAa;AAClB,qBAAA,QAAQ,KAAK,KAAK;AAAA,IAAA;AAAA,EACnC;AAEJ;AAIA,MAAM,WAA6F,CAAC;AAAA,EAClG;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,OAAO,KAAK,UAAU,MAAM,UAAU,CAAC,KAAK;AAEhD,SAAA;AAAA,IAACA;AAAAA,IAAA;AAAA,MACC,UAAS;AAAA,MACT,OAAO;AAAA,MACP,iBAAe;AAAA,MACf,aAAa,EAAE,QAAQ,GAAG,UAAU,QAAQ,WAAW,QAAQ,cAAc,GAAG,YAAY,MAAM;AAAA,MAClG,cAAc,EAAE,OAAO,EAAE,SAAS,SAAS,YAAY,OAAO,UAAU,SAAS;AAAA,MAEhF,UAAA;AAAA,IAAA;AAAA,EACH;AAEJ;AAOO,MAAM,WAAoC,CAAC,EAAE,MAAM,aAAa,UAAU;AACzE,QAAA,EAAE,aAAa;AACrB,QAAM,CAAC,UAAU,WAAW,IAAI,SAAc,CAAA,CAAE;AAChD,QAAM,CAAC,aAAa,cAAc,IAAI,SAAwB,IAAI;AAClE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAiB,GAAG;AACtD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAiB,GAAG;AAC5D,QAAM,CAAC,aAAa,cAAc,IAAI,SAAmC,aAAa;AAEtF,YAAU,MAAM;AACR,UAAA,WAAW,GAAG,IAAI,wBAAwB;AAChD,QAAI,UAAU;AACC,mBAAA,OAAO,QAAQ,CAAC;AAAA,IAAA;AAEzB,UAAA,cAAc,GAAG,IAAI,2BAA2B;AACtD,QAAI,aAAa;AACC,sBAAA,OAAO,WAAW,CAAC;AAAA,IAAA;AAE/B,UAAA,eAAe,GAAG,IAAI,0BAA0B;AACtD,QAAI,cAAc;AAChB,qBAAe,YAAY;AAAA,IAAA;AAAA,EAE/B,GAAG,EAAE;AAEL,YAAU,MAAM;AACd,UAAM,iBAAiB,MAAM;AAC3B,UAAI,CAAC,UAAU;AACb;AAAA,MAAA;AAGI,YAAA;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,IACE;AAEQ,kBAAA;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,CACD;AAAA,IACH;AAEe,mBAAA;AAET,UAAA,aAAa,YAAY,gBAAgB,UAAU;AAClD,WAAA,MAAM,cAAc,UAAU;AAAA,EAAA,GACpC,CAAC,UAAU,UAAU,CAAC;AAEzB,QAAM,SAAS,SAAS,iBACpB,OAAO,QAAQ,SAAS,cAAc,EACnC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAkB,KAAK,EAAE,EAChD,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE,IAC7B,CAAC;AAEL,YAAU,MAAM;AACd,QAAI,gBAAgB,QAAQ,OAAO,SAAS,GAAG;AAC9B,qBAAA,OAAO,CAAC,EAAE,EAAE;AAAA,IAAA;AAAA,EAE5B,GAAA,CAAC,OAAO,QAAQ,WAAW,CAAC;AAE/B,MAAI,kBAAkB;AACtB,MAAI,kBAAkB;AAGtB,MAAI,mBAAmB;AACvB,MAAI,qBAAqB;AACrB,MAAA,uBAAsB,qCAAU,oBAAmB;AACvD,MAAI,wBAAwB;AAC5B,MAAI,sBAAsB;AAC1B,MAAI,wBAAwB;AAExB,MAAA,YAAY,gBAAgB,MAAM;AAC9B,UAAA,EAAE,sBAAsB;AACxB,UAAA,UAAU,kBAAkB,WAAW;AAE7C,QAAI,SAAS;AACX,wBAAkB,QAAQ;AAEpB,YAAA,QAAQ,QAAQ,MAAM,cAAc;AAC1C,UAAI,OAAO;AACS,0BAAA;AAAA,MAAA;AAAA,IACpB;AAAA,EACF;AAIE,MAAA,YAAY,SAAS,mBAAmB,MAAM;AAC1C,UAAA,EAAE,sBAAsB;AACxB,UAAA,kBAAkB,kBAAkB,SAAS,eAAe;AAGlE,QAAI,SAAS,gBAAgB;AAC3B,YAAM,QAAQ,OAAO,QAAQ,SAAS,cAAc,EAAE,KAAK,CAAC,CAAG,EAAA,EAAE,MAAM,OAAO,SAAS,eAAe;AACtG,UAAI,OAAO;AACT,gCAAwB,MAAM,CAAC;AAAA,MAAA;AAAA,IACjC;AAGF,QAAI,iBAAiB;AACb,YAAA,QAAQ,gBAAgB,MAAM,cAAc;AAClD,YAAM,QAAQ,gBAAgB;AAC9B,UAAI,OAAO;AACH,cAAA,WAAY,MAAc,WAAW;AAC3C,cAAM,WAAW,SAAS;AAG1B,cAAM,uBAAuB,MAAM;AACnC,cAAM,wBAAwB,MAAM;AAC9B,cAAA,MAAM,uBACR,EAAE,GAAG,GAAG,GAAG,MAAM,SAAS,MAC1B,wBACE,EAAE,GAAG,MAAM,SAAS,GAAG,GAAG,MAC1B,IAAI,SAAS,eAAe;AAElC,YAAI,sBAAsB;AACxB,gCAAsB,UAAU,IAAI,MAAM,SAAS,CAAC,CAAC;AAAA,mBAC5C,uBAAuB;AACV,gCAAA,UAAU,MAAM,SAAS,CAAC;AAAA,QAAA;AAGlD,YAAI,OAAO,SAAS,IAAI,CAAC,GAAG;AAC1B,gBAAM,KAAK,SAAS,IAAI,CAAC,EAAE,IAAI,CAAC;AAChC,cAAI,IAAI;AACa,+BAAA,SAAS,KAAK,EAAE;AACd,iCAAA,SAAS,QAAQ,EAAE,KAAK;AAG7C,kBAAM,OAAO,qDAAkB;AAC/B,gBAAI,OAAO,SAAS,YAAY,KAAK,WAAW,GAAG,GAAG;AAChD,kBAAA;AACF,sBAAM,QAAQ,IAAI,MAAM,KAAK,UAAU,CAAC,CAAC;AACzC,sBAAM,SAAS;AACf,wCAAwB,MAAM;AAC9B,sBAAM,SAAS,IAAI,cAAc,MAAM,MAAM;AAC7C,sCAAsB,OAAO,MAAM;AAAA,uBAC5B,GAAG;AACV,sCAAsB,EAAE,OAAO,OAAO,CAAC,EAAE;AAAA,cAAA;AAAA,YAC3C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGI,QAAA,eAAe,CAAC,KAAa,UAAe;AAEhD,QACE,QAAQ,cACR,QAAQ,aACP,SAAS,OAAO,UAAU,YAAY,aAAa,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW,GAC3F;AACO,aAAA;AAAA,IAAA;AAET,QAAI,iBAAiB,KAAK;AACxB,aAAO,OAAO,YAAY,MAAM,QAAA,CAAS;AAAA,IAAA;AAE3C,QAAI,iBAAiB,KAAK;AACjB,aAAA,MAAM,KAAK,KAAK;AAAA,IAAA;AAElB,WAAA;AAAA,EACT;AAGM,QAAA,eAAe,CAAC,KAAa,UAAe;AAChD,QAAI,iBAAiB,OAAO;AAC1B,aAAO,MAAM,SAAS;AAAA,IAAA;AAEjB,WAAA,aAAa,KAAK,KAAK;AAAA,EAChC;AAEM,QAAA,YAAY,CAAC,MAAwB;AACzC,MAAE,eAAe;AACjB,UAAM,SAAS,EAAE;AACjB,UAAM,cAAc;AACd,UAAA,cAAc,CAAC,cAA0B;AAC7C,YAAM,IAAI,KAAK,IAAI,KAAK,cAAc,UAAU,UAAU,MAAM;AAChE,mBAAa,CAAC;AACd,SAAG,IAAI,0BAA0B,OAAO,CAAC,CAAC;AAAA,IAC5C;AACA,UAAM,YAAY,MAAM;AACb,eAAA,oBAAoB,aAAa,WAAW;AAC5C,eAAA,oBAAoB,WAAW,SAAS;AAAA,IACnD;AACS,aAAA,iBAAiB,aAAa,WAAW;AACzC,aAAA,iBAAiB,WAAW,SAAS;AAAA,EAChD;AAEM,QAAA,kBAAkB,CAAC,MAAwB;AAC/C,MAAE,eAAe;AACjB,UAAM,SAAS,EAAE;AACjB,UAAM,cAAc;AACd,UAAA,cAAc,CAAC,cAA0B;AAC7C,YAAM,IAAI,KAAK,IAAI,KAAK,cAAc,UAAU,UAAU,MAAM;AAChE,sBAAgB,CAAC;AACjB,SAAG,IAAI,6BAA6B,OAAO,CAAC,CAAC;AAAA,IAC/C;AACA,UAAM,YAAY,MAAM;AACb,eAAA,oBAAoB,aAAa,WAAW;AAC5C,eAAA,oBAAoB,WAAW,SAAS;AAAA,IACnD;AACS,aAAA,iBAAiB,aAAa,WAAW;AACzC,aAAA,iBAAiB,WAAW,SAAS;AAAA,EAChD;AAGE,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,UAAU;AAAA,MACZ;AAAA,MAGA,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,eAAe;AAAA,cACf,QAAQ,GAAG,SAAS;AAAA,cACpB,UAAU;AAAA,YACZ;AAAA,YAGA,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,aAAa;AAAA,oBACb,iBAAiB;AAAA,oBACjB,UAAU;AAAA,oBACV,UAAU;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,wBAChB;AAAA,wBACD,UAAA;AAAA,sBAAA;AAAA,oBAED;AAAA,wCACC,UAAS,EAAA,MAAM,UAAU,UAAU,cAAc,OAAO,aAAc,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACzE;AAAA,cAGA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,aAAa;AAAA,oBACb,UAAU;AAAA,oBACV,iBAAiB;AAAA,oBACjB,UAAU;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,wBAChB;AAAA,wBACD,UAAA;AAAA,0BAAA;AAAA,0BACQ,yBAAyB,IAAI,qBAAqB;AAAA,0BACxD;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACH;AAAA,oBACC,uCACE,UAAS,EAAA,MAAM,kBAAkB,UAAU,cAAc,OAAO,oBAAqB,CAAA,wBAErF,OAAI,EAAA,OAAO,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,UAAU,UAAY,eAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAExF;AAAA,cAGA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,aAAa;AAAA,oBACb,UAAU;AAAA,oBACV,iBAAiB;AAAA,oBACjB,UAAU;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,wBAChB;AAAA,wBACD,UAAA;AAAA,0BAAA;AAAA,0BACU,yBAAyB,IAAI,qBAAqB;AAAA,0BAC1D;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACH;AAAA,oBACC,yCACE,UAAS,EAAA,MAAM,oBAAoB,UAAU,cAAc,OAAO,kBAAmB,CAAA,wBAErF,OAAI,EAAA,OAAO,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,UAAU,UAAc,iBAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAE1F;AAAA,cAGA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV,iBAAiB,gBAAgB,gBAAgB,YAAY;AAAA,oBAC7D,UAAU;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY,gBAAgB,gBAAgB,YAAY;AAAA,0BACxD,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,0BACd,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,KAAK;AAAA,wBACP;AAAA,wBAEA,UAAA;AAAA,0BAAA,oBAAC,QAAM,EAAA,UAAA,gBAAgB,gBAAgB,wBAAwB,kBAAiB;AAAA,0BAChF;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,SAAS,MAAM;AACP,sCAAA,OAAO,gBAAgB,gBAAgB,WAAW;AACxD,+CAAe,IAAI;AAChB,mCAAA,IAAI,4BAA4B,IAAI;AAAA,8BACzC;AAAA,8BACA,OAAO;AAAA,gCACL,YAAY;AAAA,gCACZ,UAAU;AAAA,gCACV,SAAS;AAAA,gCACT,QAAQ;AAAA,gCACR,QAAQ;AAAA,gCACR,cAAc;AAAA,gCACd,YAAY;AAAA,8BACd;AAAA,8BAEC,UAAA,gBAAgB,gBAAgB,aAAa;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAChD;AAAA,sBAAA;AAAA,oBACF;AAAA,oBACC,mBACC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAM,gBAAgB,gBAAgB,sBAAsB;AAAA,wBAC5D,UAAU;AAAA,wBACV,OAAO,gBAAgB,gBAAgB,iBAAiB;AAAA,sBAAA;AAAA,oBAG1D,IAAA,oBAAC,OAAI,EAAA,OAAO,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,OAAO,GAAG,UAAgB,mBAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAE5F;AAAA,UAAA;AAAA,QACF;AAAA,QAGA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAa;AAAA,YACb,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,iBAAiB;AAAA,cACjB,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,QAAQ;AAAA,YACV;AAAA,YACA,cAAc,CAAC,MAAM;AACjB,gBAAA,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YACA,cAAc,CAAC,MAAM;AACjB,gBAAA,cAAc,MAAM,kBAAkB;AAAA,YAAA;AAAA,UAC1C;AAAA,QACF;AAAA,QAGA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,cAAc;AAAA,cACd,WAAW;AAAA,cACX,iBAAiB;AAAA,YACnB;AAAA,YAEC,UAAA;AAAA,cAAO,OAAA,IAAI,CAAC,UACX;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,SAAS,MAAM,eAAe,MAAM,EAAE;AAAA,kBACtC,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,QAAQ;AAAA,oBACR,YAAY;AAAA,oBACZ,cAAc,gBAAgB,MAAM,KAAK,sBAAsB;AAAA,oBAC/D,OAAO,gBAAgB,MAAM,KAAK,YAAY;AAAA,kBAChD;AAAA,kBAEC,UAAA;AAAA,oBAAM,MAAA;AAAA,oBAAK;AAAA,oBAAO,MAAM;AAAA,oBAAG;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAVvB,MAAM;AAAA,cAAA,CAYd;AAAA,cACA,OAAO,WAAW,KAAK,oBAAC,OAAI,EAAA,OAAO,EAAE,SAAS,YAAY,OAAO,UAAU,GAAG,UAAkB,qBAAA,CAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACnG;AAAA,QAGA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,SAAS;AAAA,cACT,eAAe;AAAA,cACf,QAAQ,GAAG,YAAY;AAAA,cACvB,iBAAiB;AAAA,cACjB,UAAU;AAAA,YACZ;AAAA,YAEA,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,aAAa;AAAA,oBACb,UAAU;AAAA,oBACV,UAAU;AAAA,oBACV,iBAAiB;AAAA,kBACnB;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,0BACd,OAAO;AAAA,wBACT;AAAA,wBACD,UAAA;AAAA,sBAAA;AAAA,oBAED;AAAA,oBACC,sCACE,UAAS,EAAA,MAAM,iBAAiB,UAAU,cAAc,OAAO,cAAe,CAAA,wBAE9E,OAAI,EAAA,OAAO,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,UAAU,UAAwB,2BAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEpG;AAAA,cAEA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,oBACL,MAAM;AAAA,oBACN,UAAU;AAAA,oBACV,iBAAiB;AAAA,oBACjB,UAAU;AAAA,kBACZ;AAAA,kBAEA,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,YAAY;AAAA,0BACZ,QAAQ;AAAA,0BACR,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,cAAc;AAAA,0BACd,OAAO;AAAA,wBACT;AAAA,wBACD,UAAA;AAAA,sBAAA;AAAA,oBAED;AAAA,oBACC,sCACE,UAAS,EAAA,MAAM,iBAAiB,UAAU,cAAc,OAAO,cAAe,CAAA,wBAE9E,OAAI,EAAA,OAAO,EAAE,WAAW,UAAU,OAAO,WAAW,SAAS,UAAU,UAAqB,wBAAA,CAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEjG;AAAA,UAAA;AAAA,QACF;AAAA,QAGA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,aAAa;AAAA,YACb,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,iBAAiB;AAAA,cACjB,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,QAAQ;AAAA,YACV;AAAA,YACA,cAAc,CAAC,MAAM;AACjB,gBAAA,cAAc,MAAM,kBAAkB;AAAA,YAC1C;AAAA,YACA,cAAc,CAAC,MAAM;AACjB,gBAAA,cAAc,MAAM,kBAAkB;AAAA,YAAA;AAAA,UAC1C;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF;AAEJ;"}
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.2",
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.2",
37
+ "@gridsheet/react-core": ">=3.0.0-rc.5",
38
38
  "react": ">=16.9.0",
39
39
  "react-dom": ">=16.9.0"
40
40
  },