@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.
- package/LICENSE +176 -0
- package/README.md +41 -0
- package/dist/canvas/CircuitCanvas.d.ts +45 -0
- package/dist/canvas/CircuitCanvas.d.ts.map +1 -0
- package/dist/canvas/CircuitCanvas.js +293 -0
- package/dist/canvas/CircuitCanvas.js.map +1 -0
- package/dist/canvas/ClockControls.d.ts +31 -0
- package/dist/canvas/ClockControls.d.ts.map +1 -0
- package/dist/canvas/ClockControls.js +33 -0
- package/dist/canvas/ClockControls.js.map +1 -0
- package/dist/canvas/CompositeInspectorDialog.d.ts +24 -0
- package/dist/canvas/CompositeInspectorDialog.d.ts.map +1 -0
- package/dist/canvas/CompositeInspectorDialog.js +290 -0
- package/dist/canvas/CompositeInspectorDialog.js.map +1 -0
- package/dist/canvas/dagre-layout.d.ts +40 -0
- package/dist/canvas/dagre-layout.d.ts.map +1 -0
- package/dist/canvas/dagre-layout.js +86 -0
- package/dist/canvas/dagre-layout.js.map +1 -0
- package/dist/canvas/drill-down-view.d.ts +35 -0
- package/dist/canvas/drill-down-view.d.ts.map +1 -0
- package/dist/canvas/drill-down-view.js +134 -0
- package/dist/canvas/drill-down-view.js.map +1 -0
- package/dist/canvas/hooks/useDetectTheme.d.ts +6 -0
- package/dist/canvas/hooks/useDetectTheme.d.ts.map +1 -0
- package/dist/canvas/hooks/useDetectTheme.js +20 -0
- package/dist/canvas/hooks/useDetectTheme.js.map +1 -0
- package/dist/canvas/hooks/useIsMobile.d.ts +2 -0
- package/dist/canvas/hooks/useIsMobile.d.ts.map +1 -0
- package/dist/canvas/hooks/useIsMobile.js +20 -0
- package/dist/canvas/hooks/useIsMobile.js.map +1 -0
- package/dist/canvas/hooks/useSimulationSession.d.ts +23 -0
- package/dist/canvas/hooks/useSimulationSession.d.ts.map +1 -0
- package/dist/canvas/hooks/useSimulationSession.js +41 -0
- package/dist/canvas/hooks/useSimulationSession.js.map +1 -0
- package/dist/canvas/index.d.ts +22 -0
- package/dist/canvas/index.d.ts.map +1 -0
- package/dist/canvas/index.js +17 -0
- package/dist/canvas/index.js.map +1 -0
- package/dist/canvas/label-utils.d.ts +10 -0
- package/dist/canvas/label-utils.d.ts.map +1 -0
- package/dist/canvas/label-utils.js +32 -0
- package/dist/canvas/label-utils.js.map +1 -0
- package/dist/canvas/node-types.d.ts +10 -0
- package/dist/canvas/node-types.d.ts.map +1 -0
- package/dist/canvas/node-types.js +29 -0
- package/dist/canvas/node-types.js.map +1 -0
- package/dist/canvas/projection.d.ts +19 -0
- package/dist/canvas/projection.d.ts.map +1 -0
- package/dist/canvas/projection.js +317 -0
- package/dist/canvas/projection.js.map +1 -0
- package/dist/canvas/types.d.ts +56 -0
- package/dist/canvas/types.d.ts.map +1 -0
- package/dist/canvas/types.js +6 -0
- package/dist/canvas/types.js.map +1 -0
- package/dist/canvas/useLayout.d.ts +21 -0
- package/dist/canvas/useLayout.d.ts.map +1 -0
- package/dist/canvas/useLayout.js +26 -0
- package/dist/canvas/useLayout.js.map +1 -0
- package/dist/editor/components/CircuitSelector.d.ts +9 -0
- package/dist/editor/components/CircuitSelector.d.ts.map +1 -0
- package/dist/editor/components/CircuitSelector.js +20 -0
- package/dist/editor/components/CircuitSelector.js.map +1 -0
- package/dist/editor/components/CircuitTabBar.d.ts +8 -0
- package/dist/editor/components/CircuitTabBar.d.ts.map +1 -0
- package/dist/editor/components/CircuitTabBar.js +23 -0
- package/dist/editor/components/CircuitTabBar.js.map +1 -0
- package/dist/editor/components/ClockControls.d.ts +6 -0
- package/dist/editor/components/ClockControls.d.ts.map +1 -0
- package/dist/editor/components/ClockControls.js +7 -0
- package/dist/editor/components/ClockControls.js.map +1 -0
- package/dist/editor/components/ComponentTooltip.d.ts +25 -0
- package/dist/editor/components/ComponentTooltip.d.ts.map +1 -0
- package/dist/editor/components/ComponentTooltip.js +82 -0
- package/dist/editor/components/ComponentTooltip.js.map +1 -0
- package/dist/editor/components/ConflictResolutionModal.d.ts +19 -0
- package/dist/editor/components/ConflictResolutionModal.d.ts.map +1 -0
- package/dist/editor/components/ConflictResolutionModal.js +20 -0
- package/dist/editor/components/ConflictResolutionModal.js.map +1 -0
- package/dist/editor/components/HierarchyBreadcrumb.d.ts +9 -0
- package/dist/editor/components/HierarchyBreadcrumb.d.ts.map +1 -0
- package/dist/editor/components/HierarchyBreadcrumb.js +32 -0
- package/dist/editor/components/HierarchyBreadcrumb.js.map +1 -0
- package/dist/editor/components/LabelEditor.d.ts +17 -0
- package/dist/editor/components/LabelEditor.d.ts.map +1 -0
- package/dist/editor/components/LabelEditor.js +40 -0
- package/dist/editor/components/LabelEditor.js.map +1 -0
- package/dist/editor/components/SignalOutputPanel.d.ts +11 -0
- package/dist/editor/components/SignalOutputPanel.d.ts.map +1 -0
- package/dist/editor/components/SignalOutputPanel.js +34 -0
- package/dist/editor/components/SignalOutputPanel.js.map +1 -0
- package/dist/editor/components/index.d.ts +9 -0
- package/dist/editor/components/index.d.ts.map +1 -0
- package/dist/editor/components/index.js +9 -0
- package/dist/editor/components/index.js.map +1 -0
- package/dist/editor/hooks/index.d.ts +1 -0
- package/dist/editor/hooks/index.d.ts.map +1 -0
- package/dist/editor/hooks/index.js +2 -0
- package/dist/editor/hooks/index.js.map +1 -0
- package/dist/editor/index.d.ts +5 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/lib/simulation/index.d.ts +7 -0
- package/dist/editor/lib/simulation/index.d.ts.map +1 -0
- package/dist/editor/lib/simulation/index.js +8 -0
- package/dist/editor/lib/simulation/index.js.map +1 -0
- package/dist/editor/lib/utils/circuit-flattener.d.ts +29 -0
- package/dist/editor/lib/utils/circuit-flattener.d.ts.map +1 -0
- package/dist/editor/lib/utils/circuit-flattener.js +230 -0
- package/dist/editor/lib/utils/circuit-flattener.js.map +1 -0
- package/dist/editor/lib/utils/component-utils.d.ts +28 -0
- package/dist/editor/lib/utils/component-utils.d.ts.map +1 -0
- package/dist/editor/lib/utils/component-utils.js +72 -0
- package/dist/editor/lib/utils/component-utils.js.map +1 -0
- package/dist/editor/lib/utils/index.d.ts +3 -0
- package/dist/editor/lib/utils/index.d.ts.map +1 -0
- package/dist/editor/lib/utils/index.js +3 -0
- package/dist/editor/lib/utils/index.js.map +1 -0
- package/dist/editor/lib/visualization/index.d.ts +2 -0
- package/dist/editor/lib/visualization/index.d.ts.map +1 -0
- package/dist/editor/lib/visualization/index.js +2 -0
- package/dist/editor/lib/visualization/index.js.map +1 -0
- package/dist/editor/lib/visualization/vcd-generator.d.ts +63 -0
- package/dist/editor/lib/visualization/vcd-generator.d.ts.map +1 -0
- package/dist/editor/lib/visualization/vcd-generator.js +269 -0
- package/dist/editor/lib/visualization/vcd-generator.js.map +1 -0
- package/dist/editor/stores/circuit-library-store.d.ts +25 -0
- package/dist/editor/stores/circuit-library-store.d.ts.map +1 -0
- package/dist/editor/stores/circuit-library-store.js +51 -0
- package/dist/editor/stores/circuit-library-store.js.map +1 -0
- package/dist/editor/stores/circuit-preview-store.d.ts +687 -0
- package/dist/editor/stores/circuit-preview-store.d.ts.map +1 -0
- package/dist/editor/stores/circuit-preview-store.js +226 -0
- package/dist/editor/stores/circuit-preview-store.js.map +1 -0
- package/dist/editor/stores/circuit-store.d.ts +354 -0
- package/dist/editor/stores/circuit-store.d.ts.map +1 -0
- package/dist/editor/stores/circuit-store.js +227 -0
- package/dist/editor/stores/circuit-store.js.map +1 -0
- package/dist/editor/stores/index.d.ts +11 -0
- package/dist/editor/stores/index.d.ts.map +1 -0
- package/dist/editor/stores/index.js +8 -0
- package/dist/editor/stores/index.js.map +1 -0
- package/dist/editor/stores/ui-store.d.ts +96 -0
- package/dist/editor/stores/ui-store.d.ts.map +1 -0
- package/dist/editor/stores/ui-store.js +101 -0
- package/dist/editor/stores/ui-store.js.map +1 -0
- package/dist/editor/types/circuit.d.ts +207 -0
- package/dist/editor/types/circuit.d.ts.map +1 -0
- package/dist/editor/types/circuit.js +62 -0
- package/dist/editor/types/circuit.js.map +1 -0
- package/dist/editor/types/index.d.ts +12 -0
- package/dist/editor/types/index.d.ts.map +1 -0
- package/dist/editor/types/index.js +11 -0
- package/dist/editor/types/index.js.map +1 -0
- package/dist/editor/types/testbench.d.ts +150 -0
- package/dist/editor/types/testbench.d.ts.map +1 -0
- package/dist/editor/types/testbench.js +85 -0
- package/dist/editor/types/testbench.js.map +1 -0
- package/dist/editor/types/testing.d.ts +88 -0
- package/dist/editor/types/testing.d.ts.map +1 -0
- package/dist/editor/types/testing.js +6 -0
- package/dist/editor/types/testing.js.map +1 -0
- package/dist/editor/types/ui-model.d.ts +68 -0
- package/dist/editor/types/ui-model.d.ts.map +1 -0
- package/dist/editor/types/ui-model.js +66 -0
- package/dist/editor/types/ui-model.js.map +1 -0
- package/dist/editor/types/ui.d.ts +33 -0
- package/dist/editor/types/ui.d.ts.map +1 -0
- package/dist/editor/types/ui.js +8 -0
- package/dist/editor/types/ui.js.map +1 -0
- package/dist/editor/types/visual.d.ts +45 -0
- package/dist/editor/types/visual.d.ts.map +1 -0
- package/dist/editor/types/visual.js +23 -0
- package/dist/editor/types/visual.js.map +1 -0
- package/dist/editor/utils/index.d.ts +5 -0
- package/dist/editor/utils/index.d.ts.map +1 -0
- package/dist/editor/utils/index.js +6 -0
- package/dist/editor/utils/index.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/nodes/BaseNode.d.ts +20 -0
- package/dist/nodes/BaseNode.d.ts.map +1 -0
- package/dist/nodes/BaseNode.js +26 -0
- package/dist/nodes/BaseNode.js.map +1 -0
- package/dist/nodes/CompositeBadge.d.ts +6 -0
- package/dist/nodes/CompositeBadge.d.ts.map +1 -0
- package/dist/nodes/CompositeBadge.js +10 -0
- package/dist/nodes/CompositeBadge.js.map +1 -0
- package/dist/nodes/ConsoleNode.d.ts +8 -0
- package/dist/nodes/ConsoleNode.d.ts.map +1 -0
- package/dist/nodes/ConsoleNode.js +16 -0
- package/dist/nodes/ConsoleNode.js.map +1 -0
- package/dist/nodes/EmbedConsoleNode.d.ts +8 -0
- package/dist/nodes/EmbedConsoleNode.d.ts.map +1 -0
- package/dist/nodes/EmbedConsoleNode.js +24 -0
- package/dist/nodes/EmbedConsoleNode.js.map +1 -0
- package/dist/nodes/EmbedScreenNode.d.ts +8 -0
- package/dist/nodes/EmbedScreenNode.d.ts.map +1 -0
- package/dist/nodes/EmbedScreenNode.js +24 -0
- package/dist/nodes/EmbedScreenNode.js.map +1 -0
- package/dist/nodes/EthFrameInputNode.d.ts +8 -0
- package/dist/nodes/EthFrameInputNode.d.ts.map +1 -0
- package/dist/nodes/EthFrameInputNode.js +14 -0
- package/dist/nodes/EthFrameInputNode.js.map +1 -0
- package/dist/nodes/InputNode.d.ts +8 -0
- package/dist/nodes/InputNode.d.ts.map +1 -0
- package/dist/nodes/InputNode.js +57 -0
- package/dist/nodes/InputNode.js.map +1 -0
- package/dist/nodes/LogicGateNode.d.ts +8 -0
- package/dist/nodes/LogicGateNode.d.ts.map +1 -0
- package/dist/nodes/LogicGateNode.js +51 -0
- package/dist/nodes/LogicGateNode.js.map +1 -0
- package/dist/nodes/NicFifoNode.d.ts +8 -0
- package/dist/nodes/NicFifoNode.d.ts.map +1 -0
- package/dist/nodes/NicFifoNode.js +10 -0
- package/dist/nodes/NicFifoNode.js.map +1 -0
- package/dist/nodes/NodeData.d.ts +34 -0
- package/dist/nodes/NodeData.d.ts.map +1 -0
- package/dist/nodes/NodeData.js +2 -0
- package/dist/nodes/NodeData.js.map +1 -0
- package/dist/nodes/NumericInputNode.d.ts +8 -0
- package/dist/nodes/NumericInputNode.d.ts.map +1 -0
- package/dist/nodes/NumericInputNode.js +47 -0
- package/dist/nodes/NumericInputNode.js.map +1 -0
- package/dist/nodes/OutputNode.d.ts +8 -0
- package/dist/nodes/OutputNode.d.ts.map +1 -0
- package/dist/nodes/OutputNode.js +32 -0
- package/dist/nodes/OutputNode.js.map +1 -0
- package/dist/nodes/RAMNode.d.ts +8 -0
- package/dist/nodes/RAMNode.d.ts.map +1 -0
- package/dist/nodes/RAMNode.js +23 -0
- package/dist/nodes/RAMNode.js.map +1 -0
- package/dist/nodes/ROMNode.d.ts +8 -0
- package/dist/nodes/ROMNode.d.ts.map +1 -0
- package/dist/nodes/ROMNode.js +23 -0
- package/dist/nodes/ROMNode.js.map +1 -0
- package/dist/nodes/RV32IInstrMemNode.d.ts +16 -0
- package/dist/nodes/RV32IInstrMemNode.d.ts.map +1 -0
- package/dist/nodes/RV32IInstrMemNode.js +183 -0
- package/dist/nodes/RV32IInstrMemNode.js.map +1 -0
- package/dist/nodes/RasterDisplayNode.d.ts +8 -0
- package/dist/nodes/RasterDisplayNode.d.ts.map +1 -0
- package/dist/nodes/RasterDisplayNode.js +14 -0
- package/dist/nodes/RasterDisplayNode.js.map +1 -0
- package/dist/nodes/RegisterNode.d.ts +8 -0
- package/dist/nodes/RegisterNode.d.ts.map +1 -0
- package/dist/nodes/RegisterNode.js +14 -0
- package/dist/nodes/RegisterNode.js.map +1 -0
- package/dist/nodes/ScreenNode.d.ts +8 -0
- package/dist/nodes/ScreenNode.d.ts.map +1 -0
- package/dist/nodes/ScreenNode.js +16 -0
- package/dist/nodes/ScreenNode.js.map +1 -0
- package/dist/nodes/UartTxNode.d.ts +8 -0
- package/dist/nodes/UartTxNode.d.ts.map +1 -0
- package/dist/nodes/UartTxNode.js +16 -0
- package/dist/nodes/UartTxNode.js.map +1 -0
- package/dist/nodes/index.d.ts +27 -0
- package/dist/nodes/index.d.ts.map +1 -0
- package/dist/nodes/index.js +30 -0
- package/dist/nodes/index.js.map +1 -0
- package/dist/primitives/button.d.ts +12 -0
- package/dist/primitives/button.d.ts.map +1 -0
- package/dist/primitives/button.js +32 -0
- package/dist/primitives/button.js.map +1 -0
- package/dist/primitives/index.d.ts +4 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +4 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/sheet.d.ts +15 -0
- package/dist/primitives/sheet.d.ts.map +1 -0
- package/dist/primitives/sheet.js +40 -0
- package/dist/primitives/sheet.js.map +1 -0
- package/dist/primitives/tooltip.d.ts +8 -0
- package/dist/primitives/tooltip.d.ts.map +1 -0
- package/dist/primitives/tooltip.js +17 -0
- package/dist/primitives/tooltip.js.map +1 -0
- package/dist/sandbox/SandboxProvider.d.ts +13 -0
- package/dist/sandbox/SandboxProvider.d.ts.map +1 -0
- package/dist/sandbox/SandboxProvider.js +34 -0
- package/dist/sandbox/SandboxProvider.js.map +1 -0
- package/dist/sandbox/index.d.ts +4 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +3 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/useSandbox.d.ts +197 -0
- package/dist/sandbox/useSandbox.d.ts.map +1 -0
- package/dist/sandbox/useSandbox.js +250 -0
- package/dist/sandbox/useSandbox.js.map +1 -0
- package/dist/share/encode-source.d.ts +13 -0
- package/dist/share/encode-source.d.ts.map +1 -0
- package/dist/share/encode-source.js +31 -0
- package/dist/share/encode-source.js.map +1 -0
- package/dist/share/index.d.ts +2 -0
- package/dist/share/index.d.ts.map +1 -0
- package/dist/share/index.js +2 -0
- package/dist/share/index.js.map +1 -0
- package/dist/waveform/WaveformViewer.d.ts +30 -0
- package/dist/waveform/WaveformViewer.d.ts.map +1 -0
- package/dist/waveform/WaveformViewer.js +356 -0
- package/dist/waveform/WaveformViewer.js.map +1 -0
- 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
|
+
}
|