@simten/ui 0.1.1

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 (307) hide show
  1. package/LICENSE +176 -0
  2. package/README.md +41 -0
  3. package/dist/canvas/CircuitCanvas.d.ts +45 -0
  4. package/dist/canvas/CircuitCanvas.d.ts.map +1 -0
  5. package/dist/canvas/CircuitCanvas.js +293 -0
  6. package/dist/canvas/CircuitCanvas.js.map +1 -0
  7. package/dist/canvas/ClockControls.d.ts +31 -0
  8. package/dist/canvas/ClockControls.d.ts.map +1 -0
  9. package/dist/canvas/ClockControls.js +33 -0
  10. package/dist/canvas/ClockControls.js.map +1 -0
  11. package/dist/canvas/CompositeInspectorDialog.d.ts +24 -0
  12. package/dist/canvas/CompositeInspectorDialog.d.ts.map +1 -0
  13. package/dist/canvas/CompositeInspectorDialog.js +290 -0
  14. package/dist/canvas/CompositeInspectorDialog.js.map +1 -0
  15. package/dist/canvas/dagre-layout.d.ts +40 -0
  16. package/dist/canvas/dagre-layout.d.ts.map +1 -0
  17. package/dist/canvas/dagre-layout.js +86 -0
  18. package/dist/canvas/dagre-layout.js.map +1 -0
  19. package/dist/canvas/drill-down-view.d.ts +35 -0
  20. package/dist/canvas/drill-down-view.d.ts.map +1 -0
  21. package/dist/canvas/drill-down-view.js +134 -0
  22. package/dist/canvas/drill-down-view.js.map +1 -0
  23. package/dist/canvas/hooks/useDetectTheme.d.ts +6 -0
  24. package/dist/canvas/hooks/useDetectTheme.d.ts.map +1 -0
  25. package/dist/canvas/hooks/useDetectTheme.js +20 -0
  26. package/dist/canvas/hooks/useDetectTheme.js.map +1 -0
  27. package/dist/canvas/hooks/useIsMobile.d.ts +2 -0
  28. package/dist/canvas/hooks/useIsMobile.d.ts.map +1 -0
  29. package/dist/canvas/hooks/useIsMobile.js +20 -0
  30. package/dist/canvas/hooks/useIsMobile.js.map +1 -0
  31. package/dist/canvas/hooks/useSimulationSession.d.ts +23 -0
  32. package/dist/canvas/hooks/useSimulationSession.d.ts.map +1 -0
  33. package/dist/canvas/hooks/useSimulationSession.js +41 -0
  34. package/dist/canvas/hooks/useSimulationSession.js.map +1 -0
  35. package/dist/canvas/index.d.ts +22 -0
  36. package/dist/canvas/index.d.ts.map +1 -0
  37. package/dist/canvas/index.js +17 -0
  38. package/dist/canvas/index.js.map +1 -0
  39. package/dist/canvas/label-utils.d.ts +10 -0
  40. package/dist/canvas/label-utils.d.ts.map +1 -0
  41. package/dist/canvas/label-utils.js +32 -0
  42. package/dist/canvas/label-utils.js.map +1 -0
  43. package/dist/canvas/node-types.d.ts +10 -0
  44. package/dist/canvas/node-types.d.ts.map +1 -0
  45. package/dist/canvas/node-types.js +29 -0
  46. package/dist/canvas/node-types.js.map +1 -0
  47. package/dist/canvas/projection.d.ts +19 -0
  48. package/dist/canvas/projection.d.ts.map +1 -0
  49. package/dist/canvas/projection.js +317 -0
  50. package/dist/canvas/projection.js.map +1 -0
  51. package/dist/canvas/types.d.ts +56 -0
  52. package/dist/canvas/types.d.ts.map +1 -0
  53. package/dist/canvas/types.js +6 -0
  54. package/dist/canvas/types.js.map +1 -0
  55. package/dist/canvas/useLayout.d.ts +21 -0
  56. package/dist/canvas/useLayout.d.ts.map +1 -0
  57. package/dist/canvas/useLayout.js +26 -0
  58. package/dist/canvas/useLayout.js.map +1 -0
  59. package/dist/editor/components/CircuitSelector.d.ts +9 -0
  60. package/dist/editor/components/CircuitSelector.d.ts.map +1 -0
  61. package/dist/editor/components/CircuitSelector.js +20 -0
  62. package/dist/editor/components/CircuitSelector.js.map +1 -0
  63. package/dist/editor/components/CircuitTabBar.d.ts +8 -0
  64. package/dist/editor/components/CircuitTabBar.d.ts.map +1 -0
  65. package/dist/editor/components/CircuitTabBar.js +23 -0
  66. package/dist/editor/components/CircuitTabBar.js.map +1 -0
  67. package/dist/editor/components/ClockControls.d.ts +6 -0
  68. package/dist/editor/components/ClockControls.d.ts.map +1 -0
  69. package/dist/editor/components/ClockControls.js +7 -0
  70. package/dist/editor/components/ClockControls.js.map +1 -0
  71. package/dist/editor/components/ComponentTooltip.d.ts +25 -0
  72. package/dist/editor/components/ComponentTooltip.d.ts.map +1 -0
  73. package/dist/editor/components/ComponentTooltip.js +82 -0
  74. package/dist/editor/components/ComponentTooltip.js.map +1 -0
  75. package/dist/editor/components/ConflictResolutionModal.d.ts +19 -0
  76. package/dist/editor/components/ConflictResolutionModal.d.ts.map +1 -0
  77. package/dist/editor/components/ConflictResolutionModal.js +20 -0
  78. package/dist/editor/components/ConflictResolutionModal.js.map +1 -0
  79. package/dist/editor/components/HierarchyBreadcrumb.d.ts +9 -0
  80. package/dist/editor/components/HierarchyBreadcrumb.d.ts.map +1 -0
  81. package/dist/editor/components/HierarchyBreadcrumb.js +32 -0
  82. package/dist/editor/components/HierarchyBreadcrumb.js.map +1 -0
  83. package/dist/editor/components/LabelEditor.d.ts +17 -0
  84. package/dist/editor/components/LabelEditor.d.ts.map +1 -0
  85. package/dist/editor/components/LabelEditor.js +40 -0
  86. package/dist/editor/components/LabelEditor.js.map +1 -0
  87. package/dist/editor/components/SignalOutputPanel.d.ts +11 -0
  88. package/dist/editor/components/SignalOutputPanel.d.ts.map +1 -0
  89. package/dist/editor/components/SignalOutputPanel.js +34 -0
  90. package/dist/editor/components/SignalOutputPanel.js.map +1 -0
  91. package/dist/editor/components/index.d.ts +9 -0
  92. package/dist/editor/components/index.d.ts.map +1 -0
  93. package/dist/editor/components/index.js +9 -0
  94. package/dist/editor/components/index.js.map +1 -0
  95. package/dist/editor/hooks/index.d.ts +1 -0
  96. package/dist/editor/hooks/index.d.ts.map +1 -0
  97. package/dist/editor/hooks/index.js +2 -0
  98. package/dist/editor/hooks/index.js.map +1 -0
  99. package/dist/editor/index.d.ts +5 -0
  100. package/dist/editor/index.d.ts.map +1 -0
  101. package/dist/editor/index.js +5 -0
  102. package/dist/editor/index.js.map +1 -0
  103. package/dist/editor/lib/simulation/index.d.ts +7 -0
  104. package/dist/editor/lib/simulation/index.d.ts.map +1 -0
  105. package/dist/editor/lib/simulation/index.js +8 -0
  106. package/dist/editor/lib/simulation/index.js.map +1 -0
  107. package/dist/editor/lib/utils/circuit-flattener.d.ts +29 -0
  108. package/dist/editor/lib/utils/circuit-flattener.d.ts.map +1 -0
  109. package/dist/editor/lib/utils/circuit-flattener.js +230 -0
  110. package/dist/editor/lib/utils/circuit-flattener.js.map +1 -0
  111. package/dist/editor/lib/utils/component-utils.d.ts +28 -0
  112. package/dist/editor/lib/utils/component-utils.d.ts.map +1 -0
  113. package/dist/editor/lib/utils/component-utils.js +72 -0
  114. package/dist/editor/lib/utils/component-utils.js.map +1 -0
  115. package/dist/editor/lib/utils/index.d.ts +3 -0
  116. package/dist/editor/lib/utils/index.d.ts.map +1 -0
  117. package/dist/editor/lib/utils/index.js +3 -0
  118. package/dist/editor/lib/utils/index.js.map +1 -0
  119. package/dist/editor/lib/visualization/index.d.ts +2 -0
  120. package/dist/editor/lib/visualization/index.d.ts.map +1 -0
  121. package/dist/editor/lib/visualization/index.js +2 -0
  122. package/dist/editor/lib/visualization/index.js.map +1 -0
  123. package/dist/editor/lib/visualization/vcd-generator.d.ts +63 -0
  124. package/dist/editor/lib/visualization/vcd-generator.d.ts.map +1 -0
  125. package/dist/editor/lib/visualization/vcd-generator.js +269 -0
  126. package/dist/editor/lib/visualization/vcd-generator.js.map +1 -0
  127. package/dist/editor/stores/circuit-library-store.d.ts +25 -0
  128. package/dist/editor/stores/circuit-library-store.d.ts.map +1 -0
  129. package/dist/editor/stores/circuit-library-store.js +51 -0
  130. package/dist/editor/stores/circuit-library-store.js.map +1 -0
  131. package/dist/editor/stores/circuit-preview-store.d.ts +687 -0
  132. package/dist/editor/stores/circuit-preview-store.d.ts.map +1 -0
  133. package/dist/editor/stores/circuit-preview-store.js +226 -0
  134. package/dist/editor/stores/circuit-preview-store.js.map +1 -0
  135. package/dist/editor/stores/circuit-store.d.ts +354 -0
  136. package/dist/editor/stores/circuit-store.d.ts.map +1 -0
  137. package/dist/editor/stores/circuit-store.js +227 -0
  138. package/dist/editor/stores/circuit-store.js.map +1 -0
  139. package/dist/editor/stores/index.d.ts +11 -0
  140. package/dist/editor/stores/index.d.ts.map +1 -0
  141. package/dist/editor/stores/index.js +8 -0
  142. package/dist/editor/stores/index.js.map +1 -0
  143. package/dist/editor/stores/ui-store.d.ts +96 -0
  144. package/dist/editor/stores/ui-store.d.ts.map +1 -0
  145. package/dist/editor/stores/ui-store.js +101 -0
  146. package/dist/editor/stores/ui-store.js.map +1 -0
  147. package/dist/editor/types/circuit.d.ts +207 -0
  148. package/dist/editor/types/circuit.d.ts.map +1 -0
  149. package/dist/editor/types/circuit.js +62 -0
  150. package/dist/editor/types/circuit.js.map +1 -0
  151. package/dist/editor/types/index.d.ts +12 -0
  152. package/dist/editor/types/index.d.ts.map +1 -0
  153. package/dist/editor/types/index.js +11 -0
  154. package/dist/editor/types/index.js.map +1 -0
  155. package/dist/editor/types/testbench.d.ts +150 -0
  156. package/dist/editor/types/testbench.d.ts.map +1 -0
  157. package/dist/editor/types/testbench.js +85 -0
  158. package/dist/editor/types/testbench.js.map +1 -0
  159. package/dist/editor/types/testing.d.ts +88 -0
  160. package/dist/editor/types/testing.d.ts.map +1 -0
  161. package/dist/editor/types/testing.js +6 -0
  162. package/dist/editor/types/testing.js.map +1 -0
  163. package/dist/editor/types/ui-model.d.ts +68 -0
  164. package/dist/editor/types/ui-model.d.ts.map +1 -0
  165. package/dist/editor/types/ui-model.js +66 -0
  166. package/dist/editor/types/ui-model.js.map +1 -0
  167. package/dist/editor/types/ui.d.ts +33 -0
  168. package/dist/editor/types/ui.d.ts.map +1 -0
  169. package/dist/editor/types/ui.js +8 -0
  170. package/dist/editor/types/ui.js.map +1 -0
  171. package/dist/editor/types/visual.d.ts +45 -0
  172. package/dist/editor/types/visual.d.ts.map +1 -0
  173. package/dist/editor/types/visual.js +23 -0
  174. package/dist/editor/types/visual.js.map +1 -0
  175. package/dist/editor/utils/index.d.ts +5 -0
  176. package/dist/editor/utils/index.d.ts.map +1 -0
  177. package/dist/editor/utils/index.js +6 -0
  178. package/dist/editor/utils/index.js.map +1 -0
  179. package/dist/index.d.ts +11 -0
  180. package/dist/index.d.ts.map +1 -0
  181. package/dist/index.js +12 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/utils.d.ts +3 -0
  184. package/dist/lib/utils.d.ts.map +1 -0
  185. package/dist/lib/utils.js +6 -0
  186. package/dist/lib/utils.js.map +1 -0
  187. package/dist/nodes/BaseNode.d.ts +20 -0
  188. package/dist/nodes/BaseNode.d.ts.map +1 -0
  189. package/dist/nodes/BaseNode.js +26 -0
  190. package/dist/nodes/BaseNode.js.map +1 -0
  191. package/dist/nodes/CompositeBadge.d.ts +6 -0
  192. package/dist/nodes/CompositeBadge.d.ts.map +1 -0
  193. package/dist/nodes/CompositeBadge.js +10 -0
  194. package/dist/nodes/CompositeBadge.js.map +1 -0
  195. package/dist/nodes/ConsoleNode.d.ts +8 -0
  196. package/dist/nodes/ConsoleNode.d.ts.map +1 -0
  197. package/dist/nodes/ConsoleNode.js +16 -0
  198. package/dist/nodes/ConsoleNode.js.map +1 -0
  199. package/dist/nodes/EmbedConsoleNode.d.ts +8 -0
  200. package/dist/nodes/EmbedConsoleNode.d.ts.map +1 -0
  201. package/dist/nodes/EmbedConsoleNode.js +24 -0
  202. package/dist/nodes/EmbedConsoleNode.js.map +1 -0
  203. package/dist/nodes/EmbedScreenNode.d.ts +8 -0
  204. package/dist/nodes/EmbedScreenNode.d.ts.map +1 -0
  205. package/dist/nodes/EmbedScreenNode.js +24 -0
  206. package/dist/nodes/EmbedScreenNode.js.map +1 -0
  207. package/dist/nodes/EthFrameInputNode.d.ts +8 -0
  208. package/dist/nodes/EthFrameInputNode.d.ts.map +1 -0
  209. package/dist/nodes/EthFrameInputNode.js +14 -0
  210. package/dist/nodes/EthFrameInputNode.js.map +1 -0
  211. package/dist/nodes/InputNode.d.ts +8 -0
  212. package/dist/nodes/InputNode.d.ts.map +1 -0
  213. package/dist/nodes/InputNode.js +57 -0
  214. package/dist/nodes/InputNode.js.map +1 -0
  215. package/dist/nodes/LogicGateNode.d.ts +8 -0
  216. package/dist/nodes/LogicGateNode.d.ts.map +1 -0
  217. package/dist/nodes/LogicGateNode.js +51 -0
  218. package/dist/nodes/LogicGateNode.js.map +1 -0
  219. package/dist/nodes/NicFifoNode.d.ts +8 -0
  220. package/dist/nodes/NicFifoNode.d.ts.map +1 -0
  221. package/dist/nodes/NicFifoNode.js +10 -0
  222. package/dist/nodes/NicFifoNode.js.map +1 -0
  223. package/dist/nodes/NodeData.d.ts +34 -0
  224. package/dist/nodes/NodeData.d.ts.map +1 -0
  225. package/dist/nodes/NodeData.js +2 -0
  226. package/dist/nodes/NodeData.js.map +1 -0
  227. package/dist/nodes/NumericInputNode.d.ts +8 -0
  228. package/dist/nodes/NumericInputNode.d.ts.map +1 -0
  229. package/dist/nodes/NumericInputNode.js +47 -0
  230. package/dist/nodes/NumericInputNode.js.map +1 -0
  231. package/dist/nodes/OutputNode.d.ts +8 -0
  232. package/dist/nodes/OutputNode.d.ts.map +1 -0
  233. package/dist/nodes/OutputNode.js +32 -0
  234. package/dist/nodes/OutputNode.js.map +1 -0
  235. package/dist/nodes/RAMNode.d.ts +8 -0
  236. package/dist/nodes/RAMNode.d.ts.map +1 -0
  237. package/dist/nodes/RAMNode.js +23 -0
  238. package/dist/nodes/RAMNode.js.map +1 -0
  239. package/dist/nodes/ROMNode.d.ts +8 -0
  240. package/dist/nodes/ROMNode.d.ts.map +1 -0
  241. package/dist/nodes/ROMNode.js +23 -0
  242. package/dist/nodes/ROMNode.js.map +1 -0
  243. package/dist/nodes/RV32IInstrMemNode.d.ts +16 -0
  244. package/dist/nodes/RV32IInstrMemNode.d.ts.map +1 -0
  245. package/dist/nodes/RV32IInstrMemNode.js +183 -0
  246. package/dist/nodes/RV32IInstrMemNode.js.map +1 -0
  247. package/dist/nodes/RasterDisplayNode.d.ts +8 -0
  248. package/dist/nodes/RasterDisplayNode.d.ts.map +1 -0
  249. package/dist/nodes/RasterDisplayNode.js +14 -0
  250. package/dist/nodes/RasterDisplayNode.js.map +1 -0
  251. package/dist/nodes/RegisterNode.d.ts +8 -0
  252. package/dist/nodes/RegisterNode.d.ts.map +1 -0
  253. package/dist/nodes/RegisterNode.js +14 -0
  254. package/dist/nodes/RegisterNode.js.map +1 -0
  255. package/dist/nodes/ScreenNode.d.ts +8 -0
  256. package/dist/nodes/ScreenNode.d.ts.map +1 -0
  257. package/dist/nodes/ScreenNode.js +16 -0
  258. package/dist/nodes/ScreenNode.js.map +1 -0
  259. package/dist/nodes/UartTxNode.d.ts +8 -0
  260. package/dist/nodes/UartTxNode.d.ts.map +1 -0
  261. package/dist/nodes/UartTxNode.js +16 -0
  262. package/dist/nodes/UartTxNode.js.map +1 -0
  263. package/dist/nodes/index.d.ts +27 -0
  264. package/dist/nodes/index.d.ts.map +1 -0
  265. package/dist/nodes/index.js +30 -0
  266. package/dist/nodes/index.js.map +1 -0
  267. package/dist/primitives/button.d.ts +12 -0
  268. package/dist/primitives/button.d.ts.map +1 -0
  269. package/dist/primitives/button.js +32 -0
  270. package/dist/primitives/button.js.map +1 -0
  271. package/dist/primitives/index.d.ts +4 -0
  272. package/dist/primitives/index.d.ts.map +1 -0
  273. package/dist/primitives/index.js +4 -0
  274. package/dist/primitives/index.js.map +1 -0
  275. package/dist/primitives/sheet.d.ts +15 -0
  276. package/dist/primitives/sheet.d.ts.map +1 -0
  277. package/dist/primitives/sheet.js +40 -0
  278. package/dist/primitives/sheet.js.map +1 -0
  279. package/dist/primitives/tooltip.d.ts +8 -0
  280. package/dist/primitives/tooltip.d.ts.map +1 -0
  281. package/dist/primitives/tooltip.js +17 -0
  282. package/dist/primitives/tooltip.js.map +1 -0
  283. package/dist/sandbox/SandboxProvider.d.ts +13 -0
  284. package/dist/sandbox/SandboxProvider.d.ts.map +1 -0
  285. package/dist/sandbox/SandboxProvider.js +34 -0
  286. package/dist/sandbox/SandboxProvider.js.map +1 -0
  287. package/dist/sandbox/index.d.ts +4 -0
  288. package/dist/sandbox/index.d.ts.map +1 -0
  289. package/dist/sandbox/index.js +3 -0
  290. package/dist/sandbox/index.js.map +1 -0
  291. package/dist/sandbox/useSandbox.d.ts +197 -0
  292. package/dist/sandbox/useSandbox.d.ts.map +1 -0
  293. package/dist/sandbox/useSandbox.js +250 -0
  294. package/dist/sandbox/useSandbox.js.map +1 -0
  295. package/dist/share/encode-source.d.ts +13 -0
  296. package/dist/share/encode-source.d.ts.map +1 -0
  297. package/dist/share/encode-source.js +31 -0
  298. package/dist/share/encode-source.js.map +1 -0
  299. package/dist/share/index.d.ts +2 -0
  300. package/dist/share/index.d.ts.map +1 -0
  301. package/dist/share/index.js +2 -0
  302. package/dist/share/index.js.map +1 -0
  303. package/dist/waveform/WaveformViewer.d.ts +30 -0
  304. package/dist/waveform/WaveformViewer.d.ts.map +1 -0
  305. package/dist/waveform/WaveformViewer.js +356 -0
  306. package/dist/waveform/WaveformViewer.js.map +1 -0
  307. package/package.json +110 -0
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Circuit Preview Store - Compiled Circuit / Canvas Integration State Management
3
+ *
4
+ * Manages compiled TypeScript circuit results, circuit selection, and bidirectional sync
5
+ * between circuit code and canvas visualization.
6
+ *
7
+ * Key responsibilities:
8
+ * - Store compiled circuits from TypeScript builder code
9
+ * - Track which circuit to visualize (default: last in file)
10
+ * - Version tracking for conflict detection
11
+ * - Apply selected circuit to canvas
12
+ */
13
+ import { create } from 'zustand';
14
+ import { immer } from 'zustand/middleware/immer';
15
+ import { useCircuitStore } from './circuit-store';
16
+ import { useCircuitLibraryStore } from './circuit-library-store';
17
+ import { createDrillDownViewCircuit } from '../../canvas/drill-down-view';
18
+ import { autoHarness } from '@simten/core/circuit';
19
+ import { Switch, Button, Led, Input, Output, HexDisplay } from '@simten/core/std';
20
+ /**
21
+ * Hash function for circuit code version tracking
22
+ * Simple but effective for detecting changes
23
+ */
24
+ function hashCode(code) {
25
+ // Use btoa (base64 encode) with substring for fast comparison
26
+ // This is sufficient for change detection (not cryptographic security)
27
+ try {
28
+ return btoa(code).substring(0, 16);
29
+ }
30
+ catch {
31
+ // Fallback for invalid characters
32
+ return code.length.toString(16);
33
+ }
34
+ }
35
+ const initialState = {
36
+ compiledCircuits: [],
37
+ selectedCircuitIndex: -1,
38
+ autoCompileEnabled: true,
39
+ version: '',
40
+ lastSyncedVersion: '',
41
+ drillDownStack: [],
42
+ };
43
+ export const useCircuitPreviewStore = create()(immer((set, get) => ({
44
+ ...initialState,
45
+ setCompiledCircuits: (circuits, code) => {
46
+ const hash = hashCode(code);
47
+ set((state) => {
48
+ state.compiledCircuits = circuits;
49
+ state.version = hash;
50
+ state.lastSyncedVersion = hash; // Circuit code is source of truth at compile time
51
+ state.drillDownStack = []; // Clear drill-down on recompile
52
+ // Auto-select last circuit (most recently written)
53
+ if (circuits.length > 0) {
54
+ state.selectedCircuitIndex = circuits.length - 1;
55
+ }
56
+ else {
57
+ state.selectedCircuitIndex = -1;
58
+ }
59
+ });
60
+ // Automatically apply to canvas
61
+ get().applyToCanvas();
62
+ },
63
+ selectCircuit: (index) => {
64
+ const { compiledCircuits } = get();
65
+ if (index < 0 || index >= compiledCircuits.length) {
66
+ console.warn(`Invalid circuit index: ${index}`);
67
+ return;
68
+ }
69
+ set((state) => {
70
+ state.selectedCircuitIndex = index;
71
+ state.drillDownStack = []; // Clear drill-down on circuit switch
72
+ });
73
+ // Apply selected circuit to canvas
74
+ get().applyToCanvas();
75
+ },
76
+ applyToCanvas: () => {
77
+ const { compiledCircuits, selectedCircuitIndex } = get();
78
+ if (selectedCircuitIndex < 0 || selectedCircuitIndex >= compiledCircuits.length) {
79
+ useCircuitStore.getState().clearCircuit();
80
+ return;
81
+ }
82
+ const selectedCircuit = compiledCircuits[selectedCircuitIndex];
83
+ // Ensure harness components (Switch, Led, etc.) are in the library
84
+ const libStore = useCircuitLibraryStore.getState();
85
+ for (const c of [Switch(), Button(), Led, Input(), Output, HexDisplay]) {
86
+ if (!libStore.resolveCircuit(c.circuit.name))
87
+ libStore.addCircuit(c.circuit);
88
+ }
89
+ // Wrap with Switch/Led harness so inputs/outputs are interactive on canvas
90
+ const harnessed = autoHarness(selectedCircuit, {
91
+ resolveCircuit: (name) => useCircuitLibraryStore.getState().resolveCircuit(name),
92
+ addCircuit: (c) => useCircuitLibraryStore.getState().addCircuit(c),
93
+ });
94
+ // Apply to CircuitStore (auto-layout handled by CircuitCanvas)
95
+ useCircuitStore.getState().setCircuit(harnessed);
96
+ },
97
+ updateVersion: (code) => {
98
+ const hash = hashCode(code);
99
+ set((state) => {
100
+ state.version = hash;
101
+ });
102
+ },
103
+ hasConflict: () => {
104
+ const { version, lastSyncedVersion } = get();
105
+ return version !== lastSyncedVersion && lastSyncedVersion !== '';
106
+ },
107
+ resolveConflict: (keepCode) => {
108
+ if (keepCode) {
109
+ // User chose to keep circuit code changes
110
+ // Re-apply circuit code to canvas (discard canvas changes)
111
+ get().applyToCanvas();
112
+ }
113
+ else {
114
+ // User chose to keep canvas changes
115
+ // Update lastSyncedVersion to current circuit code version
116
+ set((state) => {
117
+ state.lastSyncedVersion = state.version;
118
+ });
119
+ }
120
+ },
121
+ toggleAutoCompile: () => {
122
+ set((state) => {
123
+ state.autoCompileEnabled = !state.autoCompileEnabled;
124
+ });
125
+ },
126
+ setAutoCompileEnabled: (enabled) => {
127
+ set((state) => {
128
+ state.autoCompileEnabled = enabled;
129
+ });
130
+ },
131
+ updateFromCanvas: (circuit, code) => {
132
+ const hash = hashCode(code);
133
+ set((state) => {
134
+ // Update the selected circuit in compiledCircuits
135
+ if (state.selectedCircuitIndex >= 0 &&
136
+ state.selectedCircuitIndex < state.compiledCircuits.length) {
137
+ state.compiledCircuits[state.selectedCircuitIndex] = circuit;
138
+ }
139
+ // Update version tracking
140
+ state.version = hash;
141
+ state.lastSyncedVersion = hash;
142
+ });
143
+ },
144
+ // ── Drill-down navigation ──
145
+ drillInto: (nodeId) => {
146
+ // Determine the currently active circuit (either drilled-in view or top-level)
147
+ const { drillDownStack, compiledCircuits, selectedCircuitIndex } = get();
148
+ let activeCircuit;
149
+ if (drillDownStack.length > 0) {
150
+ // Currently inside a drill-down; look for the node in the current view
151
+ activeCircuit = drillDownStack[drillDownStack.length - 1].circuit;
152
+ }
153
+ else {
154
+ activeCircuit = selectedCircuitIndex >= 0 ? compiledCircuits[selectedCircuitIndex] : null;
155
+ }
156
+ if (!activeCircuit) {
157
+ console.warn('[CircuitPreviewStore] drillInto: no active circuit');
158
+ return;
159
+ }
160
+ // Find the node
161
+ const node = activeCircuit.nodes.find(n => n.id === nodeId);
162
+ if (!node) {
163
+ console.warn('[CircuitPreviewStore] drillInto: node not found:', nodeId);
164
+ return;
165
+ }
166
+ // Resolve the component definition
167
+ const componentDef = useCircuitLibraryStore.getState().resolveCircuit(node.componentRef);
168
+ if (!componentDef || componentDef.implementation.kind !== 'composite') {
169
+ console.warn('[CircuitPreviewStore] drillInto: not a composite component:', node.componentRef);
170
+ return;
171
+ }
172
+ // Build the view circuit with boundary nodes
173
+ const viewCircuit = createDrillDownViewCircuit(componentDef);
174
+ // Push frame onto stack
175
+ const frame = {
176
+ nodeId,
177
+ nodeLabel: node.label || node.id,
178
+ componentName: node.componentRef,
179
+ circuit: viewCircuit,
180
+ };
181
+ set((state) => {
182
+ state.drillDownStack.push(frame);
183
+ });
184
+ // Apply the view circuit to canvas
185
+ useCircuitStore.getState().setCircuit(viewCircuit);
186
+ },
187
+ drillUp: () => {
188
+ const { drillDownStack } = get();
189
+ if (drillDownStack.length === 0)
190
+ return;
191
+ get().navigateTo(drillDownStack.length - 1);
192
+ },
193
+ navigateTo: (depth) => {
194
+ const { drillDownStack } = get();
195
+ if (depth === 0) {
196
+ // Return to top-level
197
+ set((state) => {
198
+ state.drillDownStack = [];
199
+ });
200
+ get().applyToCanvas();
201
+ return;
202
+ }
203
+ if (depth >= drillDownStack.length) {
204
+ // Already at or beyond target depth — no-op
205
+ return;
206
+ }
207
+ // Pop stack to target depth and apply that level's circuit
208
+ const targetFrame = drillDownStack[depth - 1];
209
+ set((state) => {
210
+ state.drillDownStack = state.drillDownStack.slice(0, depth);
211
+ });
212
+ // Apply the target frame's circuit
213
+ useCircuitStore.getState().setCircuit(targetFrame.circuit);
214
+ },
215
+ isDrilledIn: () => {
216
+ return get().drillDownStack.length > 0;
217
+ },
218
+ getPortValuePrefix: () => {
219
+ const { drillDownStack } = get();
220
+ if (drillDownStack.length === 0)
221
+ return '';
222
+ // Build prefix by concatenating all frame node IDs with dots
223
+ return drillDownStack.map(f => f.nodeId).join('.') + '.';
224
+ },
225
+ })));
226
+ //# sourceMappingURL=circuit-preview-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-preview-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-preview-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAElF;;;GAGG;AACH,SAAS,QAAQ,CAAC,IAAY;IAC5B,8DAA8D;IAC9D,uEAAuE;IACvE,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAsDD,MAAM,YAAY,GAAwB;IACxC,gBAAgB,EAAE,EAAE;IACpB,oBAAoB,EAAE,CAAC,CAAC;IACxB,kBAAkB,EAAE,IAAI;IACxB,OAAO,EAAE,EAAE;IACX,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,EAAE;CACnB,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,EAAuB,CACjE,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACnB,GAAG,YAAY;IAEf,mBAAmB,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC;YAClC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,kDAAkD;YAClF,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,gCAAgC;YAE3D,mDAAmD;YACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,oBAAoB,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;QACvB,MAAM,EAAE,gBAAgB,EAAE,GAAG,GAAG,EAAE,CAAC;QAEnC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACnC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,qCAAqC;QAClE,CAAC,CAAC,CAAC;QAEH,mCAAmC;QACnC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,EAAE,GAAG,EAAE;QAClB,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,GAAG,EAAE,CAAC;QAEzD,IAAI,oBAAoB,GAAG,CAAC,IAAI,oBAAoB,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;YAChF,eAAe,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;QAE/D,mEAAmE;QACnE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC;QACnD,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/E,CAAC;QAED,2EAA2E;QAC3E,MAAM,SAAS,GAAG,WAAW,CAAC,eAAe,EAAE;YAC7C,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC;YAChF,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;SACnE,CAAC,CAAC;QAEH,+DAA+D;QAC/D,eAAe,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEnD,CAAC;IAED,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW,EAAE,GAAG,EAAE;QAChB,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,GAAG,EAAE,CAAC;QAC7C,OAAO,OAAO,KAAK,iBAAiB,IAAI,iBAAiB,KAAK,EAAE,CAAC;IACnE,CAAC;IAED,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC5B,IAAI,QAAQ,EAAE,CAAC;YACb,0CAA0C;YAC1C,2DAA2D;YAC3D,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,2DAA2D;YAC3D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACZ,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iBAAiB,EAAE,GAAG,EAAE;QACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,kBAAkB,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE;QACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,kDAAkD;YAClD,IACE,KAAK,CAAC,oBAAoB,IAAI,CAAC;gBAC/B,KAAK,CAAC,oBAAoB,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAC1D,CAAC;gBACD,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC;YAC/D,CAAC;YAED,0BAA0B;YAC1B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8BAA8B;IAE9B,SAAS,EAAE,CAAC,MAAc,EAAE,EAAE;QAC5B,+EAA+E;QAC/E,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,GAAG,EAAE,CAAC;QAEzE,IAAI,aAA6B,CAAC;QAClC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,uEAAuE;YACvE,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,gBAAgB;QAChB,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,MAAM,CAAC,CAAC;YACzE,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,MAAM,YAAY,GAAG,sBAAsB,CAAC,QAAQ,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzF,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,6DAA6D,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/F,OAAO;QACT,CAAC;QAED,6CAA6C;QAC7C,MAAM,WAAW,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;QAE7D,wBAAwB;QACxB,MAAM,KAAK,GAAmB;YAC5B,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE;YAChC,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,OAAO,EAAE,WAAW;SACrB,CAAC;QAEF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,mCAAmC;QACnC,eAAe,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE,CAAC;QACjC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAExC,GAAG,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU,EAAE,CAAC,KAAa,EAAE,EAAE;QAC5B,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE,CAAC;QAEjC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,sBAAsB;YACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACZ,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,IAAI,cAAc,CAAC,MAAM,EAAE,CAAC;YACnC,4CAA4C;YAC5C,OAAO;QACT,CAAC;QAED,2DAA2D;QAC3D,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACZ,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,mCAAmC;QACnC,eAAe,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,WAAW,EAAE,GAAG,EAAE;QAChB,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,kBAAkB,EAAE,GAAG,EAAE;QACvB,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,EAAE,CAAC;QACjC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3C,6DAA6D;QAC7D,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC,CACJ,CAAC"}
@@ -0,0 +1,354 @@
1
+ /**
2
+ * Circuit Store - IR v0.1 State Management
3
+ *
4
+ * This store manages the Circuit (IR v0.1) format, which uses name-based ports
5
+ * and provides the canonical representation for the visual editor.
6
+ *
7
+ * Migration note: This replaces the legacy ir-store.ts which used index-based ports.
8
+ * During migration, both stores coexist with conversion between formats.
9
+ */
10
+ import type { Circuit, Node, Connection, PortPath, PortDescriptor, ArgumentValue } from '../types/circuit';
11
+ interface CircuitActions {
12
+ setCircuit: (circuit: Circuit) => void;
13
+ clearCircuit: () => void;
14
+ getCircuit: () => Circuit | null;
15
+ addNode: (componentRef: string, args?: Record<string, ArgumentValue>) => string;
16
+ removeNode: (nodeId: string) => void;
17
+ updateNode: (nodeId: string, updates: Partial<Node>) => void;
18
+ getNode: (nodeId: string) => Node | undefined;
19
+ addConnection: (source: PortPath, target: PortPath) => string | null;
20
+ removeConnection: (connectionId: string) => void;
21
+ getConnection: (connectionId: string) => Connection | undefined;
22
+ getNodeConnections: (nodeId: string) => Connection[];
23
+ getNodeOutputPorts: (nodeId: string) => PortDescriptor[];
24
+ getNodeInputPorts: (nodeId: string) => PortDescriptor[];
25
+ }
26
+ export interface CircuitStore extends CircuitActions {
27
+ circuit: Circuit | null;
28
+ }
29
+ export declare const useCircuitStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<CircuitStore>, "setState"> & {
30
+ setState(nextStateOrUpdater: CircuitStore | Partial<CircuitStore> | ((state: {
31
+ circuit: {
32
+ version: 1;
33
+ name: string;
34
+ inputs: {
35
+ name: string;
36
+ portType: {
37
+ kind: "bit";
38
+ } | {
39
+ kind: "bus";
40
+ width: number;
41
+ };
42
+ description?: string | undefined;
43
+ defaultValue?: (import("../types").BitValue | import("../types").BusValue) | undefined;
44
+ widthParam?: string | undefined;
45
+ widthMultiplier?: number | undefined;
46
+ }[];
47
+ outputs: {
48
+ name: string;
49
+ portType: {
50
+ kind: "bit";
51
+ } | {
52
+ kind: "bus";
53
+ width: number;
54
+ };
55
+ description?: string | undefined;
56
+ defaultValue?: (import("../types").BitValue | import("../types").BusValue) | undefined;
57
+ widthParam?: string | undefined;
58
+ widthMultiplier?: number | undefined;
59
+ }[];
60
+ clocks: {
61
+ name: string;
62
+ description?: string | undefined;
63
+ }[];
64
+ state: {
65
+ id: string;
66
+ name: string;
67
+ stateType: {
68
+ kind: "bit";
69
+ } | {
70
+ kind: "bus";
71
+ width: number;
72
+ } | {
73
+ kind: "memory";
74
+ addressWidth: number;
75
+ dataWidth: number;
76
+ };
77
+ initialValue: string | number | boolean | {
78
+ data: Map<number, number>;
79
+ addressWidth: number;
80
+ dataWidth: number;
81
+ };
82
+ currentValue?: string | number | boolean | {
83
+ data: Map<number, number>;
84
+ addressWidth: number;
85
+ dataWidth: number;
86
+ } | undefined;
87
+ clockRef?: string | undefined;
88
+ edge?: "rising" | "falling" | undefined;
89
+ }[];
90
+ nodes: {
91
+ id: string;
92
+ label?: string | undefined;
93
+ componentRef: string;
94
+ arguments: {
95
+ [x: string]: string | number | boolean | number[] | {
96
+ [x: number]: number;
97
+ };
98
+ };
99
+ inputs: {
100
+ id: string;
101
+ name: string;
102
+ portType: {
103
+ kind: "bit";
104
+ } | {
105
+ kind: "bus";
106
+ width: number;
107
+ };
108
+ value?: (import("../types").BitValue | import("../types").BusValue) | undefined;
109
+ }[];
110
+ outputs: {
111
+ id: string;
112
+ name: string;
113
+ portType: {
114
+ kind: "bit";
115
+ } | {
116
+ kind: "bus";
117
+ width: number;
118
+ };
119
+ value?: (import("../types").BitValue | import("../types").BusValue) | undefined;
120
+ }[];
121
+ clocks: {
122
+ id: string;
123
+ name: string;
124
+ state?: {
125
+ value: boolean;
126
+ edge: "rising" | "falling" | "none";
127
+ } | undefined;
128
+ }[];
129
+ }[];
130
+ connections: {
131
+ id: string;
132
+ source: {
133
+ nodeId: string;
134
+ portName: string;
135
+ };
136
+ target: {
137
+ nodeId: string;
138
+ portName: string;
139
+ };
140
+ portType: {
141
+ kind: "bit";
142
+ } | {
143
+ kind: "bus";
144
+ width: number;
145
+ };
146
+ }[];
147
+ implementation: {
148
+ kind: "primitive";
149
+ } | {
150
+ kind: "composite";
151
+ } | {
152
+ kind: "intrinsic";
153
+ intrinsicType: string;
154
+ };
155
+ metadata?: {
156
+ source?: {
157
+ filename?: string | undefined;
158
+ lineNumber?: number | undefined;
159
+ } | undefined;
160
+ description?: string | undefined;
161
+ author?: string | undefined;
162
+ version?: string | undefined;
163
+ testCases?: {
164
+ name: string;
165
+ inputs: {
166
+ [x: string]: number | boolean;
167
+ };
168
+ expectedOutputs: {
169
+ [x: string]: number | boolean;
170
+ };
171
+ }[] | undefined;
172
+ tags?: string[] | undefined;
173
+ timing?: import("../types/circuit").ComponentKind | undefined;
174
+ outputDependency?: "state-only" | "state+inputs" | "input-dependent" | undefined;
175
+ } | undefined;
176
+ } | null;
177
+ setCircuit: (circuit: Circuit) => void;
178
+ clearCircuit: () => void;
179
+ getCircuit: () => Circuit | null;
180
+ addNode: (componentRef: string, args?: Record<string, ArgumentValue>) => string;
181
+ removeNode: (nodeId: string) => void;
182
+ updateNode: (nodeId: string, updates: Partial<Node>) => void;
183
+ getNode: (nodeId: string) => Node | undefined;
184
+ addConnection: (source: PortPath, target: PortPath) => string | null;
185
+ removeConnection: (connectionId: string) => void;
186
+ getConnection: (connectionId: string) => Connection | undefined;
187
+ getNodeConnections: (nodeId: string) => Connection[];
188
+ getNodeOutputPorts: (nodeId: string) => PortDescriptor[];
189
+ getNodeInputPorts: (nodeId: string) => PortDescriptor[];
190
+ }) => void), shouldReplace?: false): void;
191
+ setState(nextStateOrUpdater: CircuitStore | ((state: {
192
+ circuit: {
193
+ version: 1;
194
+ name: string;
195
+ inputs: {
196
+ name: string;
197
+ portType: {
198
+ kind: "bit";
199
+ } | {
200
+ kind: "bus";
201
+ width: number;
202
+ };
203
+ description?: string | undefined;
204
+ defaultValue?: (import("../types").BitValue | import("../types").BusValue) | undefined;
205
+ widthParam?: string | undefined;
206
+ widthMultiplier?: number | undefined;
207
+ }[];
208
+ outputs: {
209
+ name: string;
210
+ portType: {
211
+ kind: "bit";
212
+ } | {
213
+ kind: "bus";
214
+ width: number;
215
+ };
216
+ description?: string | undefined;
217
+ defaultValue?: (import("../types").BitValue | import("../types").BusValue) | undefined;
218
+ widthParam?: string | undefined;
219
+ widthMultiplier?: number | undefined;
220
+ }[];
221
+ clocks: {
222
+ name: string;
223
+ description?: string | undefined;
224
+ }[];
225
+ state: {
226
+ id: string;
227
+ name: string;
228
+ stateType: {
229
+ kind: "bit";
230
+ } | {
231
+ kind: "bus";
232
+ width: number;
233
+ } | {
234
+ kind: "memory";
235
+ addressWidth: number;
236
+ dataWidth: number;
237
+ };
238
+ initialValue: string | number | boolean | {
239
+ data: Map<number, number>;
240
+ addressWidth: number;
241
+ dataWidth: number;
242
+ };
243
+ currentValue?: string | number | boolean | {
244
+ data: Map<number, number>;
245
+ addressWidth: number;
246
+ dataWidth: number;
247
+ } | undefined;
248
+ clockRef?: string | undefined;
249
+ edge?: "rising" | "falling" | undefined;
250
+ }[];
251
+ nodes: {
252
+ id: string;
253
+ label?: string | undefined;
254
+ componentRef: string;
255
+ arguments: {
256
+ [x: string]: string | number | boolean | number[] | {
257
+ [x: number]: number;
258
+ };
259
+ };
260
+ inputs: {
261
+ id: string;
262
+ name: string;
263
+ portType: {
264
+ kind: "bit";
265
+ } | {
266
+ kind: "bus";
267
+ width: number;
268
+ };
269
+ value?: (import("../types").BitValue | import("../types").BusValue) | undefined;
270
+ }[];
271
+ outputs: {
272
+ id: string;
273
+ name: string;
274
+ portType: {
275
+ kind: "bit";
276
+ } | {
277
+ kind: "bus";
278
+ width: number;
279
+ };
280
+ value?: (import("../types").BitValue | import("../types").BusValue) | undefined;
281
+ }[];
282
+ clocks: {
283
+ id: string;
284
+ name: string;
285
+ state?: {
286
+ value: boolean;
287
+ edge: "rising" | "falling" | "none";
288
+ } | undefined;
289
+ }[];
290
+ }[];
291
+ connections: {
292
+ id: string;
293
+ source: {
294
+ nodeId: string;
295
+ portName: string;
296
+ };
297
+ target: {
298
+ nodeId: string;
299
+ portName: string;
300
+ };
301
+ portType: {
302
+ kind: "bit";
303
+ } | {
304
+ kind: "bus";
305
+ width: number;
306
+ };
307
+ }[];
308
+ implementation: {
309
+ kind: "primitive";
310
+ } | {
311
+ kind: "composite";
312
+ } | {
313
+ kind: "intrinsic";
314
+ intrinsicType: string;
315
+ };
316
+ metadata?: {
317
+ source?: {
318
+ filename?: string | undefined;
319
+ lineNumber?: number | undefined;
320
+ } | undefined;
321
+ description?: string | undefined;
322
+ author?: string | undefined;
323
+ version?: string | undefined;
324
+ testCases?: {
325
+ name: string;
326
+ inputs: {
327
+ [x: string]: number | boolean;
328
+ };
329
+ expectedOutputs: {
330
+ [x: string]: number | boolean;
331
+ };
332
+ }[] | undefined;
333
+ tags?: string[] | undefined;
334
+ timing?: import("../types/circuit").ComponentKind | undefined;
335
+ outputDependency?: "state-only" | "state+inputs" | "input-dependent" | undefined;
336
+ } | undefined;
337
+ } | null;
338
+ setCircuit: (circuit: Circuit) => void;
339
+ clearCircuit: () => void;
340
+ getCircuit: () => Circuit | null;
341
+ addNode: (componentRef: string, args?: Record<string, ArgumentValue>) => string;
342
+ removeNode: (nodeId: string) => void;
343
+ updateNode: (nodeId: string, updates: Partial<Node>) => void;
344
+ getNode: (nodeId: string) => Node | undefined;
345
+ addConnection: (source: PortPath, target: PortPath) => string | null;
346
+ removeConnection: (connectionId: string) => void;
347
+ getConnection: (connectionId: string) => Connection | undefined;
348
+ getNodeConnections: (nodeId: string) => Connection[];
349
+ getNodeOutputPorts: (nodeId: string) => PortDescriptor[];
350
+ getNodeInputPorts: (nodeId: string) => PortDescriptor[];
351
+ }) => void), shouldReplace: true): void;
352
+ }>;
353
+ export {};
354
+ //# sourceMappingURL=circuit-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-store.d.ts","sourceRoot":"","sources":["../../../src/editor/stores/circuit-store.ts"],"names":[],"mappings":"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"}