@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,30 @@
1
+ export interface VCDSignal {
2
+ /** Fully-qualified key: "scope.name" or just "name" at root */
3
+ key: string;
4
+ /** Display name (last path segment) */
5
+ name: string;
6
+ /** Scope path, e.g. ["Counter", "reg"] */
7
+ scope: string[];
8
+ width: number;
9
+ values: (number | boolean)[];
10
+ }
11
+ export interface ParsedVCD {
12
+ /** Top-level circuit/module name */
13
+ circuit: string;
14
+ ticks: number;
15
+ /** All signals, ordered by declaration */
16
+ signals: VCDSignal[];
17
+ /** Unique scope paths present (excluding root), ordered */
18
+ scopes: string[][];
19
+ }
20
+ export declare function parseVCD(vcd: string): ParsedVCD;
21
+ export interface WaveformViewerProps {
22
+ vcd: string;
23
+ inputs?: string[];
24
+ circuit?: string;
25
+ steadyStateAt?: number;
26
+ onLoadVCD?: (vcd: string) => void;
27
+ onClose?: () => void;
28
+ }
29
+ export declare function WaveformViewer({ vcd, inputs: inputOverride, circuit: circuitOverride, steadyStateAt, onLoadVCD, onClose }: WaveformViewerProps): import("react/jsx-runtime").JSX.Element;
30
+ //# sourceMappingURL=WaveformViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformViewer.d.ts","sourceRoot":"","sources":["../../src/waveform/WaveformViewer.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,2DAA2D;IAC3D,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAmI/C;AAuID,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,mBAAmB,2CA0O9I"}
@@ -0,0 +1,356 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo, useRef, useEffect, useCallback, useState } from 'react';
3
+ export function parseVCD(vcd) {
4
+ const lines = vcd.split('\n');
5
+ const idMeta = {};
6
+ const scopeStack = [];
7
+ let circuit = 'circuit';
8
+ for (const rawLine of lines) {
9
+ const line = rawLine.trim();
10
+ if (line.startsWith('$scope module ')) {
11
+ const scopeName = line.replace('$scope module ', '').replace(' $end', '').trim();
12
+ if (scopeStack.length === 0)
13
+ circuit = scopeName;
14
+ scopeStack.push(scopeName);
15
+ }
16
+ else if (line.startsWith('$upscope')) {
17
+ scopeStack.pop();
18
+ }
19
+ else if (line.startsWith('$var wire ')) {
20
+ const parts = line.split(/\s+/);
21
+ if (parts.length >= 5) {
22
+ const width = parseInt(parts[2], 10);
23
+ const id = parts[3];
24
+ const name = parts[4];
25
+ idMeta[id] = { name, scope: [...scopeStack], width };
26
+ }
27
+ }
28
+ }
29
+ // Collect ordered ids
30
+ const orderedIds = [];
31
+ for (const rawLine of lines) {
32
+ const line = rawLine.trim();
33
+ if (line.startsWith('$var wire ')) {
34
+ const parts = line.split(/\s+/);
35
+ if (parts.length >= 5)
36
+ orderedIds.push(parts[3]);
37
+ }
38
+ }
39
+ // Pass 2: replay value changes
40
+ let maxTick = 0;
41
+ let currentTick = 0;
42
+ const rawChanges = [];
43
+ for (const rawLine of lines) {
44
+ const line = rawLine.trim();
45
+ if (line.startsWith('#')) {
46
+ currentTick = parseInt(line.slice(1), 10);
47
+ if (currentTick > maxTick)
48
+ maxTick = currentTick;
49
+ continue;
50
+ }
51
+ if ((line.startsWith('0') || line.startsWith('1')) && line.length >= 2 && !line.startsWith('$')) {
52
+ const val = line[0] === '1';
53
+ const id = line.slice(1);
54
+ if (idMeta[id])
55
+ rawChanges.push({ tick: currentTick, id, value: val });
56
+ continue;
57
+ }
58
+ if (line.startsWith('b')) {
59
+ const spaceIdx = line.indexOf(' ');
60
+ if (spaceIdx > 0) {
61
+ const binStr = line.slice(1, spaceIdx);
62
+ const id = line.slice(spaceIdx + 1).trim();
63
+ if (idMeta[id])
64
+ rawChanges.push({ tick: currentTick, id, value: parseInt(binStr, 2) });
65
+ }
66
+ }
67
+ }
68
+ const ticks = maxTick;
69
+ // Build per-signal value arrays
70
+ const valueArrays = {};
71
+ const lastValue = {};
72
+ for (const id of orderedIds) {
73
+ const meta = idMeta[id];
74
+ if (!meta)
75
+ continue;
76
+ const init = meta.width === 1 ? false : 0;
77
+ valueArrays[id] = new Array(ticks).fill(init);
78
+ lastValue[id] = init;
79
+ }
80
+ rawChanges.sort((a, b) => a.tick - b.tick);
81
+ for (const { tick, id, value } of rawChanges) {
82
+ if (!valueArrays[id])
83
+ continue;
84
+ lastValue[id] = value;
85
+ for (let t = tick; t < ticks; t++) {
86
+ valueArrays[id][t] = value;
87
+ }
88
+ }
89
+ // Build signal list (deduplicate by key = scope path + name)
90
+ const seenKeys = new Set();
91
+ const signals = [];
92
+ for (const id of orderedIds) {
93
+ const meta = idMeta[id];
94
+ if (!meta)
95
+ continue;
96
+ // Key: "Counter/reg/data" style — use "/" separator for display
97
+ const scopePath = meta.scope.slice(1); // drop root circuit name
98
+ const key = [...scopePath, meta.name].join('/');
99
+ if (seenKeys.has(key))
100
+ continue;
101
+ seenKeys.add(key);
102
+ signals.push({
103
+ key,
104
+ name: meta.name,
105
+ scope: meta.scope,
106
+ width: meta.width,
107
+ values: valueArrays[id] ?? [],
108
+ });
109
+ }
110
+ // Collect unique non-root scopes
111
+ const scopeKeySet = new Set();
112
+ const scopes = [];
113
+ for (const sig of signals) {
114
+ if (sig.scope.length <= 1)
115
+ continue; // root-level, no sub-scope
116
+ const sub = sig.scope.slice(1);
117
+ const k = sub.join('/');
118
+ if (!scopeKeySet.has(k)) {
119
+ scopeKeySet.add(k);
120
+ scopes.push(sub);
121
+ }
122
+ }
123
+ return { circuit, ticks, signals, scopes };
124
+ }
125
+ // ============================================================================
126
+ // Rendering
127
+ // ============================================================================
128
+ const CYCLE_WIDTH = 40;
129
+ const ROW_HEIGHT = 28;
130
+ const LABEL_WIDTH = 140;
131
+ const HEADER_HEIGHT = 24;
132
+ const SCOPE_ROW_HEIGHT = 20;
133
+ const INPUT_COLOR = '#60a5fa';
134
+ const OUTPUT_COLOR = '#34d399';
135
+ const INTERNAL_COLOR = '#a78bfa';
136
+ function isBitSignal(values) {
137
+ return values.every((v) => v === 0 || v === 1 || v === true || v === false);
138
+ }
139
+ function BitWaveform({ values, color, width }) {
140
+ const h = ROW_HEIGHT;
141
+ const high = 5;
142
+ const low = h - 5;
143
+ let d = '';
144
+ for (let i = 0; i < values.length; i++) {
145
+ const x = i * CYCLE_WIDTH;
146
+ const y = values[i] ? high : low;
147
+ if (i === 0) {
148
+ d += `M ${x} ${y}`;
149
+ }
150
+ else {
151
+ const prevY = values[i - 1] ? high : low;
152
+ if (y !== prevY)
153
+ d += ` L ${x} ${prevY} L ${x} ${y}`;
154
+ }
155
+ d += ` L ${x + CYCLE_WIDTH} ${y}`;
156
+ }
157
+ const fillD = d + ` L ${values.length * CYCLE_WIDTH} ${low} L 0 ${low} Z`;
158
+ return (_jsxs("svg", { width: width, height: h, style: { display: 'block' }, children: [_jsx("path", { d: fillD, fill: color, opacity: 0.08 }), _jsx("path", { d: d, fill: "none", stroke: color, strokeWidth: 1.5 })] }));
159
+ }
160
+ function BusWaveform({ values, color, width }) {
161
+ const h = ROW_HEIGHT;
162
+ const pad = 4;
163
+ const top = pad;
164
+ const bot = h - pad;
165
+ const slant = 4;
166
+ const rects = [];
167
+ let runStart = 0;
168
+ let runVal = values[0];
169
+ function pushRun(start, end, val) {
170
+ const x1 = start * CYCLE_WIDTH;
171
+ const x2 = end * CYCLE_WIDTH;
172
+ const hex = typeof val === 'number' ? `0x${(val >>> 0).toString(16).toUpperCase()}` : String(val);
173
+ const runWidth = x2 - x1;
174
+ const points = [
175
+ `${x1 + Math.min(slant, runWidth / 2)},${top}`,
176
+ `${x2 - Math.min(slant, runWidth / 2)},${top}`,
177
+ `${x2},${(top + bot) / 2}`,
178
+ `${x2 - Math.min(slant, runWidth / 2)},${bot}`,
179
+ `${x1 + Math.min(slant, runWidth / 2)},${bot}`,
180
+ `${x1},${(top + bot) / 2}`,
181
+ ].join(' ');
182
+ rects.push(_jsxs("g", { children: [_jsx("polygon", { points: points, fill: color, fillOpacity: 0.08, stroke: color, strokeWidth: 1.5, strokeOpacity: 0.6 }), runWidth >= 24 && (_jsx("text", { x: (x1 + x2) / 2, y: h / 2, textAnchor: "middle", dominantBaseline: "central", fill: color, fontSize: 10, fontFamily: "monospace", children: hex }))] }, start));
183
+ }
184
+ for (let i = 1; i <= values.length; i++) {
185
+ if (i === values.length || values[i] !== runVal) {
186
+ pushRun(runStart, i, runVal);
187
+ if (i < values.length) {
188
+ runStart = i;
189
+ runVal = values[i];
190
+ }
191
+ }
192
+ }
193
+ return (_jsx("svg", { width: width, height: h, style: { display: 'block' }, children: rects }));
194
+ }
195
+ // ============================================================================
196
+ // Scope grouping
197
+ // ============================================================================
198
+ /**
199
+ * Group signals into scope sections.
200
+ * Root-level signals come first (no heading), then each sub-scope gets a header.
201
+ */
202
+ function groupByScope(signals, _circuit) {
203
+ const rootSignals = signals.filter((s) => s.scope.length <= 1);
204
+ // Group by immediate child scope under root
205
+ const scopeMap = new Map();
206
+ for (const sig of signals) {
207
+ if (sig.scope.length <= 1)
208
+ continue;
209
+ const immediateScope = sig.scope.slice(1).join('/');
210
+ if (!scopeMap.has(immediateScope))
211
+ scopeMap.set(immediateScope, []);
212
+ scopeMap.get(immediateScope).push(sig);
213
+ }
214
+ const result = [];
215
+ if (rootSignals.length > 0)
216
+ result.push({ type: 'root', signals: rootSignals });
217
+ for (const [scopePath, sigs] of scopeMap) {
218
+ const parts = scopePath.split('/');
219
+ result.push({ type: 'scope', label: parts.join(' › '), depth: parts.length - 1, signals: sigs });
220
+ }
221
+ return result;
222
+ }
223
+ export function WaveformViewer({ vcd, inputs: inputOverride, circuit: circuitOverride, steadyStateAt, onLoadVCD, onClose }) {
224
+ const scrollRef = useRef(null);
225
+ const fileInputRef = useRef(null);
226
+ const [collapsedScopes, setCollapsedScopes] = useState(new Set());
227
+ const parsed = useMemo(() => parseVCD(vcd), [vcd]);
228
+ const circuit = circuitOverride ?? parsed.circuit;
229
+ const inputSet = new Set(inputOverride ?? []);
230
+ useEffect(() => {
231
+ if (scrollRef.current)
232
+ scrollRef.current.scrollLeft = 0;
233
+ setCollapsedScopes(new Set());
234
+ }, [vcd]);
235
+ const handleFileChange = useCallback((e) => {
236
+ const file = e.target.files?.[0];
237
+ if (!file)
238
+ return;
239
+ const reader = new FileReader();
240
+ reader.onload = (ev) => {
241
+ const text = ev.target?.result;
242
+ if (text)
243
+ onLoadVCD?.(text);
244
+ };
245
+ reader.readAsText(file);
246
+ e.target.value = '';
247
+ }, [onLoadVCD]);
248
+ const handleDownload = useCallback(() => {
249
+ const blob = new Blob([vcd], { type: 'text/plain' });
250
+ const url = URL.createObjectURL(blob);
251
+ const a = document.createElement('a');
252
+ a.href = url;
253
+ a.download = `${circuit}.vcd`;
254
+ a.click();
255
+ URL.revokeObjectURL(url);
256
+ }, [vcd, circuit]);
257
+ const toggleScope = useCallback((label) => {
258
+ setCollapsedScopes((prev) => {
259
+ const next = new Set(prev);
260
+ if (next.has(label))
261
+ next.delete(label);
262
+ else
263
+ next.add(label);
264
+ return next;
265
+ });
266
+ }, []);
267
+ const groups = useMemo(() => groupByScope(parsed.signals, circuit), [parsed.signals, circuit]);
268
+ const waveWidth = Math.max(parsed.ticks * CYCLE_WIDTH, 100);
269
+ const rows = [];
270
+ const labelRows = [];
271
+ for (const group of groups) {
272
+ if (group.type === 'scope') {
273
+ const collapsed = collapsedScopes.has(group.label);
274
+ labelRows.push({ type: 'scope-header', label: group.label, height: SCOPE_ROW_HEIGHT });
275
+ rows.push({ type: 'scope-header', label: group.label, height: SCOPE_ROW_HEIGHT });
276
+ if (!collapsed) {
277
+ for (const sig of group.signals) {
278
+ const isInput = inputSet.has(sig.name);
279
+ const color = isInput ? INPUT_COLOR : INTERNAL_COLOR;
280
+ labelRows.push({ type: 'signal', signal: sig, color });
281
+ rows.push({ type: 'signal', signal: sig, color });
282
+ }
283
+ }
284
+ }
285
+ else {
286
+ for (const sig of group.signals) {
287
+ const isInput = inputSet.has(sig.name);
288
+ const color = isInput ? INPUT_COLOR : OUTPUT_COLOR;
289
+ labelRows.push({ type: 'signal', signal: sig, color });
290
+ rows.push({ type: 'signal', signal: sig, color });
291
+ }
292
+ }
293
+ }
294
+ const containerStyle = {
295
+ background: 'var(--card, #0f172a)',
296
+ borderTop: '1px solid var(--border, #334155)',
297
+ fontSize: 12,
298
+ color: 'var(--muted-foreground, #94a3b8)',
299
+ userSelect: 'none',
300
+ height: '100%',
301
+ display: 'flex',
302
+ flexDirection: 'column',
303
+ minHeight: 0,
304
+ };
305
+ const headerStyle = {
306
+ padding: '4px 8px',
307
+ display: 'flex',
308
+ alignItems: 'center',
309
+ gap: 8,
310
+ borderBottom: '1px solid var(--border, #1e293b)',
311
+ fontSize: 11,
312
+ fontWeight: 600,
313
+ };
314
+ return (_jsxs("div", { style: containerStyle, children: [_jsx("style", { children: `
315
+ .wf-scroll { scrollbar-width: thin; scrollbar-color: var(--border, #334155) transparent; }
316
+ .wf-scroll::-webkit-scrollbar { height: 6px; }
317
+ .wf-scroll::-webkit-scrollbar-track { background: transparent; }
318
+ .wf-scroll::-webkit-scrollbar-thumb { background: var(--border, #334155); border-radius: 3px; }
319
+ .wf-scroll::-webkit-scrollbar-thumb:hover { background: var(--muted-foreground, #475569); }
320
+ .wf-btn { background: var(--muted, #1e293b); border: 1px solid var(--border, #334155); color: var(--muted-foreground, #94a3b8); padding: 2px 8px; border-radius: 4px; font-size: 11px; cursor: pointer; }
321
+ .wf-btn:hover { background: var(--accent, #334155); color: var(--accent-foreground, inherit); }
322
+ .wf-scope-hdr { display: flex; align-items: center; gap: 4px; padding: 0 8px; background: var(--muted, #0d1929); border-bottom: 1px solid var(--border, #1e293b); border-top: 1px solid var(--border, #1e293b); cursor: pointer; font-family: monospace; font-size: 10px; color: var(--muted-foreground, #64748b); opacity: 0.85; }
323
+ .wf-scope-hdr:hover { color: var(--foreground, #94a3b8); opacity: 1; }
324
+ ` }), _jsxs("div", { style: headerStyle, children: [_jsx("span", { children: "Waveforms" }), _jsxs("span", { style: { fontWeight: 400, flex: 1 }, children: [circuit, " \u2014 ", parsed.ticks, " ticks", steadyStateAt != null && (_jsxs("span", { style: { color: '#34d399', marginLeft: 6 }, children: ["steady @ tick ", steadyStateAt] }))] }), _jsx("button", { className: "wf-btn", onClick: handleDownload, title: `Save ${circuit}.vcd`, children: "Save VCD" }), _jsx("button", { className: "wf-btn", onClick: () => fileInputRef.current?.click(), children: "Load VCD" }), _jsx("input", { ref: fileInputRef, type: "file", accept: ".vcd", style: { display: 'none' }, onChange: handleFileChange }), onClose && (_jsx("button", { className: "wf-btn", onClick: onClose, title: "Close waveform panel", "aria-label": "Close waveform panel", children: "\u00D7" }))] }), _jsxs("div", { style: { display: 'flex', flex: 1, minHeight: 0, overflowY: 'auto' }, children: [_jsxs("div", { style: { width: LABEL_WIDTH, flexShrink: 0, borderRight: '1px solid var(--border, #1e293b)' }, children: [_jsx("div", { style: { height: HEADER_HEIGHT } }), labelRows.map((row, i) => {
325
+ if (row.type === 'scope-header') {
326
+ const collapsed = collapsedScopes.has(row.label);
327
+ return (_jsxs("div", { className: "wf-scope-hdr", style: { height: SCOPE_ROW_HEIGHT }, onClick: () => toggleScope(row.label), children: [_jsx("span", { style: { fontSize: 9 }, children: collapsed ? '▶' : '▼' }), _jsx("span", { children: row.label })] }, `sh-${i}`));
328
+ }
329
+ const isScope = row.signal.scope.length > 1;
330
+ return (_jsx("div", { style: {
331
+ width: LABEL_WIDTH,
332
+ paddingRight: 8,
333
+ paddingLeft: isScope ? 16 : 8,
334
+ textAlign: 'right',
335
+ fontSize: 11,
336
+ fontFamily: 'monospace',
337
+ color: row.color,
338
+ overflow: 'hidden',
339
+ textOverflow: 'ellipsis',
340
+ whiteSpace: 'nowrap',
341
+ height: ROW_HEIGHT,
342
+ lineHeight: `${ROW_HEIGHT}px`,
343
+ borderBottom: '1px solid var(--border, #0d1929)',
344
+ }, title: row.signal.key, children: row.signal.name }, `lbl-${i}`));
345
+ })] }), _jsxs("div", { ref: scrollRef, className: "wf-scroll", style: { overflowX: 'auto', overflowY: 'hidden', flex: 1 }, children: [_jsxs("svg", { width: waveWidth, height: HEADER_HEIGHT, style: { display: 'block' }, children: [Array.from({ length: parsed.ticks }, (_, i) => (_jsxs("g", { children: [_jsx("line", { x1: i * CYCLE_WIDTH, y1: 0, x2: i * CYCLE_WIDTH, y2: HEADER_HEIGHT, stroke: "var(--border, #1e293b)", strokeWidth: 1 }), i % 2 === 0 && (_jsx("text", { x: i * CYCLE_WIDTH + CYCLE_WIDTH / 2, y: 14, textAnchor: "middle", fill: "var(--muted-foreground, #475569)", fontSize: 9, fontFamily: "monospace", children: i }))] }, i))), steadyStateAt != null && (_jsx("line", { x1: steadyStateAt * CYCLE_WIDTH, y1: 0, x2: steadyStateAt * CYCLE_WIDTH, y2: HEADER_HEIGHT, stroke: "#34d399", strokeWidth: 2, strokeDasharray: "3,3" }))] }), rows.map((row, i) => {
346
+ if (row.type === 'scope-header') {
347
+ return (_jsx("div", { style: { height: SCOPE_ROW_HEIGHT, background: 'var(--muted, #0d1929)', borderBottom: '1px solid var(--border, #1e293b)', borderTop: '1px solid var(--border, #1e293b)' } }, `wsh-${i}`));
348
+ }
349
+ const { signal, color } = row;
350
+ const isBit = isBitSignal(signal.values);
351
+ return (_jsxs("div", { style: { position: 'relative', height: ROW_HEIGHT, borderBottom: '1px solid var(--border, #0d1929)' }, children: [isBit
352
+ ? _jsx(BitWaveform, { values: signal.values, color: color, width: waveWidth })
353
+ : _jsx(BusWaveform, { values: signal.values, color: color, width: waveWidth }), _jsxs("svg", { width: waveWidth, height: ROW_HEIGHT, style: { position: 'absolute', top: 0, left: 0, pointerEvents: 'none' }, children: [Array.from({ length: parsed.ticks }, (_, t) => (_jsx("line", { x1: t * CYCLE_WIDTH, y1: 0, x2: t * CYCLE_WIDTH, y2: ROW_HEIGHT, stroke: "var(--border, #1e293b)", strokeWidth: 1 }, t))), steadyStateAt != null && (_jsx("line", { x1: steadyStateAt * CYCLE_WIDTH, y1: 0, x2: steadyStateAt * CYCLE_WIDTH, y2: ROW_HEIGHT, stroke: "#34d399", strokeWidth: 2, strokeDasharray: "3,3" }))] })] }, `wav-${i}`));
354
+ })] })] })] }));
355
+ }
356
+ //# sourceMappingURL=WaveformViewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaveformViewer.js","sourceRoot":"","sources":["../../src/waveform/WaveformViewer.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,110 @@
1
+ {
2
+ "name": "@simten/ui",
3
+ "version": "0.1.1",
4
+ "description": "Canvas, editor, and waveform React components for Simten. Built on React Flow with dagre layout and Zustand stores.",
5
+ "license": "Apache-2.0",
6
+ "author": "Charles Harris",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/simtenHQ/simten.git",
10
+ "directory": "packages/ui"
11
+ },
12
+ "keywords": [
13
+ "circuit-simulator",
14
+ "hardware",
15
+ "react",
16
+ "react-flow",
17
+ "circuit",
18
+ "digital-logic",
19
+ "canvas",
20
+ "waveform"
21
+ ],
22
+ "type": "module",
23
+ "sideEffects": false,
24
+ "exports": {
25
+ ".": {
26
+ "types": "./dist/index.d.ts",
27
+ "import": "./dist/index.js"
28
+ },
29
+ "./editor": {
30
+ "types": "./dist/editor/index.d.ts",
31
+ "import": "./dist/editor/index.js"
32
+ },
33
+ "./editor/stores": {
34
+ "types": "./dist/editor/stores/index.d.ts",
35
+ "import": "./dist/editor/stores/index.js"
36
+ },
37
+ "./editor/types": {
38
+ "types": "./dist/editor/types/index.d.ts",
39
+ "import": "./dist/editor/types/index.js"
40
+ },
41
+ "./editor/components": {
42
+ "types": "./dist/editor/components/index.d.ts",
43
+ "import": "./dist/editor/components/index.js"
44
+ },
45
+ "./editor/hooks": {
46
+ "types": "./dist/editor/hooks/index.d.ts",
47
+ "import": "./dist/editor/hooks/index.js"
48
+ },
49
+ "./nodes": {
50
+ "types": "./dist/nodes/index.d.ts",
51
+ "import": "./dist/nodes/index.js"
52
+ },
53
+ "./canvas": {
54
+ "types": "./dist/canvas/index.d.ts",
55
+ "import": "./dist/canvas/index.js"
56
+ },
57
+ "./waveform": {
58
+ "types": "./dist/waveform/WaveformViewer.d.ts",
59
+ "import": "./dist/waveform/WaveformViewer.js"
60
+ },
61
+ "./sandbox": {
62
+ "types": "./dist/sandbox/index.d.ts",
63
+ "import": "./dist/sandbox/index.js"
64
+ },
65
+ "./share": {
66
+ "types": "./dist/share/index.d.ts",
67
+ "import": "./dist/share/index.js"
68
+ }
69
+ },
70
+ "publishConfig": {
71
+ "access": "public"
72
+ },
73
+ "files": [
74
+ "dist"
75
+ ],
76
+ "dependencies": {
77
+ "@dagrejs/dagre": "^3.0.0",
78
+ "@radix-ui/react-dialog": "^1.1.15",
79
+ "@xyflow/react": "^12.10.0",
80
+ "class-variance-authority": "^0.7.1",
81
+ "clsx": "^2.1.1",
82
+ "framer-motion": "^12.34.0",
83
+ "immer": "^11.1.3",
84
+ "lucide-react": "^0.562.0",
85
+ "lz-string": "^1.5.0",
86
+ "nanoid": "^5.1.6",
87
+ "radix-ui": "^1.4.3",
88
+ "tailwind-merge": "^3.4.0",
89
+ "zustand": "^5.0.10",
90
+ "@simten/core": "0.2.0"
91
+ },
92
+ "peerDependencies": {
93
+ "react": "^18.0.0 || ^19.0.0",
94
+ "react-dom": "^18.0.0 || ^19.0.0"
95
+ },
96
+ "devDependencies": {
97
+ "@types/node": "^20",
98
+ "@types/react": "^19",
99
+ "@types/react-dom": "^19",
100
+ "fast-check": "^4.5.3",
101
+ "typescript": "^5",
102
+ "vitest": "^4.0.17"
103
+ },
104
+ "scripts": {
105
+ "build": "rm -rf dist *.tsbuildinfo && tsc -b",
106
+ "test": "vitest run",
107
+ "test:watch": "vitest",
108
+ "lint": "tsc --noEmit"
109
+ }
110
+ }