@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,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Model Types
|
|
3
|
+
*
|
|
4
|
+
* Visual editor component model for ReactFlow rendering.
|
|
5
|
+
* These types are specific to the visual editor UI layer.
|
|
6
|
+
*
|
|
7
|
+
* For circuit/simulation types (the actual IR), use @/core/simulator.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generic component interface.
|
|
11
|
+
* This flexible interface supports all component types through dynamic properties.
|
|
12
|
+
* Specific component behavior is determined by primitives.ts metadata.
|
|
13
|
+
*/
|
|
14
|
+
export interface Component {
|
|
15
|
+
id: string;
|
|
16
|
+
type: string;
|
|
17
|
+
label?: string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* UI-layer connection interface.
|
|
22
|
+
* Represents a wire between two component ports in the visual editor.
|
|
23
|
+
*/
|
|
24
|
+
export interface Connection {
|
|
25
|
+
id: string;
|
|
26
|
+
sourceComponentId: string;
|
|
27
|
+
sourcePortIndex: number;
|
|
28
|
+
targetComponentId: string;
|
|
29
|
+
targetPortIndex: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Defines the port configuration for each component type.
|
|
33
|
+
*/
|
|
34
|
+
export interface ComponentSpec {
|
|
35
|
+
type: string;
|
|
36
|
+
inputCount: number;
|
|
37
|
+
outputCount: number;
|
|
38
|
+
evaluate?: (inputs: (boolean | number)[]) => (boolean | number)[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get component specification for any component type.
|
|
42
|
+
*
|
|
43
|
+
* Uses primitives.ts as the source of truth for primitive components.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getComponentSpec(type: string): ComponentSpec | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Check if a component type is a primitive.
|
|
48
|
+
*
|
|
49
|
+
* Uses primitives.ts as the source of truth.
|
|
50
|
+
*/
|
|
51
|
+
export declare function isPrimitiveComponentType(type: string): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Helper function to check if a component is sequential (has state).
|
|
54
|
+
* Data-driven: checks if the primitive has clock ports.
|
|
55
|
+
*/
|
|
56
|
+
export declare function isSequentialComponent(type: string): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Clock signal state
|
|
59
|
+
*/
|
|
60
|
+
export interface ClockSignal {
|
|
61
|
+
previousValue: boolean;
|
|
62
|
+
currentValue: boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Helper function to detect clock edge
|
|
66
|
+
*/
|
|
67
|
+
export declare function detectClockEdge(clock: ClockSignal): 'rising' | 'falling' | 'none';
|
|
68
|
+
//# sourceMappingURL=ui-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-model.d.ts","sourceRoot":"","sources":["../../../src/editor/types/ui-model.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;CACnE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAUxE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3D;AAMD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAOjF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Model Types
|
|
3
|
+
*
|
|
4
|
+
* Visual editor component model for ReactFlow rendering.
|
|
5
|
+
* These types are specific to the visual editor UI layer.
|
|
6
|
+
*
|
|
7
|
+
* For circuit/simulation types (the actual IR), use @/core/simulator.
|
|
8
|
+
*/
|
|
9
|
+
import { STDLIB_CIRCUITS } from '@simten/core/std';
|
|
10
|
+
// Build lookup structures from stdlib exports. `STDLIB_CIRCUITS` materializes
|
|
11
|
+
// parameterized factories (Register, Switch, etc.) with their default options
|
|
12
|
+
// so they appear here as concrete `BuiltCircuit` instances alongside the
|
|
13
|
+
// singleton primitives.
|
|
14
|
+
const STD_CIRCUIT_MAP = new Map(STDLIB_CIRCUITS.map((b) => [b.circuit.name, b.circuit]));
|
|
15
|
+
const PRIMITIVE_NAMES = new Set(STDLIB_CIRCUITS
|
|
16
|
+
.filter((b) => b.circuit.implementation.kind === 'primitive')
|
|
17
|
+
.map((b) => b.circuit.name));
|
|
18
|
+
const isPrimitive = (name) => PRIMITIVE_NAMES.has(name);
|
|
19
|
+
/**
|
|
20
|
+
* Get component specification for any component type.
|
|
21
|
+
*
|
|
22
|
+
* Uses primitives.ts as the source of truth for primitive components.
|
|
23
|
+
*/
|
|
24
|
+
export function getComponentSpec(type) {
|
|
25
|
+
const primitive = STD_CIRCUIT_MAP.get(type);
|
|
26
|
+
if (primitive) {
|
|
27
|
+
return {
|
|
28
|
+
type,
|
|
29
|
+
inputCount: primitive.inputs.length,
|
|
30
|
+
outputCount: primitive.outputs.length,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Check if a component type is a primitive.
|
|
37
|
+
*
|
|
38
|
+
* Uses primitives.ts as the source of truth.
|
|
39
|
+
*/
|
|
40
|
+
export function isPrimitiveComponentType(type) {
|
|
41
|
+
return isPrimitive(type);
|
|
42
|
+
}
|
|
43
|
+
// ===========================
|
|
44
|
+
// Sequential Component Detection
|
|
45
|
+
// ===========================
|
|
46
|
+
/**
|
|
47
|
+
* Helper function to check if a component is sequential (has state).
|
|
48
|
+
* Data-driven: checks if the primitive has clock ports.
|
|
49
|
+
*/
|
|
50
|
+
export function isSequentialComponent(type) {
|
|
51
|
+
const primitive = STD_CIRCUIT_MAP.get(type);
|
|
52
|
+
return !!(primitive && primitive.clocks && primitive.clocks.length > 0);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Helper function to detect clock edge
|
|
56
|
+
*/
|
|
57
|
+
export function detectClockEdge(clock) {
|
|
58
|
+
if (!clock.previousValue && clock.currentValue) {
|
|
59
|
+
return 'rising';
|
|
60
|
+
}
|
|
61
|
+
else if (clock.previousValue && !clock.currentValue) {
|
|
62
|
+
return 'falling';
|
|
63
|
+
}
|
|
64
|
+
return 'none';
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=ui-model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-model.js","sourceRoot":"","sources":["../../../src/editor/types/ui-model.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,8EAA8E;AAC9E,8EAA8E;AAC9E,yEAAyE;AACzE,wBAAwB;AACxB,MAAM,eAAe,GAAyB,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/G,MAAM,eAAe,GAAgB,IAAI,GAAG,CAC1C,eAAe;KACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC;KAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAC9B,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AA6ChE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,IAAI;YACJ,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM;YACnC,WAAW,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM;SACtC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACnD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,8BAA8B;AAC9B,iCAAiC;AACjC,8BAA8B;AAE9B;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1E,CAAC;AAcD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI State Types
|
|
3
|
+
*
|
|
4
|
+
* Transient UI state for interactions, selections, and temporary operations.
|
|
5
|
+
* This state is ephemeral and not persisted.
|
|
6
|
+
*/
|
|
7
|
+
export interface DragOperation {
|
|
8
|
+
type: 'component' | 'connection';
|
|
9
|
+
componentRef?: string;
|
|
10
|
+
active: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SelectionState {
|
|
13
|
+
selectedComponentIds: Set<string>;
|
|
14
|
+
selectedConnectionIds: Set<string>;
|
|
15
|
+
}
|
|
16
|
+
export type SimulationStatus = 'idle' | 'running' | 'paused' | 'error';
|
|
17
|
+
export interface SimulationState {
|
|
18
|
+
status: SimulationStatus;
|
|
19
|
+
currentStep: number;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface CanvasState {
|
|
23
|
+
zoom: number;
|
|
24
|
+
panX: number;
|
|
25
|
+
panY: number;
|
|
26
|
+
}
|
|
27
|
+
export interface UIState {
|
|
28
|
+
drag: DragOperation | null;
|
|
29
|
+
selection: SelectionState;
|
|
30
|
+
simulation: SimulationState;
|
|
31
|
+
canvas: CanvasState;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../src/editor/types/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,WAAW,GAAG,YAAY,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAMD,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAMD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/editor/types/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual Metadata Types
|
|
3
|
+
*
|
|
4
|
+
* These types define the visual representation layer that sits on top of the IR.
|
|
5
|
+
* Metadata stores positions, sizes, and other visual properties separate from logic.
|
|
6
|
+
*/
|
|
7
|
+
export interface Position {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
}
|
|
11
|
+
export interface Dimensions {
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ComponentMetadata {
|
|
16
|
+
id: string;
|
|
17
|
+
position: Position;
|
|
18
|
+
dimensions?: Dimensions;
|
|
19
|
+
selected?: boolean;
|
|
20
|
+
zIndex?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface PortMetadata {
|
|
23
|
+
id: string;
|
|
24
|
+
position: Position;
|
|
25
|
+
}
|
|
26
|
+
export interface ConnectionMetadata {
|
|
27
|
+
id: string;
|
|
28
|
+
animated?: boolean;
|
|
29
|
+
color?: string;
|
|
30
|
+
waypoints?: Position[];
|
|
31
|
+
selected?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface MetadataState {
|
|
34
|
+
components: Record<string, ComponentMetadata>;
|
|
35
|
+
connections: Record<string, ConnectionMetadata>;
|
|
36
|
+
}
|
|
37
|
+
export declare const DEFAULT_NODE_DIMENSIONS: Record<string, Dimensions>;
|
|
38
|
+
export declare const PORT_SIZE = 12;
|
|
39
|
+
export declare const PORT_OFFSET = 16;
|
|
40
|
+
export declare const WIRE_COLORS: {
|
|
41
|
+
TRUE: string;
|
|
42
|
+
FALSE: string;
|
|
43
|
+
UNDEFINED: string;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=visual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual.d.ts","sourceRoot":"","sources":["../../../src/editor/types/visual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAMD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CACjD;AAMD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAI9D,CAAC;AAEF,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,WAAW,KAAK,CAAC;AAG9B,eAAO,MAAM,WAAW;;;;CAIvB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual Metadata Types
|
|
3
|
+
*
|
|
4
|
+
* These types define the visual representation layer that sits on top of the IR.
|
|
5
|
+
* Metadata stores positions, sizes, and other visual properties separate from logic.
|
|
6
|
+
*/
|
|
7
|
+
// ===========================
|
|
8
|
+
// Default Visual Properties
|
|
9
|
+
// ===========================
|
|
10
|
+
export const DEFAULT_NODE_DIMENSIONS = {
|
|
11
|
+
SWITCH: { width: 80, height: 60 },
|
|
12
|
+
LED: { width: 80, height: 60 },
|
|
13
|
+
AND_GATE: { width: 100, height: 80 },
|
|
14
|
+
};
|
|
15
|
+
export const PORT_SIZE = 12; // Port handle size in pixels
|
|
16
|
+
export const PORT_OFFSET = 16; // Offset from top/bottom for ports
|
|
17
|
+
// Wire colors based on signal state
|
|
18
|
+
export const WIRE_COLORS = {
|
|
19
|
+
TRUE: '#22c55e', // green-500
|
|
20
|
+
FALSE: '#94a3b8', // slate-400
|
|
21
|
+
UNDEFINED: '#cbd5e1', // slate-300
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=visual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual.js","sourceRoot":"","sources":["../../../src/editor/types/visual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0DH,8BAA8B;AAC9B,4BAA4B;AAC5B,8BAA8B;AAE9B,MAAM,CAAC,MAAM,uBAAuB,GAA+B;IACjE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACjC,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9B,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC,CAAC,6BAA6B;AAC1D,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,mCAAmC;AAElE,oCAAoC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,SAAS,EAAE,YAAY;IAC7B,KAAK,EAAE,SAAS,EAAE,YAAY;IAC9B,SAAS,EAAE,SAAS,EAAE,YAAY;CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/utils/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @simten/ui
|
|
3
|
+
*
|
|
4
|
+
* Use sub-path imports:
|
|
5
|
+
* @simten/ui/nodes — Store-free node components (BaseNode, InputNode, etc.)
|
|
6
|
+
* @simten/ui/canvas — CircuitCanvas, projection, layout
|
|
7
|
+
* @simten/ui/editor — Editor kit (stores, components, hooks)
|
|
8
|
+
*
|
|
9
|
+
* For embeddable components, use @simten/embed directly.
|
|
10
|
+
*/
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @simten/ui
|
|
4
|
+
*
|
|
5
|
+
* Use sub-path imports:
|
|
6
|
+
* @simten/ui/nodes — Store-free node components (BaseNode, InputNode, etc.)
|
|
7
|
+
* @simten/ui/canvas — CircuitCanvas, projection, layout
|
|
8
|
+
* @simten/ui/editor — Editor kit (stores, components, hooks)
|
|
9
|
+
*
|
|
10
|
+
* For embeddable components, use @simten/embed directly.
|
|
11
|
+
*/
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAG5C,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface PortConfig {
|
|
3
|
+
name: string;
|
|
4
|
+
index: number;
|
|
5
|
+
type: 'input' | 'output';
|
|
6
|
+
connected?: boolean;
|
|
7
|
+
value?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface BaseNodeProps {
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
inputPorts?: PortConfig[];
|
|
12
|
+
outputPorts?: PortConfig[];
|
|
13
|
+
selected?: boolean;
|
|
14
|
+
className?: string;
|
|
15
|
+
showPortLabels?: boolean;
|
|
16
|
+
onPortClick?: (portName: string, portType: 'input' | 'output') => void;
|
|
17
|
+
glowUnconnected?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function BaseNode({ children, inputPorts, outputPorts, selected, className, showPortLabels, onPortClick, glowUnconnected }: BaseNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=BaseNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseNode.d.ts","sourceRoot":"","sources":["../../src/nodes/BaseNode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC;IACvE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAe,EAAE,WAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,aAAa,2CAqGzJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Handle, Position } from '@xyflow/react';
|
|
4
|
+
import { cn } from '../lib/utils';
|
|
5
|
+
export function BaseNode({ children, inputPorts = [], outputPorts = [], selected, className, showPortLabels, onPortClick, glowUnconnected }) {
|
|
6
|
+
return (_jsxs("div", { className: cn('relative rounded-lg border-2 bg-[var(--embed-bg-secondary)] shadow-md transition-all', selected ? 'border-blue-500 shadow-lg' : 'border-[var(--embed-border-node)]', className), children: [inputPorts.map((port) => {
|
|
7
|
+
const topPct = `${((port.index + 1) * 100) / (inputPorts.length + 1)}%`;
|
|
8
|
+
const unconnected = glowUnconnected && !port.connected;
|
|
9
|
+
return (_jsxs(React.Fragment, { children: [unconnected && (_jsx("div", { className: "absolute h-5 w-5 rounded-full animate-ping", style: {
|
|
10
|
+
top: topPct,
|
|
11
|
+
left: '-7px',
|
|
12
|
+
transform: 'translateY(-50%)',
|
|
13
|
+
background: 'radial-gradient(circle, rgba(96,165,250,0.5) 0%, transparent 70%)',
|
|
14
|
+
} })), _jsx(Handle, { type: "target", position: Position.Left, id: `in-${port.name}`, className: cn('h-3 w-3 rounded-full border-2 transition-all duration-200', port.connected ? 'bg-blue-500 border-blue-600' : 'bg-[var(--embed-bg-tertiary)] border-[var(--embed-border-node)]', unconnected && 'border-blue-400', onPortClick && 'cursor-pointer hover:scale-150', 'hover:bg-blue-300 hover:border-blue-500'), style: { top: topPct, left: '-6px' }, onClick: onPortClick ? (e) => { e.stopPropagation(); onPortClick(port.name, 'input'); } : undefined }), showPortLabels && (_jsx("div", { className: "absolute text-[9px] font-mono text-[var(--embed-text-secondary)] pointer-events-none select-none", style: { top: topPct, left: '10px', transform: 'translateY(-50%)' }, children: port.name }))] }, `in-${port.name}`));
|
|
15
|
+
}), _jsx("div", { className: "relative px-3 py-2", children: children }), outputPorts.map((port) => {
|
|
16
|
+
const topPct = `${((port.index + 1) * 100) / (outputPorts.length + 1)}%`;
|
|
17
|
+
const unconnected = glowUnconnected && !port.connected;
|
|
18
|
+
return (_jsxs(React.Fragment, { children: [unconnected && (_jsx("div", { className: "absolute h-5 w-5 rounded-full animate-ping", style: {
|
|
19
|
+
top: topPct,
|
|
20
|
+
right: '-7px',
|
|
21
|
+
transform: 'translateY(-50%)',
|
|
22
|
+
background: 'radial-gradient(circle, rgba(74,222,128,0.5) 0%, transparent 70%)',
|
|
23
|
+
} })), _jsx(Handle, { type: "source", position: Position.Right, id: `out-${port.name}`, className: cn('h-3 w-3 rounded-full border-2 transition-all duration-200', port.connected ? 'bg-green-500 border-green-600' : 'bg-[var(--embed-bg-tertiary)] border-[var(--embed-border-node)]', port.value === true && 'bg-green-500 border-green-600', port.value === false && 'bg-gray-300 border-gray-400', unconnected && 'border-green-400', onPortClick && 'cursor-pointer hover:scale-150', 'hover:bg-green-300 hover:border-green-500'), style: { top: topPct, right: '-6px' }, onClick: onPortClick ? (e) => { e.stopPropagation(); onPortClick(port.name, 'output'); } : undefined }), showPortLabels && (_jsx("div", { className: "absolute text-[9px] font-mono text-[var(--embed-text-secondary)] pointer-events-none select-none", style: { top: topPct, right: '10px', transform: 'translateY(-50%)', textAlign: 'right' }, children: port.name }))] }, `out-${port.name}`));
|
|
24
|
+
})] }));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=BaseNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseNode.js","sourceRoot":"","sources":["../../src/nodes/BaseNode.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Badge shown on composite nodes indicating they can be drilled into.
|
|
3
|
+
* Renders in the top-right corner with a magnifying glass and pulse ring.
|
|
4
|
+
*/
|
|
5
|
+
export declare function CompositeBadge(): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=CompositeBadge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompositeBadge.d.ts","sourceRoot":"","sources":["../../src/nodes/CompositeBadge.tsx"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,cAAc,4CAwB7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, } from "../primitives/tooltip";
|
|
3
|
+
/**
|
|
4
|
+
* Badge shown on composite nodes indicating they can be drilled into.
|
|
5
|
+
* Renders in the top-right corner with a magnifying glass and pulse ring.
|
|
6
|
+
*/
|
|
7
|
+
export function CompositeBadge() {
|
|
8
|
+
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsxs("div", { className: "absolute -top-2 -right-2 flex h-6 w-6 items-center justify-center cursor-pointer group", children: [_jsx("span", { className: "absolute inset-0 rounded-full bg-blue-400/30 animate-[ping_2s_cubic-bezier(0,0,0.2,1)_infinite]" }), _jsx("span", { className: "relative flex h-5 w-5 items-center justify-center rounded-full bg-blue-500 group-hover:bg-blue-400 transition-colors shadow-sm shadow-blue-500/30", children: _jsxs("svg", { className: "h-3 w-3 text-white", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: [_jsx("circle", { cx: "6.5", cy: "6.5", r: "4.5" }), _jsx("line", { x1: "10", y1: "10", x2: "14", y2: "14" })] }) })] }) }), _jsx(TooltipContent, { side: "top", sideOffset: 4, children: "Double-click to inspect" })] }) }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=CompositeBadge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CompositeBadge.js","sourceRoot":"","sources":["../../src/nodes/CompositeBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CACL,KAAC,eAAe,IAAC,aAAa,EAAE,GAAG,YACjC,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,eAAK,SAAS,EAAC,wFAAwF,aAErG,eAAM,SAAS,EAAC,iGAAiG,GAAG,EAEpH,eAAM,SAAS,EAAC,mJAAmJ,YAEjK,eAAK,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,aAC7H,iBAAQ,EAAE,EAAC,KAAK,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,KAAK,GAAG,EACpC,eAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,GAAG,IACpC,GACD,IACH,GACS,EACjB,KAAC,cAAc,IAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAE,CAAC,wCAEvB,IACT,GACM,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NodeData } from './NodeData';
|
|
2
|
+
interface ConsoleNodeProps {
|
|
3
|
+
data: NodeData;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function ConsoleNode({ data, selected }: ConsoleNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=ConsoleNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleNode.d.ts","sourceRoot":"","sources":["../../src/nodes/ConsoleNode.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,gBAAgB;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,gBAAgB,2CAwC/D"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect } from 'react';
|
|
3
|
+
import { BaseNode } from './BaseNode';
|
|
4
|
+
export function ConsoleNode({ data, selected }) {
|
|
5
|
+
const textAreaRef = useRef(null);
|
|
6
|
+
const text = data.__consoleText ?? '';
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (textAreaRef.current) {
|
|
9
|
+
textAreaRef.current.scrollTop = textAreaRef.current.scrollHeight;
|
|
10
|
+
}
|
|
11
|
+
}, [text]);
|
|
12
|
+
const lineCount = text ? text.split('\n').length : 0;
|
|
13
|
+
const charCount = text.length;
|
|
14
|
+
return (_jsx(BaseNode, { selected: selected, inputPorts: data.inputNames.map((name, index) => ({ name, index, type: 'input' })), outputPorts: data.outputNames.map((name, index) => ({ name, index, type: 'output' })), className: "min-w-[200px]", showPortLabels: data.showPortLabels, onPortClick: data.onPortClick, glowUnconnected: data.glowUnconnected, children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "px-2 py-1 text-xs font-medium text-[var(--embed-text-primary)]", children: data.label || 'Console' }), _jsx("pre", { ref: textAreaRef, className: "w-full h-32 overflow-auto rounded border-2 border-gray-700 bg-black text-green-400 font-mono text-xs p-2 whitespace-pre-wrap break-all", style: { minWidth: '180px', maxHeight: '200px' }, children: text || _jsx("span", { className: "text-[var(--embed-text-muted)]", children: "// output appears here" }) }), _jsxs("div", { className: "text-xs text-[var(--embed-text-secondary)]", children: [charCount, " chars, ", lineCount, " lines"] })] }) }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ConsoleNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsoleNode.js","sourceRoot":"","sources":["../../src/nodes/ConsoleNode.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAoB;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAI,IAAI,CAAC,aAAwB,IAAI,EAAE,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;QACnE,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IAE9B,OAAO,CACL,KAAC,QAAQ,IACP,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAgB,EAAE,CAAC,CAAC,EAC3F,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAiB,EAAE,CAAC,CAAC,EAC9F,SAAS,EAAC,eAAe,EACzB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,YAErC,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,gEAAgE,YAC5E,IAAI,CAAC,KAAK,IAAI,SAAS,GACpB,EACN,cACE,GAAG,EAAE,WAAW,EAChB,SAAS,EAAC,wIAAwI,EAClJ,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAE/C,IAAI,IAAI,eAAM,SAAS,EAAC,gCAAgC,uCAA8B,GACnF,EACN,eAAK,SAAS,EAAC,4CAA4C,aACxD,SAAS,cAAU,SAAS,cACzB,IACF,GACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NodeData } from "./NodeData";
|
|
2
|
+
interface EmbedConsoleNodeProps {
|
|
3
|
+
data: NodeData;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function EmbedConsoleNode({ data, selected }: EmbedConsoleNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EmbedConsoleNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbedConsoleNode.d.ts","sourceRoot":"","sources":["../../src/nodes/EmbedConsoleNode.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,qBAAqB;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAiDzE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useEffect } from "react";
|
|
3
|
+
import { BaseNode } from "./BaseNode";
|
|
4
|
+
export function EmbedConsoleNode({ data, selected }) {
|
|
5
|
+
const textAreaRef = useRef(null);
|
|
6
|
+
const text = data.__consoleText ?? data.__uartText ?? "";
|
|
7
|
+
useEffect(() => {
|
|
8
|
+
if (textAreaRef.current) {
|
|
9
|
+
textAreaRef.current.scrollTop = textAreaRef.current.scrollHeight;
|
|
10
|
+
}
|
|
11
|
+
}, [text]);
|
|
12
|
+
const lineCount = text ? text.split("\n").length : 0;
|
|
13
|
+
const charCount = text.length;
|
|
14
|
+
return (_jsx(BaseNode, { selected: selected, inputPorts: data.inputNames.map((name, index) => ({
|
|
15
|
+
name,
|
|
16
|
+
index,
|
|
17
|
+
type: "input",
|
|
18
|
+
})), outputPorts: data.outputNames.map((name, index) => ({
|
|
19
|
+
name,
|
|
20
|
+
index,
|
|
21
|
+
type: "output",
|
|
22
|
+
})), className: "w-[380px]", children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "px-2 py-1 rounded text-xs font-medium text-[var(--embed-text-primary)]", children: data.label || "Console" }), _jsx("pre", { ref: textAreaRef, className: "w-full h-32 overflow-auto rounded border-2 border-[var(--embed-border-node)] bg-black text-green-400 font-mono text-xs leading-none p-2 whitespace-pre", style: { maxHeight: "200px" }, children: text || (_jsx("span", { className: "text-[var(--embed-text-muted)]", children: "// Console output will appear here" })) }), _jsxs("div", { className: "text-xs text-[var(--embed-text-secondary)]", children: [charCount, " chars, ", lineCount, " lines"] })] }) }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=EmbedConsoleNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbedConsoleNode.js","sourceRoot":"","sources":["../../src/nodes/EmbedConsoleNode.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAyB;IACxE,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAI,IAAI,CAAC,aAAwB,IAAK,IAAI,CAAC,UAAqB,IAAI,EAAE,CAAC;IAEjF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,WAAW,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;QACnE,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;IAE9B,OAAO,CACL,KAAC,QAAQ,IACP,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI;YACJ,KAAK;YACL,IAAI,EAAE,OAAgB;SACvB,CAAC,CAAC,EACH,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI;YACJ,KAAK;YACL,IAAI,EAAE,QAAiB;SACxB,CAAC,CAAC,EACH,SAAS,EAAC,WAAW,YAErB,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,wEAAwE,YACpF,IAAI,CAAC,KAAK,IAAI,SAAS,GACpB,EACN,cACE,GAAG,EAAE,WAAW,EAChB,SAAS,EAAC,wJAAwJ,EAClK,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAE5B,IAAI,IAAI,CACP,eAAM,SAAS,EAAC,gCAAgC,YAC7C,oCAAoC,GAChC,CACR,GACG,EACN,eAAK,SAAS,EAAC,4CAA4C,aACxD,SAAS,cAAU,SAAS,cACzB,IACF,GACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NodeData } from "./NodeData";
|
|
2
|
+
interface EmbedScreenNodeProps {
|
|
3
|
+
data: NodeData;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function EmbedScreenNode({ data, selected }: EmbedScreenNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EmbedScreenNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbedScreenNode.d.ts","sourceRoot":"","sources":["../../src/nodes/EmbedScreenNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,oBAAoB;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CAwDvE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BaseNode } from "./BaseNode";
|
|
3
|
+
export function EmbedScreenNode({ data, selected }) {
|
|
4
|
+
const GRID_W = data.arguments?.width ?? 8;
|
|
5
|
+
const GRID_H = data.arguments?.height ?? 8;
|
|
6
|
+
const TOTAL_PIXELS = GRID_W * GRID_H;
|
|
7
|
+
const pixels = data.__pixels ?? new Array(TOTAL_PIXELS).fill(0);
|
|
8
|
+
const PIXEL_SIZE = GRID_W <= 8 ? 16 : GRID_W <= 16 ? 8 : 4;
|
|
9
|
+
const PIXEL_GAP = GRID_W <= 8 ? 2 : GRID_W <= 16 ? 1 : 0;
|
|
10
|
+
return (_jsx(BaseNode, { selected: selected, inputPorts: data.inputNames.map((name, index) => ({
|
|
11
|
+
name,
|
|
12
|
+
index,
|
|
13
|
+
type: "input",
|
|
14
|
+
})), outputPorts: data.outputNames.map((name, index) => ({
|
|
15
|
+
name,
|
|
16
|
+
index,
|
|
17
|
+
type: "output",
|
|
18
|
+
})), className: "min-w-[160px]", children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "px-2 py-1 rounded text-xs font-medium text-[var(--embed-text-primary)]", children: data.label || "Screen" }), _jsx("svg", { width: GRID_W * PIXEL_SIZE + (GRID_W - 1) * PIXEL_GAP, height: GRID_H * PIXEL_SIZE + (GRID_H - 1) * PIXEL_GAP, className: "border-2 border-[var(--embed-border-node)] rounded bg-black", style: { imageRendering: "pixelated" }, children: pixels.slice(0, TOTAL_PIXELS).map((value, index) => {
|
|
19
|
+
const x = index % GRID_W;
|
|
20
|
+
const y = Math.floor(index / GRID_W);
|
|
21
|
+
return (_jsx("rect", { x: x * (PIXEL_SIZE + PIXEL_GAP), y: y * (PIXEL_SIZE + PIXEL_GAP), width: PIXEL_SIZE, height: PIXEL_SIZE, fill: value !== 0 ? "#00ff00" : "#1a1a1a" }, index));
|
|
22
|
+
}) }), _jsxs("div", { className: "text-xs text-[var(--embed-text-secondary)]", children: [GRID_W, "x", GRID_H, " pixels"] })] }) }));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=EmbedScreenNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbedScreenNode.js","sourceRoot":"","sources":["../../src/nodes/EmbedScreenNode.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAwB;IACtE,MAAM,MAAM,GAAI,IAAI,CAAC,SAAS,EAAE,KAAgB,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAI,IAAI,CAAC,SAAS,EAAE,MAAiB,IAAI,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;IAErC,MAAM,MAAM,GAAI,IAAI,CAAC,QAAqB,IAAI,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzD,OAAO,CACL,KAAC,QAAQ,IACP,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI;YACJ,KAAK;YACL,IAAI,EAAE,OAAgB;SACvB,CAAC,CAAC,EACH,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI;YACJ,KAAK;YACL,IAAI,EAAE,QAAiB;SACxB,CAAC,CAAC,EACH,SAAS,EAAC,eAAe,YAEzB,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,wEAAwE,YACpF,IAAI,CAAC,KAAK,IAAI,QAAQ,GACnB,EACN,cACE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,EACrD,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,EACtD,SAAS,EAAC,6DAA6D,EACvE,KAAK,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,YAErC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBAClD,MAAM,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC;wBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;wBACrC,OAAO,CACL,eAEE,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,EAC/B,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,EAC/B,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,IALpC,KAAK,CAMV,CACH,CAAC;oBACJ,CAAC,CAAC,GACE,EACN,eAAK,SAAS,EAAC,4CAA4C,aACxD,MAAM,OAAG,MAAM,eACZ,IACF,GACG,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { NodeData } from './NodeData';
|
|
2
|
+
interface EthFrameInputNodeProps {
|
|
3
|
+
data: NodeData;
|
|
4
|
+
selected?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function EthFrameInputNode({ data, selected }: EthFrameInputNodeProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=EthFrameInputNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EthFrameInputNode.d.ts","sourceRoot":"","sources":["../../src/nodes/EthFrameInputNode.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,UAAU,sBAAsB;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CA2B3E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
export function EthFrameInputNode({ data, selected }) {
|
|
4
|
+
const initData = data.arguments?.init;
|
|
5
|
+
const byteCount = Array.isArray(initData) ? initData.length : 0;
|
|
6
|
+
const inputPorts = data.inputNames.map((name, index) => ({
|
|
7
|
+
name, index, type: 'input',
|
|
8
|
+
}));
|
|
9
|
+
const outputPorts = data.outputNames.map((name, index) => ({
|
|
10
|
+
name, index, type: 'output',
|
|
11
|
+
}));
|
|
12
|
+
return (_jsx(BaseNode, { inputPorts: inputPorts, outputPorts: outputPorts, selected: selected, className: "min-w-[120px]", showPortLabels: data.showPortLabels, onPortClick: data.onPortClick, glowUnconnected: data.glowUnconnected, children: _jsxs("div", { className: "flex flex-col items-center gap-2", children: [_jsx("div", { className: "px-2 py-1 text-xs font-medium text-[var(--embed-text-primary)]", children: data.label || 'EthFrame' }), _jsx("div", { className: "px-3 py-2 text-xs font-semibold rounded-md bg-[var(--embed-bg-tertiary)] text-[var(--embed-text-primary)]", children: "ETH" }), _jsx("div", { className: "text-xs text-[var(--embed-text-secondary)]", children: byteCount > 0 ? `${byteCount} bytes` : 'no frame' })] }) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=EthFrameInputNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EthFrameInputNode.js","sourceRoot":"","sources":["../../src/nodes/EthFrameInputNode.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,QAAQ,EAAmB,MAAM,YAAY,CAAC;AAQvD,MAAM,UAAU,iBAAiB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAA0B;IAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAiB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO;KAC3B,CAAC,CAAC,CAAC;IAEJ,MAAM,WAAW,GAAiB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ;KAC5B,CAAC,CAAC,CAAC;IAEJ,OAAO,CACL,KAAC,QAAQ,IAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAC,eAAe,EAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,YACjN,eAAK,SAAS,EAAC,kCAAkC,aAC/C,cAAK,SAAS,EAAC,gEAAgE,YAC5E,IAAI,CAAC,KAAK,IAAI,UAAU,GACrB,EACN,cAAK,SAAS,EAAC,2GAA2G,oBAEpH,EACN,cAAK,SAAS,EAAC,4CAA4C,YACxD,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC,CAAC,UAAU,GAC9C,IACF,GACG,CACZ,CAAC;AACJ,CAAC"}
|