@graphrefly/graphrefly 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/README.md +8 -0
  2. package/dist/ai-CaR_912Q.d.cts +1033 -0
  3. package/dist/ai-WlRltJV7.d.ts +1033 -0
  4. package/dist/audit-ClmqGOCx.d.cts +245 -0
  5. package/dist/audit-DRlSzBu9.d.ts +245 -0
  6. package/dist/{chunk-QOWVNWOC.js → chunk-3ZWCKRHX.js} +27 -25
  7. package/dist/{chunk-QOWVNWOC.js.map → chunk-3ZWCKRHX.js.map} +1 -1
  8. package/dist/chunk-APFNLIRG.js +62 -0
  9. package/dist/chunk-APFNLIRG.js.map +1 -0
  10. package/dist/chunk-AT5LKYNL.js +395 -0
  11. package/dist/chunk-AT5LKYNL.js.map +1 -0
  12. package/dist/{chunk-IAHGTNOZ.js → chunk-BQ6RQQFF.js} +351 -2095
  13. package/dist/chunk-BQ6RQQFF.js.map +1 -0
  14. package/dist/{chunk-L2GLW2U7.js → chunk-BVZYTZ5H.js} +9 -103
  15. package/dist/chunk-BVZYTZ5H.js.map +1 -0
  16. package/dist/{chunk-EVR6UFUV.js → chunk-DST5DKZS.js} +19 -15
  17. package/dist/{chunk-EVR6UFUV.js.map → chunk-DST5DKZS.js.map} +1 -1
  18. package/dist/{chunk-TKE3JGOH.js → chunk-GTE6PWRZ.js} +5 -692
  19. package/dist/chunk-GTE6PWRZ.js.map +1 -0
  20. package/dist/chunk-HXZEYDUR.js +94 -0
  21. package/dist/chunk-HXZEYDUR.js.map +1 -0
  22. package/dist/chunk-J22W6HV3.js +107 -0
  23. package/dist/chunk-J22W6HV3.js.map +1 -0
  24. package/dist/{chunk-PY4XCDLR.js → chunk-J2VBW3DZ.js} +6 -95
  25. package/dist/chunk-J2VBW3DZ.js.map +1 -0
  26. package/dist/{chunk-HWPIFSW2.js → chunk-JSCT3CR4.js} +6 -4
  27. package/dist/{chunk-HWPIFSW2.js.map → chunk-JSCT3CR4.js.map} +1 -1
  28. package/dist/chunk-JWBCY4NC.js +330 -0
  29. package/dist/chunk-JWBCY4NC.js.map +1 -0
  30. package/dist/chunk-K2AUJHVP.js +2251 -0
  31. package/dist/chunk-K2AUJHVP.js.map +1 -0
  32. package/dist/chunk-MJ2NKQQL.js +119 -0
  33. package/dist/chunk-MJ2NKQQL.js.map +1 -0
  34. package/dist/chunk-N6UR7YVY.js +198 -0
  35. package/dist/chunk-N6UR7YVY.js.map +1 -0
  36. package/dist/chunk-NC6S43JJ.js +456 -0
  37. package/dist/chunk-NC6S43JJ.js.map +1 -0
  38. package/dist/chunk-OFVJBJXR.js +98 -0
  39. package/dist/chunk-OFVJBJXR.js.map +1 -0
  40. package/dist/chunk-OHISZPOJ.js +97 -0
  41. package/dist/chunk-OHISZPOJ.js.map +1 -0
  42. package/dist/chunk-OU5CQKNW.js +102 -0
  43. package/dist/chunk-OU5CQKNW.js.map +1 -0
  44. package/dist/{chunk-XOFWRC73.js → chunk-PF7GRZMW.js} +316 -21
  45. package/dist/chunk-PF7GRZMW.js.map +1 -0
  46. package/dist/{chunk-5DJTTKX3.js → chunk-PHOUUNK7.js} +74 -111
  47. package/dist/chunk-PHOUUNK7.js.map +1 -0
  48. package/dist/chunk-RNHBMHKA.js +1665 -0
  49. package/dist/chunk-RNHBMHKA.js.map +1 -0
  50. package/dist/chunk-SX52TAR4.js +110 -0
  51. package/dist/chunk-SX52TAR4.js.map +1 -0
  52. package/dist/{chunk-H4RVA4VE.js → chunk-VYPWMZ6H.js} +2 -2
  53. package/dist/chunk-WBZOVTYK.js +171 -0
  54. package/dist/chunk-WBZOVTYK.js.map +1 -0
  55. package/dist/chunk-WKNUIZOY.js +354 -0
  56. package/dist/chunk-WKNUIZOY.js.map +1 -0
  57. package/dist/chunk-X3VMZYBT.js +713 -0
  58. package/dist/chunk-X3VMZYBT.js.map +1 -0
  59. package/dist/chunk-X5R3GL6H.js +525 -0
  60. package/dist/chunk-X5R3GL6H.js.map +1 -0
  61. package/dist/chunk-XGPU467M.js +136 -0
  62. package/dist/chunk-XGPU467M.js.map +1 -0
  63. package/dist/compat/index.cjs +7656 -0
  64. package/dist/compat/index.cjs.map +1 -0
  65. package/dist/compat/index.d.cts +18 -0
  66. package/dist/compat/index.d.ts +18 -0
  67. package/dist/compat/index.js +50 -0
  68. package/dist/compat/index.js.map +1 -0
  69. package/dist/compat/jotai/index.cjs +2048 -0
  70. package/dist/compat/jotai/index.cjs.map +1 -0
  71. package/dist/compat/jotai/index.d.cts +2 -0
  72. package/dist/compat/jotai/index.d.ts +2 -0
  73. package/dist/compat/jotai/index.js +9 -0
  74. package/dist/compat/jotai/index.js.map +1 -0
  75. package/dist/compat/nanostores/index.cjs +2175 -0
  76. package/dist/compat/nanostores/index.cjs.map +1 -0
  77. package/dist/compat/nanostores/index.d.cts +2 -0
  78. package/dist/compat/nanostores/index.d.ts +2 -0
  79. package/dist/compat/nanostores/index.js +23 -0
  80. package/dist/compat/nanostores/index.js.map +1 -0
  81. package/dist/compat/nestjs/index.cjs +350 -16
  82. package/dist/compat/nestjs/index.cjs.map +1 -1
  83. package/dist/compat/nestjs/index.d.cts +6 -6
  84. package/dist/compat/nestjs/index.d.ts +6 -6
  85. package/dist/compat/nestjs/index.js +11 -9
  86. package/dist/compat/react/index.cjs +141 -0
  87. package/dist/compat/react/index.cjs.map +1 -0
  88. package/dist/compat/react/index.d.cts +2 -0
  89. package/dist/compat/react/index.d.ts +2 -0
  90. package/dist/compat/react/index.js +12 -0
  91. package/dist/compat/react/index.js.map +1 -0
  92. package/dist/compat/solid/index.cjs +128 -0
  93. package/dist/compat/solid/index.cjs.map +1 -0
  94. package/dist/compat/solid/index.d.cts +2 -0
  95. package/dist/compat/solid/index.d.ts +2 -0
  96. package/dist/compat/solid/index.js +12 -0
  97. package/dist/compat/solid/index.js.map +1 -0
  98. package/dist/compat/svelte/index.cjs +131 -0
  99. package/dist/compat/svelte/index.cjs.map +1 -0
  100. package/dist/compat/svelte/index.d.cts +2 -0
  101. package/dist/compat/svelte/index.d.ts +2 -0
  102. package/dist/compat/svelte/index.js +12 -0
  103. package/dist/compat/svelte/index.js.map +1 -0
  104. package/dist/compat/vue/index.cjs +146 -0
  105. package/dist/compat/vue/index.cjs.map +1 -0
  106. package/dist/compat/vue/index.d.cts +3 -0
  107. package/dist/compat/vue/index.d.ts +3 -0
  108. package/dist/compat/vue/index.js +12 -0
  109. package/dist/compat/vue/index.js.map +1 -0
  110. package/dist/compat/zustand/index.cjs +4931 -0
  111. package/dist/compat/zustand/index.cjs.map +1 -0
  112. package/dist/compat/zustand/index.d.cts +5 -0
  113. package/dist/compat/zustand/index.d.ts +5 -0
  114. package/dist/compat/zustand/index.js +12 -0
  115. package/dist/compat/zustand/index.js.map +1 -0
  116. package/dist/composite-C7PcQvcs.d.cts +303 -0
  117. package/dist/composite-aUCvjZVR.d.ts +303 -0
  118. package/dist/core/index.cjs +53 -4
  119. package/dist/core/index.cjs.map +1 -1
  120. package/dist/core/index.d.cts +4 -3
  121. package/dist/core/index.d.ts +4 -3
  122. package/dist/core/index.js +26 -24
  123. package/dist/demo-shell-BDkOptd6.d.ts +102 -0
  124. package/dist/demo-shell-Crid1WdR.d.cts +102 -0
  125. package/dist/extra/index.cjs +222 -110
  126. package/dist/extra/index.cjs.map +1 -1
  127. package/dist/extra/index.d.cts +6 -4
  128. package/dist/extra/index.d.ts +6 -4
  129. package/dist/extra/index.js +72 -65
  130. package/dist/extra/sources.cjs +2486 -0
  131. package/dist/extra/sources.cjs.map +1 -0
  132. package/dist/extra/sources.d.cts +465 -0
  133. package/dist/extra/sources.d.ts +465 -0
  134. package/dist/extra/sources.js +57 -0
  135. package/dist/extra/sources.js.map +1 -0
  136. package/dist/graph/index.cjs +408 -14
  137. package/dist/graph/index.cjs.map +1 -1
  138. package/dist/graph/index.d.cts +5 -5
  139. package/dist/graph/index.d.ts +5 -5
  140. package/dist/graph/index.js +13 -5
  141. package/dist/{graph-D-3JIQme.d.cts → graph-CCwGKLCm.d.ts} +195 -4
  142. package/dist/{graph-B6NFqv3z.d.ts → graph-DNCrvZSn.d.cts} +195 -4
  143. package/dist/index-3lsddbbS.d.ts +86 -0
  144. package/dist/index-B1tloyhO.d.cts +34 -0
  145. package/dist/{index-CYkjxu3s.d.ts → index-B6D3QNSA.d.ts} +33 -4
  146. package/dist/index-B6EhDnjH.d.cts +37 -0
  147. package/dist/index-B9B7_HEY.d.ts +37 -0
  148. package/dist/{index-Ds23Wvou.d.ts → index-BHlKbUwO.d.cts} +131 -883
  149. package/dist/{index-DiobMNwE.d.ts → index-BPVt8kqc.d.ts} +3 -3
  150. package/dist/index-BaSM3aYt.d.ts +195 -0
  151. package/dist/index-BuEoe-Qu.d.ts +121 -0
  152. package/dist/{index-Ch0IpIO0.d.cts → index-BwfLUNw4.d.ts} +131 -883
  153. package/dist/index-ByQxazQJ.d.cts +86 -0
  154. package/dist/index-C0svESO4.d.ts +127 -0
  155. package/dist/{index-OXImXMq6.d.ts → index-C8oil6M6.d.ts} +18 -196
  156. package/dist/{index-DKE1EATr.d.cts → index-CI3DprxP.d.cts} +18 -196
  157. package/dist/{index-AMWewNDe.d.cts → index-CO8uBlUh.d.cts} +33 -4
  158. package/dist/index-CxFrXH4m.d.ts +45 -0
  159. package/dist/index-D8wS_PeY.d.cts +121 -0
  160. package/dist/index-DO_6JN9Z.d.cts +127 -0
  161. package/dist/index-DVGiGFGT.d.cts +195 -0
  162. package/dist/index-DYme44FM.d.cts +44 -0
  163. package/dist/{index-J7Kc0oIQ.d.cts → index-DlLp-2Xn.d.cts} +3 -3
  164. package/dist/index-Dzk2hrlR.d.ts +44 -0
  165. package/dist/index-VHqptjhu.d.cts +45 -0
  166. package/dist/index-VdHQMPy1.d.ts +36 -0
  167. package/dist/index-Xi3u0HCQ.d.cts +36 -0
  168. package/dist/index-wEn0eFe8.d.ts +34 -0
  169. package/dist/index.cjs +1780 -176
  170. package/dist/index.cjs.map +1 -1
  171. package/dist/index.d.cts +784 -2082
  172. package/dist/index.d.ts +784 -2082
  173. package/dist/index.js +955 -4349
  174. package/dist/index.js.map +1 -1
  175. package/dist/memory-C6Z2tGpC.d.cts +139 -0
  176. package/dist/memory-li6FL5RM.d.ts +139 -0
  177. package/dist/messaging-Gt4LPbyA.d.cts +269 -0
  178. package/dist/messaging-XDoYablx.d.ts +269 -0
  179. package/dist/{meta-DWbkoq1s.d.cts → meta-BxCA7rcr.d.cts} +1 -1
  180. package/dist/{meta-CnkLA_43.d.ts → meta-CbznRPYJ.d.ts} +1 -1
  181. package/dist/{node-B-f-Lu-k.d.cts → node-BmerH3kS.d.cts} +26 -1
  182. package/dist/{node-B-f-Lu-k.d.ts → node-BmerH3kS.d.ts} +26 -1
  183. package/dist/{observable-uP-wy_uK.d.ts → observable-BgGUwcqp.d.ts} +1 -1
  184. package/dist/{observable-DBnrwcar.d.cts → observable-DJt_AxzQ.d.cts} +1 -1
  185. package/dist/patterns/ai.cjs +7930 -0
  186. package/dist/patterns/ai.cjs.map +1 -0
  187. package/dist/patterns/ai.d.cts +10 -0
  188. package/dist/patterns/ai.d.ts +10 -0
  189. package/dist/patterns/ai.js +71 -0
  190. package/dist/patterns/ai.js.map +1 -0
  191. package/dist/patterns/audit.cjs +5805 -0
  192. package/dist/patterns/audit.cjs.map +1 -0
  193. package/dist/patterns/audit.d.cts +6 -0
  194. package/dist/patterns/audit.d.ts +6 -0
  195. package/dist/patterns/audit.js +29 -0
  196. package/dist/patterns/audit.js.map +1 -0
  197. package/dist/patterns/demo-shell.cjs +5604 -0
  198. package/dist/patterns/demo-shell.cjs.map +1 -0
  199. package/dist/patterns/demo-shell.d.cts +6 -0
  200. package/dist/patterns/demo-shell.d.ts +6 -0
  201. package/dist/patterns/demo-shell.js +15 -0
  202. package/dist/patterns/demo-shell.js.map +1 -0
  203. package/dist/patterns/memory.cjs +5283 -0
  204. package/dist/patterns/memory.cjs.map +1 -0
  205. package/dist/patterns/memory.d.cts +5 -0
  206. package/dist/patterns/memory.d.ts +5 -0
  207. package/dist/patterns/memory.js +20 -0
  208. package/dist/patterns/memory.js.map +1 -0
  209. package/dist/patterns/reactive-layout/index.cjs +355 -13
  210. package/dist/patterns/reactive-layout/index.cjs.map +1 -1
  211. package/dist/patterns/reactive-layout/index.d.cts +6 -5
  212. package/dist/patterns/reactive-layout/index.d.ts +6 -5
  213. package/dist/patterns/reactive-layout/index.js +15 -12
  214. package/dist/reactive-layout-MQP--J3F.d.cts +183 -0
  215. package/dist/reactive-layout-u5Ulnqag.d.ts +183 -0
  216. package/dist/{storage-BuTdpCI1.d.cts → storage-CMjUUuxn.d.ts} +10 -2
  217. package/dist/{storage-F2X1U1x0.d.ts → storage-DdWlZo6U.d.cts} +10 -2
  218. package/dist/sugar-CCOxXK1e.d.ts +201 -0
  219. package/dist/sugar-D02n5JjF.d.cts +201 -0
  220. package/package.json +63 -3
  221. package/dist/chunk-5DJTTKX3.js.map +0 -1
  222. package/dist/chunk-IAHGTNOZ.js.map +0 -1
  223. package/dist/chunk-L2GLW2U7.js.map +0 -1
  224. package/dist/chunk-MW4VAKAO.js +0 -47
  225. package/dist/chunk-MW4VAKAO.js.map +0 -1
  226. package/dist/chunk-PY4XCDLR.js.map +0 -1
  227. package/dist/chunk-TKE3JGOH.js.map +0 -1
  228. package/dist/chunk-XOFWRC73.js.map +0 -1
  229. package/dist/index-BJB7t9gg.d.cts +0 -392
  230. package/dist/index-C-TXEa7C.d.ts +0 -392
  231. /package/dist/{chunk-H4RVA4VE.js.map → chunk-VYPWMZ6H.js.map} +0 -0
@@ -0,0 +1,330 @@
1
+ import {
2
+ analyzeAndMeasure,
3
+ computeLineBreaks
4
+ } from "./chunk-GTE6PWRZ.js";
5
+ import {
6
+ Graph
7
+ } from "./chunk-PF7GRZMW.js";
8
+ import {
9
+ describeNode,
10
+ resolveDescribeFields
11
+ } from "./chunk-VYPWMZ6H.js";
12
+ import {
13
+ batch,
14
+ derived,
15
+ effect,
16
+ state
17
+ } from "./chunk-PHOUUNK7.js";
18
+ import {
19
+ __export
20
+ } from "./chunk-SX52TAR4.js";
21
+
22
+ // src/patterns/demo-shell.ts
23
+ var demo_shell_exports = {};
24
+ __export(demo_shell_exports, {
25
+ demoShell: () => demoShell
26
+ });
27
+ function clamp01(v) {
28
+ return Math.max(0, Math.min(1, v));
29
+ }
30
+ function demoShell(opts) {
31
+ const mainRatioInit = clamp01(opts?.mainRatio ?? 0.65);
32
+ const sideSplitInit = clamp01(opts?.sideSplit ?? 0.5);
33
+ const viewportInit = Math.max(0, opts?.viewportWidth ?? 1280);
34
+ const registry = opts?.nodeRegistry ?? /* @__PURE__ */ new Map();
35
+ const adapter = opts?.adapter ?? null;
36
+ const layoutFont = opts?.layoutFont ?? "14px monospace";
37
+ const onHighlight = opts?.onHighlight;
38
+ const g = new Graph("demo-shell");
39
+ const paneMainRatio = state(mainRatioInit, { name: "pane/main-ratio" });
40
+ const paneSideSplit = state(sideSplitInit, { name: "pane/side-split" });
41
+ const paneFullscreen = state(null, {
42
+ name: "pane/fullscreen"
43
+ });
44
+ const viewportWidth = state(viewportInit, { name: "viewport/width" });
45
+ g.add("pane/main-ratio", paneMainRatio);
46
+ g.add("pane/side-split", paneSideSplit);
47
+ g.add("pane/fullscreen", paneFullscreen);
48
+ g.add("viewport/width", viewportWidth);
49
+ const paneMainWidth = derived(
50
+ [paneMainRatio, viewportWidth, paneFullscreen],
51
+ ([ratio, vw, fs]) => {
52
+ const r = ratio;
53
+ const w = vw;
54
+ const fullscreen = fs;
55
+ if (fullscreen === "main") return w;
56
+ if (fullscreen === "graph" || fullscreen === "code") return 0;
57
+ return Math.round(w * r);
58
+ },
59
+ { name: "pane/main-width" }
60
+ );
61
+ const paneSideWidth = derived(
62
+ [paneMainWidth, viewportWidth, paneFullscreen],
63
+ ([main, vw, fs]) => {
64
+ const fullscreen = fs;
65
+ const w = vw;
66
+ if (fullscreen === "main") return 0;
67
+ if (fullscreen === "graph" || fullscreen === "code") return w;
68
+ return w - main;
69
+ },
70
+ { name: "pane/side-width" }
71
+ );
72
+ const paneGraphHeight = derived(
73
+ [paneSideSplit, paneFullscreen],
74
+ ([split, fs]) => {
75
+ const fullscreen = fs;
76
+ if (fullscreen === "graph") return 1;
77
+ if (fullscreen === "code") return 0;
78
+ if (fullscreen === "main") return 0;
79
+ return clamp01(split);
80
+ },
81
+ { name: "pane/graph-height-ratio" }
82
+ );
83
+ const paneCodeHeight = derived(
84
+ [paneGraphHeight, paneFullscreen],
85
+ ([graphH, fs]) => {
86
+ const fullscreen = fs;
87
+ if (fullscreen === "code") return 1;
88
+ if (fullscreen === "graph" || fullscreen === "main") return 0;
89
+ return 1 - graphH;
90
+ },
91
+ { name: "pane/code-height-ratio" }
92
+ );
93
+ g.add("pane/main-width", paneMainWidth);
94
+ g.add("pane/side-width", paneSideWidth);
95
+ g.add("pane/graph-height-ratio", paneGraphHeight);
96
+ g.add("pane/code-height-ratio", paneCodeHeight);
97
+ const demoGraphRef = state(null, {
98
+ name: "demo/graph-ref"
99
+ });
100
+ const demoGraphTick = state(0, { name: "demo/graph-tick" });
101
+ g.add("demo/graph-ref", demoGraphRef);
102
+ g.add("demo/graph-tick", demoGraphTick);
103
+ const graphMermaid = derived(
104
+ [demoGraphRef, demoGraphTick],
105
+ ([ref, _tick]) => {
106
+ const demo = ref;
107
+ if (!demo) return "";
108
+ return demo.describe({ format: "mermaid" });
109
+ },
110
+ { name: "graph/mermaid" }
111
+ );
112
+ const graphDescribe = derived(
113
+ [demoGraphRef, demoGraphTick],
114
+ ([ref, _tick]) => {
115
+ const demo = ref;
116
+ if (!demo) return null;
117
+ const { expand: _, ...snapshot } = demo.describe({ detail: "standard" });
118
+ return snapshot;
119
+ },
120
+ { name: "graph/describe" }
121
+ );
122
+ g.add("graph/mermaid", graphMermaid);
123
+ g.add("graph/describe", graphDescribe);
124
+ const hoverTarget = state(null, { name: "hover/target" });
125
+ g.add("hover/target", hoverTarget);
126
+ const highlightCodeScroll = derived(
127
+ [hoverTarget],
128
+ ([target]) => {
129
+ const t = target;
130
+ if (!t) return null;
131
+ const entry = registry.get(t.id);
132
+ return entry ? entry.codeLine : null;
133
+ },
134
+ { name: "highlight/code-scroll" }
135
+ );
136
+ const highlightVisual = derived(
137
+ [hoverTarget],
138
+ ([target]) => {
139
+ const t = target;
140
+ if (!t) return null;
141
+ const entry = registry.get(t.id);
142
+ return entry ? entry.visualSelector : null;
143
+ },
144
+ { name: "highlight/visual" }
145
+ );
146
+ const highlightGraph = derived(
147
+ [hoverTarget],
148
+ ([target]) => {
149
+ const t = target;
150
+ if (!t) return null;
151
+ return t.id;
152
+ },
153
+ { name: "highlight/graph" }
154
+ );
155
+ g.add("highlight/code-scroll", highlightCodeScroll);
156
+ g.add("highlight/visual", highlightVisual);
157
+ g.add("highlight/graph", highlightGraph);
158
+ if (onHighlight?.codeScroll) {
159
+ const cb = onHighlight.codeScroll;
160
+ const applyCodeScroll = effect([highlightCodeScroll], ([line]) => {
161
+ cb(line);
162
+ });
163
+ g.add("highlight/apply-code-scroll", applyCodeScroll);
164
+ }
165
+ if (onHighlight?.visual) {
166
+ const cb = onHighlight.visual;
167
+ const applyVisual = effect([highlightVisual], ([selector]) => {
168
+ cb(selector);
169
+ });
170
+ g.add("highlight/apply-visual", applyVisual);
171
+ }
172
+ if (onHighlight?.graph) {
173
+ const cb = onHighlight.graph;
174
+ const applyGraph = effect([highlightGraph], ([nodeId]) => {
175
+ cb(nodeId);
176
+ });
177
+ g.add("highlight/apply-graph", applyGraph);
178
+ }
179
+ const inspectSelected = state(null, {
180
+ name: "inspect/selected-node"
181
+ });
182
+ g.add("inspect/selected-node", inspectSelected);
183
+ const standardFields = resolveDescribeFields("standard");
184
+ const inspectNodeDetail = derived(
185
+ [inspectSelected, demoGraphRef, demoGraphTick],
186
+ ([path, ref, _tick]) => {
187
+ const demo = ref;
188
+ const p = path;
189
+ if (!demo || !p) return null;
190
+ try {
191
+ const nd = demo.resolve(p);
192
+ const nodeDesc = describeNode(nd, standardFields);
193
+ return { path: p, ...nodeDesc, value: nd.cache };
194
+ } catch {
195
+ return null;
196
+ }
197
+ },
198
+ { name: "inspect/node-detail" }
199
+ );
200
+ const inspectTraceLog = derived(
201
+ [demoGraphRef, demoGraphTick],
202
+ ([ref, _tick]) => {
203
+ const demo = ref;
204
+ if (!demo) return [];
205
+ return demo.trace();
206
+ },
207
+ { name: "inspect/trace-log" }
208
+ );
209
+ g.add("inspect/node-detail", inspectNodeDetail);
210
+ g.add("inspect/trace-log", inspectTraceLog);
211
+ const metaDebug = state(false, { name: "meta/debug" });
212
+ g.add("meta/debug", metaDebug);
213
+ const metaShellMermaid = derived(
214
+ [metaDebug, demoGraphTick],
215
+ ([debug, _tick]) => {
216
+ if (!debug) return "";
217
+ return g.describe({ format: "mermaid" });
218
+ },
219
+ { name: "meta/shell-mermaid" }
220
+ );
221
+ g.add("meta/shell-mermaid", metaShellMermaid);
222
+ const codeTextNode = state("", { name: "layout/code-text" });
223
+ g.add("layout/code-text", codeTextNode);
224
+ if (adapter) {
225
+ const measureCache = /* @__PURE__ */ new Map();
226
+ const graphLabels = derived(
227
+ [graphDescribe],
228
+ ([desc]) => {
229
+ const d = desc;
230
+ if (!d) return /* @__PURE__ */ new Map();
231
+ const result = /* @__PURE__ */ new Map();
232
+ for (const [name] of Object.entries(d.nodes)) {
233
+ const segments = analyzeAndMeasure(name, layoutFont, adapter, measureCache);
234
+ const lb = computeLineBreaks(segments, Infinity, adapter, layoutFont, measureCache);
235
+ const width = lb.lines.reduce((max, l) => Math.max(max, l.width), 0);
236
+ const height = lb.lineCount * 20;
237
+ result.set(name, { width, height });
238
+ }
239
+ return result;
240
+ },
241
+ {
242
+ name: "layout/graph-labels",
243
+ equals: (a, b) => {
244
+ if (a === b) return true;
245
+ const ma = a;
246
+ const mb = b;
247
+ if (ma.size !== mb.size) return false;
248
+ for (const [k, v] of ma) {
249
+ const bv = mb.get(k);
250
+ if (!bv || bv.width !== v.width || bv.height !== v.height) return false;
251
+ }
252
+ return true;
253
+ }
254
+ }
255
+ );
256
+ const codeLines = derived(
257
+ [codeTextNode, paneSideWidth],
258
+ ([text, sideW]) => {
259
+ const t = text;
260
+ if (!t) return { lineCount: 0, lines: [] };
261
+ const segments = analyzeAndMeasure(t, layoutFont, adapter, measureCache);
262
+ const maxW = sideW - 40;
263
+ return computeLineBreaks(segments, Math.max(100, maxW), adapter, layoutFont, measureCache);
264
+ },
265
+ { name: "layout/code-lines" }
266
+ );
267
+ const sideWidthHint = derived(
268
+ [graphLabels],
269
+ ([labels]) => {
270
+ const m = labels;
271
+ if (m.size === 0) return 200;
272
+ let maxW = 0;
273
+ for (const { width } of m.values()) {
274
+ if (width > maxW) maxW = width;
275
+ }
276
+ return Math.max(200, Math.round(maxW + 80));
277
+ },
278
+ { name: "layout/side-width-hint" }
279
+ );
280
+ g.add("layout/graph-labels", graphLabels);
281
+ g.add("layout/code-lines", codeLines);
282
+ g.add("layout/side-width-hint", sideWidthHint);
283
+ }
284
+ let tickCounter = 0;
285
+ return {
286
+ graph: g,
287
+ setMainRatio(ratio) {
288
+ g.set("pane/main-ratio", clamp01(ratio));
289
+ },
290
+ setSideSplit(ratio) {
291
+ g.set("pane/side-split", clamp01(ratio));
292
+ },
293
+ setFullscreen(pane) {
294
+ g.set("pane/fullscreen", pane);
295
+ },
296
+ setViewportWidth(width) {
297
+ g.set("viewport/width", Math.max(0, width));
298
+ },
299
+ setHoverTarget(target) {
300
+ g.set("hover/target", target);
301
+ },
302
+ setDemoGraph(demo) {
303
+ g.set("demo/graph-ref", demo);
304
+ },
305
+ bumpGraphTick() {
306
+ g.set("demo/graph-tick", ++tickCounter);
307
+ },
308
+ selectNode(path) {
309
+ g.set("inspect/selected-node", path);
310
+ },
311
+ setMetaDebug(on) {
312
+ g.set("meta/debug", on);
313
+ },
314
+ setCodeText(text) {
315
+ g.set("layout/code-text", text);
316
+ },
317
+ batch(fn) {
318
+ batch(fn);
319
+ },
320
+ destroy() {
321
+ g.destroy();
322
+ }
323
+ };
324
+ }
325
+
326
+ export {
327
+ demoShell,
328
+ demo_shell_exports
329
+ };
330
+ //# sourceMappingURL=chunk-JWBCY4NC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/patterns/demo-shell.ts"],"sourcesContent":["/**\n * Three-pane demo shell (roadmap §7.2).\n *\n * A `Graph(\"demo-shell\")` that dogfoods reactive coordination for the\n * main/side split layout with synchronized cross-highlighting.\n *\n * **Zero framework dependency** — framework bindings wrap pane components only.\n * The shell graph is headless and fully testable.\n */\n\nimport { batch } from \"../core/batch.js\";\nimport { describeNode, resolveDescribeFields } from \"../core/meta.js\";\nimport { derived, effect, state } from \"../core/sugar.js\";\nimport { Graph } from \"../graph/graph.js\";\nimport type { MeasurementAdapter } from \"./reactive-layout/reactive-layout.js\";\nimport { analyzeAndMeasure, computeLineBreaks } from \"./reactive-layout/reactive-layout.js\";\n\n// ——————————————————————————————————————————————————————————\n// Types\n// ——————————————————————————————————————————————————————————\n\n/** Identifies which pane is the source of a hover event. */\nexport type HoverPaneType = \"visual\" | \"graph\" | \"code\";\n\n/** Cross-highlighting hover target. `null` means nothing hovered. */\nexport type HoverTarget = { pane: HoverPaneType; id: string } | null;\n\n/** Which pane is full-screened (null = normal layout). */\nexport type FullscreenPane = \"main\" | \"graph\" | \"code\" | null;\n\n/**\n * Cross-referencing registry: maps node paths to code line numbers and\n * visual element selectors. Provided by each demo's `store.ts`.\n */\nexport type NodeRegistry = Map<string, { codeLine: number; visualSelector: string }>;\n\n/** Callbacks for cross-highlighting effect nodes. */\nexport type HighlightCallbacks = {\n\t/** Called when code-scroll highlight target changes. */\n\tcodeScroll?: (line: number | null) => void;\n\t/** Called when visual highlight target changes. */\n\tvisual?: (selector: string | null) => void;\n\t/** Called when graph highlight target changes. */\n\tgraph?: (nodeId: string | null) => void;\n};\n\n/** Label dimensions for graph node sizing. */\nexport type GraphLabelSize = { width: number; height: number };\n\n/** Options for {@link demoShell}. */\nexport type DemoShellOptions = {\n\t/** Initial main/side split ratio (0–1). Default: `0.65`. */\n\tmainRatio?: number;\n\t/** Initial graph/code vertical split in the side pane (0–1). Default: `0.5`. */\n\tsideSplit?: number;\n\t/** Initial viewport width in pixels. Default: `1280`. */\n\tviewportWidth?: number;\n\t/** Cross-referencing registry for hover→code/visual/graph mapping. */\n\tnodeRegistry?: NodeRegistry;\n\t/** Measurement adapter for layout engine integration. When provided, enables layout/* derived nodes. */\n\tadapter?: MeasurementAdapter;\n\t/** Font string for layout measurement. Default: `\"14px monospace\"`. */\n\tlayoutFont?: string;\n\t/** Callbacks for cross-highlighting effect nodes. When provided, creates effect nodes visible in describe(). */\n\tonHighlight?: HighlightCallbacks;\n};\n\n/** Return type of {@link demoShell}. */\nexport type DemoShellHandle = {\n\t/** The demo-shell graph. */\n\tgraph: Graph;\n\n\t// ── Convenience setters (shorthand for graph.set) ──────────\n\tsetMainRatio(ratio: number): void;\n\tsetSideSplit(ratio: number): void;\n\tsetFullscreen(pane: FullscreenPane): void;\n\tsetViewportWidth(width: number): void;\n\tsetHoverTarget(target: HoverTarget): void;\n\tsetDemoGraph(g: Graph | null): void;\n\tbumpGraphTick(): void;\n\tselectNode(path: string | null): void;\n\tsetMetaDebug(on: boolean): void;\n\t/** Set code text for layout/code-lines measurement (requires adapter). */\n\tsetCodeText(text: string): void;\n\t/** Atomic multi-set — wraps core `batch()` for glitch-free updates. */\n\tbatch(fn: () => void): void;\n\tdestroy(): void;\n};\n\n// ——————————————————————————————————————————————————————————\n// Helpers\n// ——————————————————————————————————————————————————————————\n\nfunction clamp01(v: number): number {\n\treturn Math.max(0, Math.min(1, v));\n}\n\n// ——————————————————————————————————————————————————————————\n// Factory\n// ——————————————————————————————————————————————————————————\n\n/**\n * Creates the three-pane demo shell graph (roadmap §7.2).\n *\n * All coordination is reactive — no polling, no imperative triggers.\n * Framework bindings subscribe to named nodes and drive `state` inputs.\n */\nexport function demoShell(opts?: DemoShellOptions): DemoShellHandle {\n\tconst mainRatioInit = clamp01(opts?.mainRatio ?? 0.65);\n\tconst sideSplitInit = clamp01(opts?.sideSplit ?? 0.5);\n\tconst viewportInit = Math.max(0, opts?.viewportWidth ?? 1280);\n\tconst registry = opts?.nodeRegistry ?? new Map();\n\tconst adapter = opts?.adapter ?? null;\n\tconst layoutFont = opts?.layoutFont ?? \"14px monospace\";\n\tconst onHighlight = opts?.onHighlight;\n\n\tconst g = new Graph(\"demo-shell\");\n\n\t// ── Layout state ─────────────────────────────────────\n\tconst paneMainRatio = state(mainRatioInit, { name: \"pane/main-ratio\" });\n\tconst paneSideSplit = state(sideSplitInit, { name: \"pane/side-split\" });\n\tconst paneFullscreen = state<FullscreenPane>(null, {\n\t\tname: \"pane/fullscreen\",\n\t});\n\tconst viewportWidth = state(viewportInit, { name: \"viewport/width\" });\n\n\tg.add(\"pane/main-ratio\", paneMainRatio);\n\tg.add(\"pane/side-split\", paneSideSplit);\n\tg.add(\"pane/fullscreen\", paneFullscreen);\n\tg.add(\"viewport/width\", viewportWidth);\n\n\t// ── Derived pane dimensions ──────────────────────────\n\tconst paneMainWidth = derived(\n\t\t[paneMainRatio, viewportWidth, paneFullscreen],\n\t\t([ratio, vw, fs]) => {\n\t\t\tconst r = ratio as number;\n\t\t\tconst w = vw as number;\n\t\t\tconst fullscreen = fs as FullscreenPane;\n\t\t\tif (fullscreen === \"main\") return w;\n\t\t\tif (fullscreen === \"graph\" || fullscreen === \"code\") return 0;\n\t\t\treturn Math.round(w * r);\n\t\t},\n\t\t{ name: \"pane/main-width\" },\n\t);\n\n\tconst paneSideWidth = derived(\n\t\t[paneMainWidth, viewportWidth, paneFullscreen],\n\t\t([main, vw, fs]) => {\n\t\t\tconst fullscreen = fs as FullscreenPane;\n\t\t\tconst w = vw as number;\n\t\t\tif (fullscreen === \"main\") return 0;\n\t\t\tif (fullscreen === \"graph\" || fullscreen === \"code\") return w;\n\t\t\treturn (w as number) - (main as number);\n\t\t},\n\t\t{ name: \"pane/side-width\" },\n\t);\n\n\tconst paneGraphHeight = derived(\n\t\t[paneSideSplit, paneFullscreen],\n\t\t([split, fs]) => {\n\t\t\tconst fullscreen = fs as FullscreenPane;\n\t\t\tif (fullscreen === \"graph\") return 1;\n\t\t\tif (fullscreen === \"code\") return 0;\n\t\t\tif (fullscreen === \"main\") return 0;\n\t\t\treturn clamp01(split as number);\n\t\t},\n\t\t{ name: \"pane/graph-height-ratio\" },\n\t);\n\n\tconst paneCodeHeight = derived(\n\t\t[paneGraphHeight, paneFullscreen],\n\t\t([graphH, fs]) => {\n\t\t\tconst fullscreen = fs as FullscreenPane;\n\t\t\tif (fullscreen === \"code\") return 1;\n\t\t\tif (fullscreen === \"graph\" || fullscreen === \"main\") return 0;\n\t\t\treturn 1 - (graphH as number);\n\t\t},\n\t\t{ name: \"pane/code-height-ratio\" },\n\t);\n\n\tg.add(\"pane/main-width\", paneMainWidth);\n\tg.add(\"pane/side-width\", paneSideWidth);\n\tg.add(\"pane/graph-height-ratio\", paneGraphHeight);\n\tg.add(\"pane/code-height-ratio\", paneCodeHeight);\n\n\t// ── External graph observation ───────────────────────\n\tconst demoGraphRef = state<Graph | null>(null, {\n\t\tname: \"demo/graph-ref\",\n\t});\n\tconst demoGraphTick = state(0, { name: \"demo/graph-tick\" });\n\n\tg.add(\"demo/graph-ref\", demoGraphRef);\n\tg.add(\"demo/graph-tick\", demoGraphTick);\n\n\tconst graphMermaid = derived(\n\t\t[demoGraphRef, demoGraphTick],\n\t\t([ref, _tick]) => {\n\t\t\tconst demo = ref as Graph | null;\n\t\t\tif (!demo) return \"\";\n\t\t\treturn demo.describe({ format: \"mermaid\" });\n\t\t},\n\t\t{ name: \"graph/mermaid\" },\n\t);\n\n\tconst graphDescribe = derived(\n\t\t[demoGraphRef, demoGraphTick],\n\t\t([ref, _tick]) => {\n\t\t\tconst demo = ref as Graph | null;\n\t\t\tif (!demo) return null;\n\t\t\tconst { expand: _, ...snapshot } = demo.describe({ detail: \"standard\" });\n\t\t\treturn snapshot;\n\t\t},\n\t\t{ name: \"graph/describe\" },\n\t);\n\n\tg.add(\"graph/mermaid\", graphMermaid);\n\tg.add(\"graph/describe\", graphDescribe);\n\n\t// ── Cross-highlighting ───────────────────────────────\n\tconst hoverTarget = state<HoverTarget>(null, { name: \"hover/target\" });\n\tg.add(\"hover/target\", hoverTarget);\n\n\tconst highlightCodeScroll = derived(\n\t\t[hoverTarget],\n\t\t([target]) => {\n\t\t\tconst t = target as HoverTarget;\n\t\t\tif (!t) return null;\n\t\t\tconst entry = registry.get(t.id);\n\t\t\treturn entry ? entry.codeLine : null;\n\t\t},\n\t\t{ name: \"highlight/code-scroll\" },\n\t);\n\n\tconst highlightVisual = derived(\n\t\t[hoverTarget],\n\t\t([target]) => {\n\t\t\tconst t = target as HoverTarget;\n\t\t\tif (!t) return null;\n\t\t\tconst entry = registry.get(t.id);\n\t\t\treturn entry ? entry.visualSelector : null;\n\t\t},\n\t\t{ name: \"highlight/visual\" },\n\t);\n\n\tconst highlightGraph = derived(\n\t\t[hoverTarget],\n\t\t([target]) => {\n\t\t\tconst t = target as HoverTarget;\n\t\t\tif (!t) return null;\n\t\t\treturn t.id;\n\t\t},\n\t\t{ name: \"highlight/graph\" },\n\t);\n\n\tg.add(\"highlight/code-scroll\", highlightCodeScroll);\n\tg.add(\"highlight/visual\", highlightVisual);\n\tg.add(\"highlight/graph\", highlightGraph);\n\n\t// ── Cross-highlighting effect nodes (optional) ─────\n\t// Created when onHighlight callbacks are provided, making the full\n\t// source→derived→effect chain visible in describe()/toMermaid().\n\n\tif (onHighlight?.codeScroll) {\n\t\tconst cb = onHighlight.codeScroll;\n\t\tconst applyCodeScroll = effect([highlightCodeScroll], ([line]) => {\n\t\t\tcb(line as number | null);\n\t\t});\n\t\tg.add(\"highlight/apply-code-scroll\", applyCodeScroll);\n\t}\n\n\tif (onHighlight?.visual) {\n\t\tconst cb = onHighlight.visual;\n\t\tconst applyVisual = effect([highlightVisual], ([selector]) => {\n\t\t\tcb(selector as string | null);\n\t\t});\n\t\tg.add(\"highlight/apply-visual\", applyVisual);\n\t}\n\n\tif (onHighlight?.graph) {\n\t\tconst cb = onHighlight.graph;\n\t\tconst applyGraph = effect([highlightGraph], ([nodeId]) => {\n\t\t\tcb(nodeId as string | null);\n\t\t});\n\t\tg.add(\"highlight/apply-graph\", applyGraph);\n\t}\n\n\t// ── Inspect panel ────────────────────────────────────\n\tconst inspectSelected = state<string | null>(null, {\n\t\tname: \"inspect/selected-node\",\n\t});\n\tg.add(\"inspect/selected-node\", inspectSelected);\n\n\tconst standardFields = resolveDescribeFields(\"standard\");\n\n\tconst inspectNodeDetail = derived(\n\t\t[inspectSelected, demoGraphRef, demoGraphTick],\n\t\t([path, ref, _tick]) => {\n\t\t\tconst demo = ref as Graph | null;\n\t\t\tconst p = path as string | null;\n\t\t\tif (!demo || !p) return null;\n\t\t\ttry {\n\t\t\t\tconst nd = demo.resolve(p);\n\t\t\t\tconst nodeDesc = describeNode(nd, standardFields);\n\t\t\t\treturn { path: p, ...nodeDesc, value: nd.cache };\n\t\t\t} catch {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t},\n\t\t{ name: \"inspect/node-detail\" },\n\t);\n\n\tconst inspectTraceLog = derived(\n\t\t[demoGraphRef, demoGraphTick],\n\t\t([ref, _tick]) => {\n\t\t\tconst demo = ref as Graph | null;\n\t\t\tif (!demo) return [];\n\t\t\treturn demo.trace();\n\t\t},\n\t\t{ name: \"inspect/trace-log\" },\n\t);\n\n\tg.add(\"inspect/node-detail\", inspectNodeDetail);\n\tg.add(\"inspect/trace-log\", inspectTraceLog);\n\n\t// ── Meta debug toggle ────────────────────────────────\n\tconst metaDebug = state(false, { name: \"meta/debug\" });\n\tg.add(\"meta/debug\", metaDebug);\n\n\tconst metaShellMermaid = derived(\n\t\t[metaDebug, demoGraphTick],\n\t\t([debug, _tick]) => {\n\t\t\tif (!(debug as boolean)) return \"\";\n\t\t\treturn g.describe({ format: \"mermaid\" });\n\t\t},\n\t\t{ name: \"meta/shell-mermaid\" },\n\t);\n\tg.add(\"meta/shell-mermaid\", metaShellMermaid);\n\n\t// ── Layout engine integration (optional, requires adapter) ──\n\tconst codeTextNode = state(\"\", { name: \"layout/code-text\" });\n\tg.add(\"layout/code-text\", codeTextNode);\n\n\tif (adapter) {\n\t\tconst measureCache = new Map<string, Map<string, number>>();\n\n\t\tconst graphLabels = derived(\n\t\t\t[graphDescribe],\n\t\t\t([desc]) => {\n\t\t\t\tconst d = desc as { nodes: Record<string, { type: string }> } | null;\n\t\t\t\tif (!d) return new Map<string, GraphLabelSize>();\n\t\t\t\tconst result = new Map<string, GraphLabelSize>();\n\t\t\t\tfor (const [name] of Object.entries(d.nodes)) {\n\t\t\t\t\tconst segments = analyzeAndMeasure(name, layoutFont, adapter, measureCache);\n\t\t\t\t\tconst lb = computeLineBreaks(segments, Infinity, adapter, layoutFont, measureCache);\n\t\t\t\t\tconst width = lb.lines.reduce((max, l) => Math.max(max, l.width), 0);\n\t\t\t\t\tconst height = lb.lineCount * 20; // line-height approximation\n\t\t\t\t\tresult.set(name, { width, height });\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"layout/graph-labels\",\n\t\t\t\tequals: (a, b) => {\n\t\t\t\t\tif (a === b) return true;\n\t\t\t\t\tconst ma = a as Map<string, GraphLabelSize>;\n\t\t\t\t\tconst mb = b as Map<string, GraphLabelSize>;\n\t\t\t\t\tif (ma.size !== mb.size) return false;\n\t\t\t\t\tfor (const [k, v] of ma) {\n\t\t\t\t\t\tconst bv = mb.get(k);\n\t\t\t\t\t\tif (!bv || bv.width !== v.width || bv.height !== v.height) return false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\n\t\tconst codeLines = derived(\n\t\t\t[codeTextNode, paneSideWidth],\n\t\t\t([text, sideW]) => {\n\t\t\t\tconst t = text as string;\n\t\t\t\tif (!t) return { lineCount: 0, lines: [] };\n\t\t\t\tconst segments = analyzeAndMeasure(t, layoutFont, adapter, measureCache);\n\t\t\t\tconst maxW = (sideW as number) - 40; // side pane minus padding\n\t\t\t\treturn computeLineBreaks(segments, Math.max(100, maxW), adapter, layoutFont, measureCache);\n\t\t\t},\n\t\t\t{ name: \"layout/code-lines\" },\n\t\t);\n\n\t\tconst sideWidthHint = derived(\n\t\t\t[graphLabels],\n\t\t\t([labels]) => {\n\t\t\t\tconst m = labels as Map<string, GraphLabelSize>;\n\t\t\t\tif (m.size === 0) return 200; // minimum default\n\t\t\t\tlet maxW = 0;\n\t\t\t\tfor (const { width } of m.values()) {\n\t\t\t\t\tif (width > maxW) maxW = width;\n\t\t\t\t}\n\t\t\t\t// widest label + padding (node box chrome + margin)\n\t\t\t\treturn Math.max(200, Math.round(maxW + 80));\n\t\t\t},\n\t\t\t{ name: \"layout/side-width-hint\" },\n\t\t);\n\n\t\tg.add(\"layout/graph-labels\", graphLabels);\n\t\tg.add(\"layout/code-lines\", codeLines);\n\t\tg.add(\"layout/side-width-hint\", sideWidthHint);\n\t}\n\n\t// ── Edges (explicit wiring for describe/toMermaid) ───\n\n\t// ── Handle ───────────────────────────────────────────\n\tlet tickCounter = 0;\n\treturn {\n\t\tgraph: g,\n\t\tsetMainRatio(ratio: number) {\n\t\t\tg.set(\"pane/main-ratio\", clamp01(ratio));\n\t\t},\n\t\tsetSideSplit(ratio: number) {\n\t\t\tg.set(\"pane/side-split\", clamp01(ratio));\n\t\t},\n\t\tsetFullscreen(pane: FullscreenPane) {\n\t\t\tg.set(\"pane/fullscreen\", pane);\n\t\t},\n\t\tsetViewportWidth(width: number) {\n\t\t\tg.set(\"viewport/width\", Math.max(0, width));\n\t\t},\n\t\tsetHoverTarget(target: HoverTarget) {\n\t\t\tg.set(\"hover/target\", target);\n\t\t},\n\t\tsetDemoGraph(demo: Graph | null) {\n\t\t\tg.set(\"demo/graph-ref\", demo);\n\t\t},\n\t\tbumpGraphTick() {\n\t\t\tg.set(\"demo/graph-tick\", ++tickCounter);\n\t\t},\n\t\tselectNode(path: string | null) {\n\t\t\tg.set(\"inspect/selected-node\", path);\n\t\t},\n\t\tsetMetaDebug(on: boolean) {\n\t\t\tg.set(\"meta/debug\", on);\n\t\t},\n\t\tsetCodeText(text: string) {\n\t\t\tg.set(\"layout/code-text\", text);\n\t\t},\n\t\tbatch(fn: () => void) {\n\t\t\tbatch(fn);\n\t\t},\n\t\tdestroy() {\n\t\t\tg.destroy();\n\t\t},\n\t};\n}\n"],"mappings":"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","names":[]}