@simten/ui 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/canvas/CircuitCanvas.js.map +1 -1
  2. package/dist/canvas/ClockControls.js.map +1 -1
  3. package/dist/canvas/CompositeInspectorDialog.js.map +1 -1
  4. package/dist/canvas/dagre-layout.js.map +1 -1
  5. package/dist/canvas/drill-down-view.js.map +1 -1
  6. package/dist/canvas/hooks/useDetectTheme.js.map +1 -1
  7. package/dist/canvas/hooks/useIsMobile.js.map +1 -1
  8. package/dist/canvas/hooks/useSimulationSession.js.map +1 -1
  9. package/dist/canvas/index.js.map +1 -1
  10. package/dist/canvas/label-utils.js.map +1 -1
  11. package/dist/canvas/node-types.js.map +1 -1
  12. package/dist/canvas/projection.js.map +1 -1
  13. package/dist/canvas/types.js.map +1 -1
  14. package/dist/canvas/useLayout.js.map +1 -1
  15. package/dist/editor/components/CircuitSelector.js.map +1 -1
  16. package/dist/editor/components/CircuitTabBar.js.map +1 -1
  17. package/dist/editor/components/ClockControls.js.map +1 -1
  18. package/dist/editor/components/ComponentTooltip.js.map +1 -1
  19. package/dist/editor/components/ConflictResolutionModal.js.map +1 -1
  20. package/dist/editor/components/HierarchyBreadcrumb.js.map +1 -1
  21. package/dist/editor/components/LabelEditor.js.map +1 -1
  22. package/dist/editor/components/SignalOutputPanel.js.map +1 -1
  23. package/dist/editor/components/index.js.map +1 -1
  24. package/dist/editor/hooks/index.js.map +1 -1
  25. package/dist/editor/index.js.map +1 -1
  26. package/dist/editor/lib/simulation/index.js.map +1 -1
  27. package/dist/editor/lib/utils/circuit-flattener.js.map +1 -1
  28. package/dist/editor/lib/utils/component-utils.js.map +1 -1
  29. package/dist/editor/lib/utils/index.js.map +1 -1
  30. package/dist/editor/lib/visualization/index.js.map +1 -1
  31. package/dist/editor/lib/visualization/vcd-generator.js.map +1 -1
  32. package/dist/editor/stores/circuit-library-store.js.map +1 -1
  33. package/dist/editor/stores/circuit-preview-store.js.map +1 -1
  34. package/dist/editor/stores/circuit-store.js.map +1 -1
  35. package/dist/editor/stores/index.js.map +1 -1
  36. package/dist/editor/stores/ui-store.js.map +1 -1
  37. package/dist/editor/types/circuit.js.map +1 -1
  38. package/dist/editor/types/index.js.map +1 -1
  39. package/dist/editor/types/testbench.js.map +1 -1
  40. package/dist/editor/types/testing.js.map +1 -1
  41. package/dist/editor/types/ui-model.js.map +1 -1
  42. package/dist/editor/types/ui.js.map +1 -1
  43. package/dist/editor/types/visual.js.map +1 -1
  44. package/dist/editor/utils/index.js.map +1 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/lib/utils.js.map +1 -1
  47. package/dist/nodes/BaseNode.js.map +1 -1
  48. package/dist/nodes/CompositeBadge.js.map +1 -1
  49. package/dist/nodes/ConsoleNode.js.map +1 -1
  50. package/dist/nodes/EmbedConsoleNode.js.map +1 -1
  51. package/dist/nodes/EmbedScreenNode.js.map +1 -1
  52. package/dist/nodes/EthFrameInputNode.js.map +1 -1
  53. package/dist/nodes/InputNode.js.map +1 -1
  54. package/dist/nodes/LogicGateNode.js.map +1 -1
  55. package/dist/nodes/NicFifoNode.js.map +1 -1
  56. package/dist/nodes/NodeData.js.map +1 -1
  57. package/dist/nodes/NumericInputNode.js.map +1 -1
  58. package/dist/nodes/OutputNode.js.map +1 -1
  59. package/dist/nodes/RAMNode.js.map +1 -1
  60. package/dist/nodes/ROMNode.js.map +1 -1
  61. package/dist/nodes/RV32IInstrMemNode.js.map +1 -1
  62. package/dist/nodes/RasterDisplayNode.js.map +1 -1
  63. package/dist/nodes/RegisterNode.js.map +1 -1
  64. package/dist/nodes/ScreenNode.js.map +1 -1
  65. package/dist/nodes/UartTxNode.js.map +1 -1
  66. package/dist/nodes/index.js.map +1 -1
  67. package/dist/primitives/button.js.map +1 -1
  68. package/dist/primitives/index.js.map +1 -1
  69. package/dist/primitives/sheet.js.map +1 -1
  70. package/dist/primitives/tooltip.js.map +1 -1
  71. package/dist/sandbox/SandboxProvider.js.map +1 -1
  72. package/dist/sandbox/index.js.map +1 -1
  73. package/dist/sandbox/useSandbox.js.map +1 -1
  74. package/dist/share/encode-source.js.map +1 -1
  75. package/dist/share/index.js.map +1 -1
  76. package/dist/waveform/WaveformViewer.js.map +1 -1
  77. package/package.json +7 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentTooltip.js","sourceRoot":"","sources":["../../../src/editor/components/ComponentTooltip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ComponentTooltip.js","sourceRoot":"","sources":["../../../src/editor/components/ComponentTooltip.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\n/**\n * ComponentTooltip Component\n *\n * Displays detailed information about a component on hover,\n * similar to Turing Complete game tooltips.\n * Shows component name, description, and input/output states.\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\n\nexport interface PortInfo {\n index: number;\n label: string;\n value?: boolean; // true = ON, false = OFF, undefined = not connected\n}\n\ninterface ComponentTooltipProps {\n children: React.ReactNode;\n title: string;\n description: string;\n inputs?: PortInfo[];\n outputs?: PortInfo[];\n enabled?: boolean;\n delayMs?: number;\n}\n\nexport function ComponentTooltip({\n children,\n title,\n description,\n inputs = [],\n outputs = [],\n enabled = true,\n delayMs = 500,\n}: ComponentTooltipProps) {\n const [isVisible, setIsVisible] = useState(false);\n const [position, setPosition] = useState({ x: 0, y: 0 });\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n const targetRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n const handleMouseEnter = () => {\n if (!enabled) return;\n\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n const rect = targetRef.current?.getBoundingClientRect();\n if (rect) {\n // Position tooltip to the right of the component with some offset\n setPosition({\n x: rect.right + 12,\n y: rect.top + rect.height / 2,\n });\n setIsVisible(true);\n }\n }, delayMs);\n };\n\n const handleMouseLeave = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n const handleDragStart = () => {\n // Immediately hide tooltip and clear any pending timeout when drag starts\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n return (\n <>\n <div\n ref={targetRef}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onDragStart={handleDragStart}\n className=\"h-full w-full\"\n >\n {children}\n </div>\n\n {isVisible &&\n createPortal(\n <TooltipContent\n title={title}\n description={description}\n inputs={inputs}\n outputs={outputs}\n position={position}\n />,\n document.body\n )}\n </>\n );\n}\n\ninterface TooltipContentProps {\n title: string;\n description: string;\n inputs: PortInfo[];\n outputs: PortInfo[];\n position: { x: number; y: number };\n}\n\nfunction TooltipContent({ title, description, inputs, outputs, position }: TooltipContentProps) {\n return (\n <div\n className=\"pointer-events-none fixed z-50\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n transform: 'translateY(-50%)',\n }}\n >\n <div className=\"min-w-[240px] rounded-lg border-2 border-gray-400 bg-gradient-to-br from-gray-50 to-white px-5 py-4 shadow-2xl shadow-black/20\">\n {/* Title */}\n <div className=\"mb-2 border-b border-gray-300 pb-2 text-base font-bold uppercase tracking-wide text-gray-800\">\n {title}\n </div>\n\n {/* Description */}\n <div className=\"mb-4 text-sm leading-relaxed text-gray-700\">{description}</div>\n\n {/* Inputs Section */}\n {inputs.length > 0 && (\n <div className=\"mb-3\">\n <div className=\"mb-2 text-xs font-bold uppercase tracking-wider text-gray-600\">Inputs:</div>\n <div className=\"space-y-2 rounded-md bg-gray-100/50 px-3 py-2\">\n {inputs.map((input) => (\n <PortRow key={`input-${input.index}`} port={input} />\n ))}\n </div>\n </div>\n )}\n\n {/* Outputs Section */}\n {outputs.length > 0 && (\n <div>\n <div className=\"mb-2 text-xs font-bold uppercase tracking-wider text-gray-600\">Outputs:</div>\n <div className=\"space-y-2 rounded-md bg-gray-100/50 px-3 py-2\">\n {outputs.map((output) => (\n <PortRow key={`output-${output.index}`} port={output} />\n ))}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n\ninterface PortRowProps {\n port: PortInfo;\n}\n\nfunction PortRow({ port }: PortRowProps) {\n const getStateColor = (value: boolean | undefined) => {\n if (value === undefined) {\n return 'bg-gray-300 border-gray-400';\n }\n return value ? 'bg-green-500 border-green-600' : 'bg-gray-400 border-gray-500';\n };\n\n const getStateText = (value: boolean | undefined) => {\n if (value === undefined) {\n return null; // Don't show status for unconnected/template ports\n }\n return value ? 'ON' : 'OFF';\n };\n\n const stateText = getStateText(port.value);\n\n return (\n <div className=\"flex items-center gap-2\">\n {/* State indicator dot */}\n <div\n className={cn(\n 'h-2.5 w-2.5 rounded-full border transition-colors',\n getStateColor(port.value)\n )}\n />\n\n {/* Port label and state */}\n <div className=\"flex items-center gap-1.5 text-xs\">\n <span className=\"text-gray-700\">{port.label}</span>\n {stateText && (\n <>\n <span className=\"text-gray-500\">-</span>\n <span\n className={cn(\n 'font-medium',\n port.value === true && 'text-green-600',\n port.value === false && 'text-gray-600'\n )}\n >\n {stateText}\n </span>\n </>\n )}\n </div>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ConflictResolutionModal.js","sourceRoot":"","sources":["../../../src/editor/components/ConflictResolutionModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AASjD,MAAM,UAAU,uBAAuB,CAAC,EACtC,MAAM,EACN,UAAU,EACV,YAAY,EACZ,QAAQ,GACqB;IAC7B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,cAAK,SAAS,EAAC,4EAA4E,YACzF,eAAK,SAAS,EAAC,oDAAoD,aAEjE,eAAK,SAAS,EAAC,4DAA4D,aACzE,KAAC,aAAa,IAAC,SAAS,EAAC,wBAAwB,GAAG,EACpD,aAAI,SAAS,EAAC,qCAAqC,kCAAuB,IACtE,EAGN,eAAK,SAAS,EAAC,WAAW,aACxB,YAAG,SAAS,EAAC,4BAA4B,kIAGrC,EAEJ,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,+CAA+C,aAC5D,aAAI,SAAS,EAAC,wCAAwC,kCAAuB,EAC7E,YAAG,SAAS,EAAC,uBAAuB,oHAGhC,IACA,EAEN,eAAK,SAAS,EAAC,iDAAiD,aAC9D,aAAI,SAAS,EAAC,yCAAyC,oCAAyB,EAChF,YAAG,SAAS,EAAC,wBAAwB,wHAGjC,IACA,IACF,IACF,EAGN,eAAK,SAAS,EAAC,0DAA0D,aACvE,KAAC,MAAM,IACL,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,QAAQ,uBAGX,EACT,KAAC,MAAM,IACL,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,iDAAiD,0BAGpD,EACT,KAAC,MAAM,IACL,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,mDAAmD,4BAGtD,IACL,IACF,GACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ConflictResolutionModal.js","sourceRoot":"","sources":["../../../src/editor/components/ConflictResolutionModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AASjD,MAAM,UAAU,uBAAuB,CAAC,EACtC,MAAM,EACN,UAAU,EACV,YAAY,EACZ,QAAQ,GACqB;IAC7B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,CACL,cAAK,SAAS,EAAC,4EAA4E,YACzF,eAAK,SAAS,EAAC,oDAAoD,aAEjE,eAAK,SAAS,EAAC,4DAA4D,aACzE,KAAC,aAAa,IAAC,SAAS,EAAC,wBAAwB,GAAG,EACpD,aAAI,SAAS,EAAC,qCAAqC,kCAAuB,IACtE,EAGN,eAAK,SAAS,EAAC,WAAW,aACxB,YAAG,SAAS,EAAC,4BAA4B,kIAGrC,EAEJ,eAAK,SAAS,EAAC,WAAW,aACxB,eAAK,SAAS,EAAC,+CAA+C,aAC5D,aAAI,SAAS,EAAC,wCAAwC,kCAAuB,EAC7E,YAAG,SAAS,EAAC,uBAAuB,oHAGhC,IACA,EAEN,eAAK,SAAS,EAAC,iDAAiD,aAC9D,aAAI,SAAS,EAAC,yCAAyC,oCAAyB,EAChF,YAAG,SAAS,EAAC,wBAAwB,wHAGjC,IACA,IACF,IACF,EAGN,eAAK,SAAS,EAAC,0DAA0D,aACvE,KAAC,MAAM,IACL,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,QAAQ,uBAGX,EACT,KAAC,MAAM,IACL,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,iDAAiD,0BAGpD,EACT,KAAC,MAAM,IACL,OAAO,EAAE,YAAY,EACrB,SAAS,EAAC,mDAAmD,4BAGtD,IACL,IACF,GACF,CACP,CAAC;AACJ,CAAC","sourcesContent":["/**\n * ConflictResolutionModal Component\n *\n * Modal dialog for resolving conflicts between circuit code and canvas edits.\n * Shows when both the TypeScript circuit code and canvas have been modified simultaneously.\n *\n * User can choose to:\n * - Keep code changes (discard canvas changes)\n * - Keep canvas changes (update code from canvas)\n */\n\n'use client';\n\nimport React from 'react';\nimport { AlertTriangle } from 'lucide-react';\nimport { Button } from '../../primitives/button';\n\ninterface ConflictResolutionModalProps {\n isOpen: boolean;\n onKeepCode: () => void;\n onKeepCanvas: () => void;\n onCancel: () => void;\n}\n\nexport function ConflictResolutionModal({\n isOpen,\n onKeepCode,\n onKeepCanvas,\n onCancel,\n}: ConflictResolutionModalProps) {\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50\">\n <div className=\"bg-white rounded-lg shadow-xl max-w-md w-full mx-4\">\n {/* Header */}\n <div className=\"flex items-center gap-3 px-6 py-4 border-b border-gray-200\">\n <AlertTriangle className=\"w-6 h-6 text-amber-500\" />\n <h2 className=\"text-lg font-semibold text-gray-900\">Conflict Detected</h2>\n </div>\n\n {/* Content */}\n <div className=\"px-6 py-4\">\n <p className=\"text-sm text-gray-700 mb-4\">\n Both the circuit code and the canvas have been modified since the last sync.\n Please choose which changes to keep:\n </p>\n\n <div className=\"space-y-3\">\n <div className=\"p-3 bg-blue-50 border border-blue-200 rounded\">\n <h3 className=\"text-sm font-medium text-blue-900 mb-1\">Keep Code Changes</h3>\n <p className=\"text-xs text-blue-700\">\n The canvas will be updated to match the current circuit code.\n Any canvas-only changes will be lost.\n </p>\n </div>\n\n <div className=\"p-3 bg-green-50 border border-green-200 rounded\">\n <h3 className=\"text-sm font-medium text-green-900 mb-1\">Keep Canvas Changes</h3>\n <p className=\"text-xs text-green-700\">\n The circuit code will be regenerated from the current canvas state.\n Any code-only changes will be lost.\n </p>\n </div>\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex gap-3 px-6 py-4 border-t border-gray-200 bg-gray-50\">\n <Button\n onClick={onCancel}\n variant=\"outline\"\n className=\"flex-1\"\n >\n Cancel\n </Button>\n <Button\n onClick={onKeepCode}\n className=\"flex-1 bg-blue-600 hover:bg-blue-700 text-white\"\n >\n Keep Code\n </Button>\n <Button\n onClick={onKeepCanvas}\n className=\"flex-1 bg-green-600 hover:bg-green-700 text-white\"\n >\n Keep Canvas\n </Button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchyBreadcrumb.js","sourceRoot":"","sources":["../../../src/editor/components/HierarchyBreadcrumb.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,UAAU,mBAAmB;IACjC,MAAM,cAAc,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAClC,CAAC;IACF,MAAM,oBAAoB,GAAG,sBAAsB,CACjD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CACtC,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,6BAA6B;IAC7B,MAAM,YAAY,GAChB,oBAAoB,IAAI,CAAC,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,MAAM;QACzE,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,IAAI;QAC7C,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CACL,eAAK,SAAS,EAAC,iFAAiF,aAE9F,eAAM,SAAS,EAAC,4FAA4F,0BAErG,EAGP,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAC,mDAAmD,YAE5D,YAAY,GACN,EAGR,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,KAAK,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEnD,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,eAAM,SAAS,EAAC,eAAe,kBAAY,EAC1C,MAAM,CAAC,CAAC,CAAC;wBACR,4CAA4C;wBAC5C,gBAAM,SAAS,EAAC,2BAA2B,aACxC,KAAK,CAAC,SAAS,EAAE,GAAG,EACrB,gBAAM,SAAS,EAAC,eAAe,kBAAG,KAAK,CAAC,aAAa,SAAS,IACzD,CACR,CAAC,CAAC,CAAC;wBACF,mCAAmC;wBACnC,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,EACpC,SAAS,EAAC,mDAAmD,aAE5D,KAAK,CAAC,SAAS,EAAE,GAAG,EACrB,gBAAM,SAAS,EAAC,eAAe,kBAAG,KAAK,CAAC,aAAa,SAAS,IACvD,CACV,KAjBkB,KAAK,CAAC,MAAM,CAkBhB,CAClB,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"HierarchyBreadcrumb.js","sourceRoot":"","sources":["../../../src/editor/components/HierarchyBreadcrumb.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,CAAC;;AAEb,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,MAAM,UAAU,mBAAmB;IACjC,MAAM,cAAc,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,sBAAsB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,gBAAgB,GAAG,sBAAsB,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAClC,CAAC;IACF,MAAM,oBAAoB,GAAG,sBAAsB,CACjD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CACtC,CAAC;IAEF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7C,6BAA6B;IAC7B,MAAM,YAAY,GAChB,oBAAoB,IAAI,CAAC,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,MAAM;QACzE,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,IAAI;QAC7C,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CACL,eAAK,SAAS,EAAC,iFAAiF,aAE9F,eAAM,SAAS,EAAC,4FAA4F,0BAErG,EAGP,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAC5B,SAAS,EAAC,mDAAmD,YAE5D,YAAY,GACN,EAGR,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,KAAK,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;gBAEnD,OAAO,CACL,MAAC,KAAK,CAAC,QAAQ,eACb,eAAM,SAAS,EAAC,eAAe,kBAAY,EAC1C,MAAM,CAAC,CAAC,CAAC;wBACR,4CAA4C;wBAC5C,gBAAM,SAAS,EAAC,2BAA2B,aACxC,KAAK,CAAC,SAAS,EAAE,GAAG,EACrB,gBAAM,SAAS,EAAC,eAAe,kBAAG,KAAK,CAAC,aAAa,SAAS,IACzD,CACR,CAAC,CAAC,CAAC;wBACF,mCAAmC;wBACnC,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,EACpC,SAAS,EAAC,mDAAmD,aAE5D,KAAK,CAAC,SAAS,EAAE,GAAG,EACrB,gBAAM,SAAS,EAAC,eAAe,kBAAG,KAAK,CAAC,aAAa,SAAS,IACvD,CACV,KAjBkB,KAAK,CAAC,MAAM,CAkBhB,CAClB,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["/**\n * HierarchyBreadcrumb Component\n *\n * Renders a breadcrumb navigation bar when the user has drilled into\n * a composite component. Shows the hierarchy path and allows navigation\n * back to any level.\n */\n\n\"use client\";\n\nimport React from \"react\";\nimport { useCircuitPreviewStore } from \"../stores/circuit-preview-store\";\n\nexport function HierarchyBreadcrumb() {\n const drillDownStack = useCircuitPreviewStore((state) => state.drillDownStack);\n const navigateTo = useCircuitPreviewStore((state) => state.navigateTo);\n const compiledCircuits = useCircuitPreviewStore(\n (state) => state.compiledCircuits,\n );\n const selectedCircuitIndex = useCircuitPreviewStore(\n (state) => state.selectedCircuitIndex,\n );\n\n if (drillDownStack.length === 0) return null;\n\n // Get top-level circuit name\n const topLevelName =\n selectedCircuitIndex >= 0 && selectedCircuitIndex < compiledCircuits.length\n ? compiledCircuits[selectedCircuitIndex].name\n : \"Circuit\";\n\n return (\n <div className=\"flex items-center gap-1 border-b border-gray-200 bg-gray-50 px-4 py-1.5 text-sm\">\n {/* Read-only badge */}\n <span className=\"mr-2 rounded bg-amber-100 px-1.5 py-0.5 text-[10px] font-semibold uppercase text-amber-700\">\n Read-Only\n </span>\n\n {/* Top-level circuit (always clickable) */}\n <button\n onClick={() => navigateTo(0)}\n className=\"text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {topLevelName}\n </button>\n\n {/* Intermediate segments */}\n {drillDownStack.map((frame, index) => {\n const isLast = index === drillDownStack.length - 1;\n\n return (\n <React.Fragment key={frame.nodeId}>\n <span className=\"text-gray-400\">&gt;</span>\n {isLast ? (\n // Current (deepest) segment — not clickable\n <span className=\"font-medium text-gray-900\">\n {frame.nodeLabel}{\" \"}\n <span className=\"text-gray-500\">({frame.componentName})</span>\n </span>\n ) : (\n // Intermediate segment — clickable\n <button\n onClick={() => navigateTo(index + 1)}\n className=\"text-blue-600 hover:text-blue-800 hover:underline\"\n >\n {frame.nodeLabel}{\" \"}\n <span className=\"text-blue-400\">({frame.componentName})</span>\n </button>\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LabelEditor.js","sourceRoot":"","sources":["../../../src/editor/components/LabelEditor.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS3D,MAAM,UAAU,WAAW,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAoB;IACxF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,CAAC,CAAwC,EAAE,EAAE;QACjE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,eAAe;QACf,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE;YACL,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI;YACvB,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI;YACtB,SAAS,EAAE,wBAAwB;YACnC,SAAS,EAAE,MAAM;SAClB,YAED,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAC,sGAAsG,EAChH,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GACnC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"LabelEditor.js","sourceRoot":"","sources":["../../../src/editor/components/LabelEditor.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,CAAC;;AAEb,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS3D,MAAM,UAAU,WAAW,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAoB;IACxF,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAEhD,SAAS,CAAC,GAAG,EAAE;QACb,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,CAAC,CAAwC,EAAE,EAAE;QACjE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,eAAe;QACf,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAC,eAAe,EACzB,KAAK,EAAE;YACL,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI;YACvB,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI;YACtB,SAAS,EAAE,wBAAwB;YACnC,SAAS,EAAE,MAAM;SAClB,YAED,gBACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAC,sGAAsG,EAChH,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAC3B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,GACnC,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["/**\n * LabelEditor Component\n *\n * Inline input field for editing component labels.\n */\n\n'use client';\n\nimport React, { useEffect, useRef, useState } from 'react';\n\ninterface LabelEditorProps {\n initialValue: string;\n onSave: (value: string) => void;\n onCancel: () => void;\n position: { x: number; y: number };\n}\n\nexport function LabelEditor({ initialValue, onSave, onCancel, position }: LabelEditorProps) {\n const [value, setValue] = useState(initialValue);\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n // Auto-focus and select text\n if (inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, []);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onSave(value.trim());\n } else if (e.key === 'Escape') {\n e.preventDefault();\n onCancel();\n }\n };\n\n const handleBlur = () => {\n // Save on blur\n onSave(value.trim());\n };\n\n return (\n <div\n className=\"fixed z-[100]\"\n style={{\n left: `${position.x}px`,\n top: `${position.y}px`,\n transform: 'translate(-50%, -100%)',\n marginTop: '-8px',\n }}\n >\n <input\n ref={inputRef}\n type=\"text\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n className=\"rounded border-2 border-blue-500 bg-white px-2 py-1 text-sm font-medium shadow-lg focus:outline-none\"\n style={{ minWidth: '80px' }}\n onClick={(e) => e.stopPropagation()}\n />\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SignalOutputPanel.js","sourceRoot":"","sources":["../../../src/editor/components/SignalOutputPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,CAAC;;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,SAAS,WAAW,CAAC,KAAmC;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAAC,EAAE,UAAU,EAA0B;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEzE,OAAO,CACL,cAAK,SAAS,EAAC,yBAAyB,YACrC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,KAAmC,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;gBACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACpC,KAAK,GAAG,GAAG,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,CACL,eAEE,SAAS,EAAC,2EAA2E,aAErF,gBAAM,SAAS,EAAC,0CAA0C,aACvD,MAAM,CAAC,IAAI,SACP,EACP,eAAM,SAAS,EAAC,wEAAwE,YACrF,WAAW,CAAC,KAAK,CAAC,GACd,KARF,MAAM,CAAC,IAAI,CASZ,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SignalOutputPanel.js","sourceRoot":"","sources":["../../../src/editor/components/SignalOutputPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,CAAC;;AAEb,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,SAAS,WAAW,CAAC,KAAmC;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACpC,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAMD,MAAM,UAAU,iBAAiB,CAAC,EAAE,UAAU,EAA0B;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE1D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAEzE,OAAO,CACL,cAAK,SAAS,EAAC,yBAAyB,YACrC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9B,IAAI,KAAmC,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,UAAU,EAAE,CAAC;gBACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACpC,KAAK,GAAG,GAAG,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,CACL,eAEE,SAAS,EAAC,2EAA2E,aAErF,gBAAM,SAAS,EAAC,0CAA0C,aACvD,MAAM,CAAC,IAAI,SACP,EACP,eAAM,SAAS,EAAC,wEAAwE,YACrF,WAAW,CAAC,KAAK,CAAC,GACd,KARF,MAAM,CAAC,IAAI,CASZ,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["/**\n * SignalOutputPanel\n *\n * Displays circuit output port values in real-time during simulation.\n * Pure presentational — receives portValues as a prop.\n */\n\n'use client';\n\nimport { useCircuitStore } from '../stores';\n\nfunction formatValue(value: number | boolean | undefined): string {\n if (value === undefined) return '—';\n if (typeof value === 'boolean') return value ? '1' : '0';\n if (Math.abs(value) > 255) {\n return `0x${(value >>> 0).toString(16).toUpperCase().padStart(8, '0')}`;\n }\n return String(value);\n}\n\nexport interface SignalOutputPanelProps {\n portValues?: ReadonlyMap<string, boolean | number>;\n}\n\nexport function SignalOutputPanel({ portValues }: SignalOutputPanelProps) {\n const circuit = useCircuitStore((state) => state.circuit);\n\n if (!circuit || circuit.outputs.length === 0 || !portValues) return null;\n\n return (\n <div className=\"flex items-center gap-3\">\n {circuit.outputs.map((output) => {\n let value: number | boolean | undefined;\n for (const [key, val] of portValues) {\n if (key.endsWith(`.${output.name}`)) {\n value = val;\n }\n }\n\n return (\n <div\n key={output.name}\n className=\"flex items-center gap-1.5 rounded bg-gray-100 dark:bg-[#2a2a2e] px-2 py-1\"\n >\n <span className=\"text-xs text-gray-500 dark:text-gray-400\">\n {output.name}:\n </span>\n <span className=\"font-mono text-xs font-semibold text-emerald-600 dark:text-emerald-400\">\n {formatValue(value)}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAA2B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * Editor component exports\n */\nexport { ReactFlowProvider } from '@xyflow/react';\nexport { ClockControls, type ClockControlsProps } from './ClockControls';\nexport { SignalOutputPanel } from './SignalOutputPanel';\nexport { CircuitSelector } from './CircuitSelector';\nexport { CircuitTabBar } from './CircuitTabBar';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/hooks/index.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/hooks/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,wBAAwB,CAAC","sourcesContent":["/**\n * @simten/ui/editor\n */\nexport {\n captureEnvironmentalState,\n restoreEnvironmentalState,\n type EnvironmentalStateValue,\n} from '@simten/core/simulator';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/simulation/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/simulation/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG","sourcesContent":["/**\n * Visual Editor Simulation Utilities\n *\n * UI-specific simulation utilities. For core simulation types and functions,\n * import directly from '@simten/core/simulator'.\n */\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit-flattener.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/circuit-flattener.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"circuit-flattener.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/circuit-flattener.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Circuit Flattener (IR v0.1)\n *\n * Expands composite components into a flat Circuit containing only primitives.\n * This allows the simulator to work with nested components by flattening the\n * hierarchy into a single level, avoiding recursive evaluation overhead.\n *\n * Key features:\n * - State isolation: Each instance gets unique IDs (componentId__nodeId)\n * - Preserves all port connections through hierarchy\n * - Recursively expands nested composites\n * - Compatible with IR v0.1 Circuit/Node format\n */\n\nimport type { Circuit, Node, Connection, PortPath } from '../../types/circuit';\nimport { useCircuitLibraryStore } from '../../stores/circuit-library-store';\nimport { nanoid } from 'nanoid';\n\n/**\n * Flattened circuit contains only primitive nodes\n */\nexport interface FlattenedCircuit extends Circuit {\n // Track original node IDs to their expanded internal node IDs\n nodeMapping: Map<string, string[]>;\n}\n\n/**\n * Port mapping key format: \"nodeId.portName\"\n */\nfunction portMapKey(nodeId: string, portName: string): string {\n return `${nodeId}.${portName}`;\n}\n\n/**\n * Flatten a circuit by recursively expanding all composite components into primitives\n */\nexport function flattenCircuit(circuit: Circuit): FlattenedCircuit {\n const library = useCircuitLibraryStore.getState();\n\n const flatNodes: Node[] = [];\n const flatConnections: Connection[] = [];\n const nodeMapping = new Map<string, string[]>();\n\n // Port mapping: tracks how ports of composite nodes map to internal primitive ports\n // Format: \"nodeId.portName\" -> [\"expandedNodeId1.portName\", \"expandedNodeId2.portName\", ...]\n // Supports fan-out (one port connecting to multiple internal ports)\n const portMapping = new Map<string, PortPath[]>();\n\n // Known primitive component types (don't need to be expanded)\n const knownPrimitives = new Set([\n 'And', 'Or', 'Not', 'Nand', 'Nor', 'Xor', 'Xnor', 'Buffer',\n 'Switch', 'Button', 'Input', 'Led', 'HexDisplay', 'SevenSegment',\n 'DFlipFlop', 'Register', 'RAM'\n ]);\n\n // Recursively expand each node\n for (const node of circuit.nodes) {\n // Check if it's a known primitive (don't need library lookup)\n if (knownPrimitives.has(node.componentRef)) {\n flatNodes.push(node);\n nodeMapping.set(node.id, [node.id]);\n continue;\n }\n\n // Try to resolve from library for user-defined components\n const componentDef = library.resolveCircuit(node.componentRef);\n\n if (!componentDef) {\n // Unknown component - treat as primitive (fail gracefully)\n console.warn(`[FLATTEN] Component not found: ${node.componentRef}, treating as primitive`);\n flatNodes.push(node);\n nodeMapping.set(node.id, [node.id]);\n continue;\n }\n\n // If primitive, keep as-is\n if (componentDef.implementation.kind === 'primitive') {\n flatNodes.push(node);\n nodeMapping.set(node.id, [node.id]);\n continue;\n }\n\n // If composite, expand it\n if (componentDef.implementation.kind === 'composite') {\n const expansionResult = expandCompositeNode(\n node,\n componentDef,\n library.resolveCircuit.bind(library),\n knownPrimitives\n );\n\n flatNodes.push(...expansionResult.nodes);\n nodeMapping.set(node.id, expansionResult.nodes.map(n => n.id));\n\n // Merge port mappings\n for (const [key, values] of expansionResult.portMapping.entries()) {\n const existing = portMapping.get(key) || [];\n portMapping.set(key, [...existing, ...values]);\n }\n\n // Add internal connections\n flatConnections.push(...expansionResult.connections);\n }\n }\n\n // Remap external connections to go through expanded internal nodes\n for (const conn of circuit.connections) {\n const remappedConns = remapConnection(conn, portMapping);\n flatConnections.push(...remappedConns);\n }\n\n return {\n ...circuit,\n nodes: flatNodes,\n connections: flatConnections,\n nodeMapping,\n };\n}\n\n/**\n * Expand a single composite node into its internal primitive nodes\n */\ninterface ExpansionResult {\n nodes: Node[];\n connections: Connection[];\n portMapping: Map<string, PortPath[]>;\n}\n\nfunction expandCompositeNode(\n node: Node,\n componentDef: Circuit,\n resolveCircuit: (name: string) => Circuit | undefined,\n knownPrimitives: Set<string>,\n visited: Set<string> = new Set()\n): ExpansionResult {\n const nodes: Node[] = [];\n const connections: Connection[] = [];\n const portMapping = new Map<string, PortPath[]>();\n\n // Create internal nodes with prefixed IDs\n for (const internalNode of componentDef.nodes) {\n const expandedId = `${node.id}__${internalNode.id}`;\n\n // Check if it's a known primitive\n if (knownPrimitives.has(internalNode.componentRef)) {\n // Primitive node - create expanded version\n const expandedNode: Node = {\n ...internalNode,\n id: expandedId,\n inputs: internalNode.inputs.map(inp => ({\n ...inp,\n id: `${expandedId}.${inp.name}`,\n })),\n outputs: internalNode.outputs.map(out => ({\n ...out,\n id: `${expandedId}.${out.name}`,\n })),\n };\n\n nodes.push(expandedNode);\n continue;\n }\n\n // Check if internal node is also composite - recursively expand\n const internalComponentDef = resolveCircuit(internalNode.componentRef);\n\n if (internalComponentDef?.implementation.kind === 'composite') {\n // Guard against recursive circuit definitions\n if (visited.has(internalNode.componentRef)) {\n console.warn(`[FLATTEN] Recursive circuit reference: ${internalNode.componentRef}, skipping`);\n continue;\n }\n const childVisited = new Set(visited);\n childVisited.add(internalNode.componentRef);\n // Recursively expand nested composite\n const nestedExpansion = expandCompositeNode(\n { ...internalNode, id: expandedId },\n internalComponentDef,\n resolveCircuit,\n knownPrimitives,\n childVisited\n );\n\n nodes.push(...nestedExpansion.nodes);\n connections.push(...nestedExpansion.connections);\n\n // Remap nested port mappings through our prefix\n for (const [key, values] of nestedExpansion.portMapping.entries()) {\n const [keyNodeId, keyPortName] = key.split('.');\n const remappedKey = portMapKey(keyNodeId, keyPortName);\n const existing = portMapping.get(remappedKey) || [];\n portMapping.set(remappedKey, [...existing, ...values]);\n }\n } else {\n // Unknown or primitive node - create expanded version\n const expandedNode: Node = {\n ...internalNode,\n id: expandedId,\n inputs: internalNode.inputs.map(inp => ({\n ...inp,\n id: `${expandedId}.${inp.name}`,\n })),\n outputs: internalNode.outputs.map(out => ({\n ...out,\n id: `${expandedId}.${out.name}`,\n })),\n };\n\n nodes.push(expandedNode);\n }\n }\n\n // Process internal connections and build port mappings\n for (const conn of componentDef.connections) {\n const sourceNodeId = conn.source.nodeId === '' ? node.id : `${node.id}__${conn.source.nodeId}`;\n const targetNodeId = conn.target.nodeId === '' ? node.id : `${node.id}__${conn.target.nodeId}`;\n\n // If source is circuit-level input (empty nodeId), create port mapping\n if (conn.source.nodeId === '') {\n // Map: original node's input port -> internal node's input port\n const originalInputKey = portMapKey(node.id, conn.source.portName);\n const internalTargetPath: PortPath = {\n nodeId: targetNodeId,\n portName: conn.target.portName,\n };\n const existing = portMapping.get(originalInputKey) || [];\n portMapping.set(originalInputKey, [...existing, internalTargetPath]);\n }\n\n // If target is circuit-level output (empty nodeId), create port mapping\n if (conn.target.nodeId === '') {\n // Map: original node's output port -> internal node's output port\n const originalOutputKey = portMapKey(node.id, conn.target.portName);\n const internalSourcePath: PortPath = {\n nodeId: sourceNodeId,\n portName: conn.source.portName,\n };\n const existing = portMapping.get(originalOutputKey) || [];\n portMapping.set(originalOutputKey, [...existing, internalSourcePath]);\n }\n\n // Only create internal connection if both sides are internal nodes\n if (conn.source.nodeId !== '' && conn.target.nodeId !== '') {\n const expandedConn: Connection = {\n ...conn,\n id: nanoid(),\n source: { nodeId: sourceNodeId, portName: conn.source.portName },\n target: { nodeId: targetNodeId, portName: conn.target.portName },\n };\n connections.push(expandedConn);\n }\n }\n\n return { nodes, connections, portMapping };\n}\n\n/**\n * Remap a connection through port mappings (for composite component ports)\n * Returns an array to handle fan-out (one source to multiple targets)\n */\nfunction remapConnection(\n conn: Connection,\n portMapping: Map<string, PortPath[]>\n): Connection[] {\n // Try to remap source\n const sourceKey = portMapKey(conn.source.nodeId, conn.source.portName);\n const remappedSources = portMapping.get(sourceKey) || [conn.source];\n\n // Try to remap target\n const targetKey = portMapKey(conn.target.nodeId, conn.target.portName);\n const remappedTargets = portMapping.get(targetKey) || [conn.target];\n\n // Create connection for each combination of source/target (handles fan-out)\n const connections: Connection[] = [];\n\n for (const source of remappedSources) {\n for (const target of remappedTargets) {\n connections.push({\n ...conn,\n id: nanoid(),\n source,\n target,\n });\n }\n }\n\n return connections;\n}\n\n/**\n * Check if a circuit contains any composite components\n */\nexport function hasCompositeComponents(circuit: Circuit): boolean {\n const library = useCircuitLibraryStore.getState();\n\n for (const node of circuit.nodes) {\n const componentDef = library.resolveCircuit(node.componentRef);\n if (componentDef?.implementation.kind === 'composite') {\n return true;\n }\n }\n\n return false;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"component-utils.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/component-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,SAAS,qBAAqB,CAAC,aAAqB;IAClD,OAAO,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,UAAqC,EACrC,cAAqD,EACrD,UAAuB,IAAI,GAAG,EAAE;IAEhC,qDAAqD;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3B,4EAA4E;IAC5E,IAAI,qBAAqB,CAAC,aAAa,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,sDAAsD;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wFAAwF;IACxF,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,yDAAyD;YACzD,IAAI,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAqC,EACrC,cAAqD;IAErD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,IAAI,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"component-utils.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/component-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,SAAS,qBAAqB,CAAC,aAAqB;IAClD,OAAO,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,UAAqC,EACrC,cAAqD,EACrD,UAAuB,IAAI,GAAG,EAAE;IAEhC,qDAAqD;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3B,4EAA4E;IAC5E,IAAI,qBAAqB,CAAC,aAAa,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,sDAAsD;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,wFAAwF;IACxF,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,yDAAyD;YACzD,IAAI,yBAAyB,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;gBACtF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAqC,EACrC,cAAqD;IAErD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAClD,IAAI,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Circuit Utility Functions\n *\n * Helper functions for analyzing circuit structure and properties.\n */\n\nimport type { Component } from '../../types';\nimport type { Circuit } from '../../types/circuit';\nimport { isSequentialComponent } from '../../types';\n\n/**\n * Check if a circuit type is sequential.\n * Delegates entirely to isSequentialComponent (data-driven via clock ports).\n */\nfunction isSequentialPrimitive(componentType: string): boolean {\n return isSequentialComponent(componentType);\n}\n\n/**\n * Recursively checks if a circuit or any of its nested circuits\n * contains sequential primitives (D_FLIP_FLOP, REGISTER, RAM).\n *\n * @param componentType - The type/name of the circuit to check\n * @param components - The current circuit's component instances\n * @param resolveCircuit - Function to resolve circuit definitions from the library\n * @param visited - Set of already-visited circuit types to prevent infinite recursion\n * @returns true if the circuit or any nested circuit is sequential\n */\nexport function containsSequentialCircuit(\n componentType: string,\n components: Record<string, Component>,\n resolveCircuit: (name: string) => Circuit | undefined,\n visited: Set<string> = new Set()\n): boolean {\n // Prevent infinite recursion for circular references\n if (visited.has(componentType)) {\n return false;\n }\n visited.add(componentType);\n\n // Check if this is a sequential primitive (handles both old and new naming)\n if (isSequentialPrimitive(componentType)) {\n return true;\n }\n\n // Resolve the circuit definition from the library\n const circuit = resolveCircuit(componentType);\n if (!circuit) {\n // Circuit not found in library, assume non-sequential\n return false;\n }\n\n // If this is a primitive implementation, it's not sequential (we already checked above)\n if (circuit.implementation.kind === 'primitive') {\n return false;\n }\n\n // For composite circuits, recursively check all internal nodes\n if (circuit.implementation.kind === 'composite') {\n for (const node of circuit.nodes) {\n // Recursively check if this node's circuit is sequential\n if (containsSequentialCircuit(node.componentRef, components, resolveCircuit, visited)) {\n return true;\n }\n }\n }\n\n // No sequential circuits found\n return false;\n}\n\n/**\n * Checks if the current circuit has any sequential circuits,\n * including those nested inside composite circuits.\n *\n * @param components - The current circuit's component instances\n * @param resolveCircuit - Function to resolve circuit definitions from the library\n * @returns true if any circuit in the hierarchy is or contains sequential primitives\n */\nexport function hasSequentialCircuits(\n components: Record<string, Component>,\n resolveCircuit: (name: string) => Circuit | undefined\n): boolean {\n for (const component of Object.values(components)) {\n if (containsSequentialCircuit(component.type, components, resolveCircuit)) {\n return true;\n }\n }\n return false;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './circuit-flattener';\nexport * from './component-utils';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/visualization/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/editor/lib/visualization/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC","sourcesContent":["export * from './vcd-generator';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"vcd-generator.js","sourceRoot":"","sources":["../../../../src/editor/lib/visualization/vcd-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vcd-generator.js","sourceRoot":"","sources":["../../../../src/editor/lib/visualization/vcd-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,WAAwB,EACxB,SAAS,GAAG,MAAM;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5C,iCAAiC;IACjC,MAAM,SAAS,GAAG,4BAA4B,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAEnE,4CAA4C;IAC5C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,oBAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,4BAA4B,CACnC,WAAwB,EACxB,KAAe;IAEf,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAE3C,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;QAE1B,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,WAAW,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEnC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAG,kGAAkG,CAAC;IACjH,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,uCAAuC;IACvC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACd,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAClC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM;IACnB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,WAAwB,EACxB,SAA8B,EAC9B,KAAe;IAEf,+CAA+C;IAC/C,MAAM,OAAO,GAKR,EAAE,CAAC;IAER,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QAC9C,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,GAAG;gBACd,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAE1C,sCAAsC;IACtC,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;IACtB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,kCAAkC;QAClC,IAAI,MAAM,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;YAClC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC;QAE/C,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACvB,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7G,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAe,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAa;IAC1D,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,yBAAyB;IACzB,OAAO,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,yCAAyC;IACzC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC1B,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,WAAwB,EACxB,QAAgB,EAChB,SAAS,GAAG,MAAM;IAElB,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvD,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,QAAgB;IAC3D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAiBD;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAI/C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,SAAS,GAAG,MAAM,CAAC;IACvB,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YAC7B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,WAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnD,SAAS,GAAG,OAAO,CAAC;YACpB,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,0BAA0B;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;oBACd,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;oBACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;iBACf,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;YAClC,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC;AAED,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAwB;IAMlD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QAC3C,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7C,OAAO;QACL,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI;QACpC,WAAW,EAAE,QAAQ,GAAG,CAAC;QACzB,YAAY;QACZ,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAqC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,cAAc,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,gBAAgB,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,IAAI,KAAK,GAAG,IAAI;QAAE,OAAO,GAAG,KAAK,IAAI,CAAC;IACtC,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACpD,CAAC","sourcesContent":["/**\n * VCD (Value Change Dump) Generator\n *\n * Generates industry-standard VCD waveform files from testbench traces.\n * VCD files can be viewed in GTKWave, ModelSim, Vivado, and other tools.\n *\n * VCD Format Specification:\n * - Header: version, date, timescale, scope, variable declarations\n * - Body: timestamp and value change records\n * - Compact: Only emit value changes, not every cycle\n *\n * References:\n * - IEEE 1364-2001 VCD Format\n * - GTKWave documentation\n */\n\nimport { CaptureData, TraceData, SignalRef } from '../../types/testbench';\nimport { BitValue, BusValue } from '../../types/circuit';\n\n// ============================================================================\n// VCD Generator\n// ============================================================================\n\n/**\n * Generate VCD file content from capture data\n *\n * @param captureData - Trace data collected during testbench run\n * @param timescale - Time unit (default: \"1 ns\" - 1 nanosecond per cycle)\n * @returns VCD file content as string\n */\nexport function generateVCD(\n captureData: CaptureData,\n timescale = '1 ns'\n): string {\n const lines: string[] = [];\n\n // Generate header\n lines.push(...generateVCDHeader(timescale));\n\n // Generate variable declarations\n const signalIds = generateVariableDeclarations(captureData, lines);\n\n // Generate initial values and value changes\n lines.push('$dumpvars');\n generateValueChanges(captureData, signalIds, lines);\n lines.push('$end');\n\n return lines.join('\\n');\n}\n\n/**\n * Generate VCD header section\n */\nfunction generateVCDHeader(timescale: string): string[] {\n const lines: string[] = [];\n const now = new Date().toISOString();\n\n lines.push('$date');\n lines.push(` ${now}`);\n lines.push('$end');\n\n lines.push('$version');\n lines.push(' Simten VCD Generator v0.1');\n lines.push('$end');\n\n lines.push('$timescale');\n lines.push(` ${timescale}`);\n lines.push('$end');\n\n return lines;\n}\n\n/**\n * Generate variable declarations and assign signal IDs\n *\n * VCD uses short identifiers for signals (!, \", #, $, %, etc.)\n * to keep file size small.\n *\n * @returns Map from signal key to VCD identifier\n */\nfunction generateVariableDeclarations(\n captureData: CaptureData,\n lines: string[]\n): Map<string, string> {\n const signalIds = new Map<string, string>();\n\n lines.push('$scope module testbench $end');\n\n let idCounter = 0;\n for (const [key, trace] of captureData.traces) {\n const vcdId = generateVCDIdentifier(idCounter++);\n signalIds.set(key, vcdId);\n\n const signal = trace.signal;\n const varType = signal.width === 1 ? 'wire' : 'wire';\n const size = signal.width;\n\n lines.push(`$var ${varType} ${size} ${vcdId} ${signal.displayName} $end`);\n }\n\n lines.push('$upscope $end');\n lines.push('$enddefinitions $end');\n\n return signalIds;\n}\n\n/**\n * Generate VCD identifier from index\n *\n * VCD uses printable ASCII characters (33-126) for identifiers.\n * We use a simple base-94 encoding: !, \", #, $, %, ..., ~\n *\n * Examples: 0 → !, 1 → \", 2 → #, ..., 93 → ~, 94 → !!, 95 → !\"\n */\nfunction generateVCDIdentifier(index: number): string {\n const chars = '!\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';\n if (index < chars.length) {\n return chars[index];\n }\n\n // Multi-character IDs for > 94 signals\n let id = '';\n let n = index;\n while (n >= 0) {\n id = chars[n % chars.length] + id;\n n = Math.floor(n / chars.length) - 1;\n if (n < 0) break;\n }\n return id;\n}\n\n/**\n * Generate value changes section\n *\n * Format:\n * - Bit: 0! or 1! (value + identifier)\n * - Bus: b00101010 ! (binary value + identifier)\n * - Timestamp: #100 (hash + time)\n */\nfunction generateValueChanges(\n captureData: CaptureData,\n signalIds: Map<string, string>,\n lines: string[]\n): void {\n // Collect all value changes across all signals\n const changes: Array<{\n cycle: number;\n signalKey: string;\n value: BitValue | BusValue;\n width: number;\n }> = [];\n\n for (const [key, trace] of captureData.traces) {\n for (const change of trace.changes) {\n changes.push({\n cycle: change.cycle,\n signalKey: key,\n value: change.value,\n width: trace.signal.width,\n });\n }\n }\n\n // Sort by cycle (stable sort to preserve signal order within same cycle)\n changes.sort((a, b) => a.cycle - b.cycle);\n\n // Emit value changes grouped by cycle\n let currentCycle = -1;\n for (const change of changes) {\n // Emit timestamp if cycle changed\n if (change.cycle !== currentCycle) {\n currentCycle = change.cycle;\n lines.push(`#${currentCycle}`);\n }\n\n const vcdId = signalIds.get(change.signalKey)!;\n\n if (change.width === 1) {\n // Bit signal: \"0!\" or \"1!\"\n const bitValue = typeof change.value === 'boolean' ? (change.value ? '1' : '0') : (change.value ? '1' : '0');\n lines.push(`${bitValue}${vcdId}`);\n } else {\n // Bus signal: \"b00101010 !\"\n const busValue = formatBusValueAsBinary(change.value as number, change.width);\n lines.push(`b${busValue} ${vcdId}`);\n }\n }\n}\n\n/**\n * Format a bus value as binary string\n *\n * @param value - Numeric value\n * @param width - Bit width\n * @returns Binary string (e.g., \"00101010\" for 42 with width 8)\n */\nfunction formatBusValueAsBinary(value: number, width: number): string {\n let binary = value.toString(2);\n\n // Pad with leading zeros\n while (binary.length < width) {\n binary = '0' + binary;\n }\n\n // Truncate if too long (handle overflow)\n if (binary.length > width) {\n binary = binary.slice(-width);\n }\n\n return binary;\n}\n\n// ============================================================================\n// VCD File Writing\n// ============================================================================\n\n/**\n * Write VCD to file (triggers browser download)\n */\nexport function writeVCDToFile(\n captureData: CaptureData,\n filename: string,\n timescale = '1 ns'\n): void {\n const vcdContent = generateVCD(captureData, timescale);\n downloadVCD(vcdContent, filename);\n}\n\n/**\n * Trigger VCD file download in browser\n */\nexport function downloadVCD(content: string, filename: string): void {\n const blob = new Blob([content], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n}\n\n// ============================================================================\n// VCD Parsing (for testing/verification)\n// ============================================================================\n\n/**\n * Parse VCD header to extract signal information\n * (Useful for testing and verification)\n */\nexport interface VCDSignalInfo {\n id: string;\n name: string;\n width: number;\n type: string;\n}\n\n/**\n * Parse VCD file header\n */\nexport function parseVCDHeader(vcdContent: string): {\n timescale: string;\n signals: VCDSignalInfo[];\n} {\n const lines = vcdContent.split('\\n');\n let timescale = '1 ns';\n const signals: VCDSignalInfo[] = [];\n\n let inTimescale = false;\n let inVars = false;\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n if (trimmed === '$timescale') {\n inTimescale = true;\n } else if (inTimescale && !trimmed.startsWith('$')) {\n timescale = trimmed;\n inTimescale = false;\n }\n\n if (trimmed.startsWith('$var')) {\n // $var wire 8 ! data $end\n const parts = trimmed.split(/\\s+/);\n if (parts.length >= 5) {\n signals.push({\n type: parts[1],\n width: parseInt(parts[2]),\n id: parts[3],\n name: parts[4],\n });\n }\n }\n\n if (trimmed === '$enddefinitions') {\n break;\n }\n }\n\n return { timescale, signals };\n}\n\n// ============================================================================\n// Debugging\n// ============================================================================\n\n/**\n * Get VCD file statistics\n */\nexport function getVCDStats(captureData: CaptureData): {\n signalCount: number;\n totalCycles: number;\n totalChanges: number;\n fileSize: number;\n} {\n let totalChanges = 0;\n let maxCycle = 0;\n\n for (const [, trace] of captureData.traces) {\n totalChanges += trace.changes.length;\n if (trace.changes.length > 0) {\n maxCycle = Math.max(maxCycle, trace.changes[trace.changes.length - 1].cycle);\n }\n }\n\n const vcdContent = generateVCD(captureData);\n const fileSize = new Blob([vcdContent]).size;\n\n return {\n signalCount: captureData.traces.size,\n totalCycles: maxCycle + 1,\n totalChanges,\n fileSize,\n };\n}\n\n/**\n * Format VCD stats for display\n */\nexport function formatVCDStats(stats: ReturnType<typeof getVCDStats>): string {\n const lines: string[] = [];\n lines.push('VCD Statistics:');\n lines.push(` Signals: ${stats.signalCount}`);\n lines.push(` Cycles: ${stats.totalCycles}`);\n lines.push(` Value Changes: ${stats.totalChanges}`);\n lines.push(` File Size: ${formatBytes(stats.fileSize)}`);\n return lines.join('\\n');\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit-library-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-library-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA0BjC,SAAS,YAAY,CAAC,QAA8B;IAClD,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO;QACL,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5C,oBAAoB,EAAE,GAAG,EAAE,CACzB,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,EAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE7C,OAAO;QACL,OAAO,EAAE,IAAI;QAEb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC,CAAC;YAC3C,CAAC;YACD,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;YACxB,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAwB;QAEpF,oBAAoB,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE;KACxE,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"circuit-library-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-library-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AA0BjC,SAAS,YAAY,CAAC,QAA8B;IAClD,8DAA8D;IAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO;QACL,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5C,oBAAoB,EAAE,GAAG,EAAE,CACzB,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,EAAuB,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/E,6EAA6E;IAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE7C,OAAO;QACL,OAAO,EAAE,IAAI;QAEb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC;oBAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC,CAAC;YAC3C,CAAC;YACD,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACtB,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrC,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;YACxB,KAAK,MAAM,CAAC,IAAI,QAAQ;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,EAAE,GAAG,EAAE;YACV,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAwB;QAEpF,oBAAoB,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE;KACxE,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/**\n * Circuit Library Store\n *\n * Holds all circuit definitions available for simulation and canvas rendering.\n * Populated from the compiled result of executeCircuitCode() via setLibrary().\n *\n * All circuits are equal — no primitives/standard/user split.\n */\n\nimport { create } from 'zustand';\nimport type { Circuit } from '../types/circuit';\nimport type { CircuitLibrary } from '@simten/core/simulator';\n\ninterface CircuitLibraryStore {\n // Stable CircuitLibrary reference — changes identity only when circuits change.\n // null until first compile succeeds (or addCircuit is called).\n library: CircuitLibrary | null;\n\n // Set all circuits from a compiled result (production path)\n setLibrary: (lib: { resolveCircuit(name: string): Circuit | undefined; getAllCircuitNames(): string[] }) => void;\n\n // Add circuits directly (used by tests)\n addCircuit: (circuit: Circuit) => void;\n addCircuits: (circuits: Circuit[]) => void;\n\n // Clear all circuits\n clear: () => void;\n\n // Consumer interface — delegates to library\n resolveCircuit: (name: string) => Circuit | undefined;\n getAllPrimitiveNames: () => string[];\n}\n\nexport type { CircuitLibraryStore };\n\nfunction buildLibrary(circuits: Map<string, Circuit>): CircuitLibrary {\n // Snapshot the map so the library is immutable after creation\n const snapshot = new Map(circuits);\n return {\n resolveCircuit: (name) => snapshot.get(name),\n getAllPrimitiveNames: () =>\n [...snapshot.entries()]\n .filter(([, c]) => c.implementation.kind === 'primitive')\n .map(([n]) => n),\n };\n}\n\nexport const useCircuitLibraryStore = create<CircuitLibraryStore>()((set, get) => {\n // Mutable backing map — not in Zustand state to avoid serialization overhead\n const _circuits = new Map<string, Circuit>();\n\n return {\n library: null,\n\n setLibrary: (lib) => {\n _circuits.clear();\n for (const name of lib.getAllCircuitNames()) {\n const c = lib.resolveCircuit(name);\n if (c) _circuits.set(name, c as Circuit);\n }\n set({ library: buildLibrary(_circuits) });\n },\n\n addCircuit: (circuit) => {\n _circuits.set(circuit.name, circuit);\n set({ library: buildLibrary(_circuits) });\n },\n\n addCircuits: (circuits) => {\n for (const c of circuits) _circuits.set(c.name, c);\n set({ library: buildLibrary(_circuits) });\n },\n\n clear: () => {\n _circuits.clear();\n set({ library: null });\n },\n\n resolveCircuit: (name) => get().library?.resolveCircuit(name) as Circuit | undefined,\n\n getAllPrimitiveNames: () => get().library?.getAllPrimitiveNames() ?? [],\n };\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit-preview-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-preview-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"circuit-preview-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-preview-store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Circuit Preview Store - Compiled Circuit / Canvas Integration State Management\n *\n * Manages compiled TypeScript circuit results, circuit selection, and bidirectional sync\n * between circuit code and canvas visualization.\n *\n * Key responsibilities:\n * - Store compiled circuits from TypeScript builder code\n * - Track which circuit to visualize (default: last in file)\n * - Version tracking for conflict detection\n * - Apply selected circuit to canvas\n */\n\nimport { create } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport type { Circuit } from '../types/circuit';\nimport { useCircuitStore } from './circuit-store';\nimport { useCircuitLibraryStore } from './circuit-library-store';\nimport { createDrillDownViewCircuit } from '../../canvas/drill-down-view';\nimport { autoHarness } from '@simten/core/circuit';\nimport { Switch, Button, Led, Input, Output, HexDisplay } from '@simten/core/std';\n\n/**\n * Hash function for circuit code version tracking\n * Simple but effective for detecting changes\n */\nfunction hashCode(code: string): string {\n // Use btoa (base64 encode) with substring for fast comparison\n // This is sufficient for change detection (not cryptographic security)\n try {\n return btoa(code).substring(0, 16);\n } catch {\n // Fallback for invalid characters\n return code.length.toString(16);\n }\n}\n\n/**\n * A single frame on the drill-down navigation stack.\n * Each frame represents one level of composite hierarchy.\n */\nexport interface DrillDownFrame {\n nodeId: string; // Instance node ID in the parent circuit (e.g., \"ha1_abc\")\n nodeLabel: string; // Human-readable label (e.g., \"ha1\")\n componentName: string; // Component type name (e.g., \"HalfAdder\")\n circuit: Circuit; // The view circuit (with boundary nodes) for this level\n}\n\ninterface CircuitPreviewActions {\n // Circuit management\n setCompiledCircuits: (circuits: Circuit[], code: string) => void;\n selectCircuit: (index: number) => void;\n applyToCanvas: () => void;\n\n // Version tracking\n updateVersion: (code: string) => void;\n hasConflict: () => boolean;\n resolveConflict: (keepCode: boolean) => void;\n\n // Auto-compile toggle\n toggleAutoCompile: () => void;\n setAutoCompileEnabled: (enabled: boolean) => void;\n\n // Canvas → code sync\n updateFromCanvas: (circuit: Circuit, code: string) => void;\n\n // Drill-down navigation\n drillInto: (nodeId: string) => void;\n drillUp: () => void;\n navigateTo: (depth: number) => void;\n isDrilledIn: () => boolean;\n getPortValuePrefix: () => string;\n}\n\ninterface CircuitPreviewState {\n compiledCircuits: Circuit[];\n selectedCircuitIndex: number; // -1 if none, defaults to last circuit\n autoCompileEnabled: boolean;\n\n // Version tracking for conflict detection\n version: string; // Hash of current circuit code\n lastSyncedVersion: string; // Hash when canvas last synced from code\n\n // Drill-down navigation stack (empty = top-level view)\n drillDownStack: DrillDownFrame[];\n}\n\nexport interface CircuitPreviewStore extends CircuitPreviewState, CircuitPreviewActions {}\n\nconst initialState: CircuitPreviewState = {\n compiledCircuits: [],\n selectedCircuitIndex: -1,\n autoCompileEnabled: true,\n version: '',\n lastSyncedVersion: '',\n drillDownStack: [],\n};\n\nexport const useCircuitPreviewStore = create<CircuitPreviewStore>()(\n immer((set, get) => ({\n ...initialState,\n\n setCompiledCircuits: (circuits, code) => {\n const hash = hashCode(code);\n\n set((state) => {\n state.compiledCircuits = circuits;\n state.version = hash;\n state.lastSyncedVersion = hash; // Circuit code is source of truth at compile time\n state.drillDownStack = []; // Clear drill-down on recompile\n\n // Auto-select last circuit (most recently written)\n if (circuits.length > 0) {\n state.selectedCircuitIndex = circuits.length - 1;\n } else {\n state.selectedCircuitIndex = -1;\n }\n });\n\n // Automatically apply to canvas\n get().applyToCanvas();\n },\n\n selectCircuit: (index) => {\n const { compiledCircuits } = get();\n\n if (index < 0 || index >= compiledCircuits.length) {\n console.warn(`Invalid circuit index: ${index}`);\n return;\n }\n\n set((state) => {\n state.selectedCircuitIndex = index;\n state.drillDownStack = []; // Clear drill-down on circuit switch\n });\n\n // Apply selected circuit to canvas\n get().applyToCanvas();\n },\n\n applyToCanvas: () => {\n const { compiledCircuits, selectedCircuitIndex } = get();\n\n if (selectedCircuitIndex < 0 || selectedCircuitIndex >= compiledCircuits.length) {\n useCircuitStore.getState().clearCircuit();\n return;\n }\n\n const selectedCircuit = compiledCircuits[selectedCircuitIndex];\n\n // Ensure harness components (Switch, Led, etc.) are in the library\n const libStore = useCircuitLibraryStore.getState();\n for (const c of [Switch(), Button(), Led, Input(), Output, HexDisplay]) {\n if (!libStore.resolveCircuit(c.circuit.name)) libStore.addCircuit(c.circuit);\n }\n\n // Wrap with Switch/Led harness so inputs/outputs are interactive on canvas\n const harnessed = autoHarness(selectedCircuit, {\n resolveCircuit: (name) => useCircuitLibraryStore.getState().resolveCircuit(name),\n addCircuit: (c) => useCircuitLibraryStore.getState().addCircuit(c),\n });\n\n // Apply to CircuitStore (auto-layout handled by CircuitCanvas)\n useCircuitStore.getState().setCircuit(harnessed);\n\n },\n\n updateVersion: (code) => {\n const hash = hashCode(code);\n set((state) => {\n state.version = hash;\n });\n },\n\n hasConflict: () => {\n const { version, lastSyncedVersion } = get();\n return version !== lastSyncedVersion && lastSyncedVersion !== '';\n },\n\n resolveConflict: (keepCode) => {\n if (keepCode) {\n // User chose to keep circuit code changes\n // Re-apply circuit code to canvas (discard canvas changes)\n get().applyToCanvas();\n } else {\n // User chose to keep canvas changes\n // Update lastSyncedVersion to current circuit code version\n set((state) => {\n state.lastSyncedVersion = state.version;\n });\n }\n },\n\n toggleAutoCompile: () => {\n set((state) => {\n state.autoCompileEnabled = !state.autoCompileEnabled;\n });\n },\n\n setAutoCompileEnabled: (enabled) => {\n set((state) => {\n state.autoCompileEnabled = enabled;\n });\n },\n\n updateFromCanvas: (circuit, code) => {\n const hash = hashCode(code);\n\n set((state) => {\n // Update the selected circuit in compiledCircuits\n if (\n state.selectedCircuitIndex >= 0 &&\n state.selectedCircuitIndex < state.compiledCircuits.length\n ) {\n state.compiledCircuits[state.selectedCircuitIndex] = circuit;\n }\n\n // Update version tracking\n state.version = hash;\n state.lastSyncedVersion = hash;\n });\n },\n\n // ── Drill-down navigation ──\n\n drillInto: (nodeId: string) => {\n // Determine the currently active circuit (either drilled-in view or top-level)\n const { drillDownStack, compiledCircuits, selectedCircuitIndex } = get();\n\n let activeCircuit: Circuit | null;\n if (drillDownStack.length > 0) {\n // Currently inside a drill-down; look for the node in the current view\n activeCircuit = drillDownStack[drillDownStack.length - 1].circuit;\n } else {\n activeCircuit = selectedCircuitIndex >= 0 ? compiledCircuits[selectedCircuitIndex] : null;\n }\n\n if (!activeCircuit) {\n console.warn('[CircuitPreviewStore] drillInto: no active circuit');\n return;\n }\n\n // Find the node\n const node = activeCircuit.nodes.find(n => n.id === nodeId);\n if (!node) {\n console.warn('[CircuitPreviewStore] drillInto: node not found:', nodeId);\n return;\n }\n\n // Resolve the component definition\n const componentDef = useCircuitLibraryStore.getState().resolveCircuit(node.componentRef);\n if (!componentDef || componentDef.implementation.kind !== 'composite') {\n console.warn('[CircuitPreviewStore] drillInto: not a composite component:', node.componentRef);\n return;\n }\n\n // Build the view circuit with boundary nodes\n const viewCircuit = createDrillDownViewCircuit(componentDef);\n\n // Push frame onto stack\n const frame: DrillDownFrame = {\n nodeId,\n nodeLabel: node.label || node.id,\n componentName: node.componentRef,\n circuit: viewCircuit,\n };\n\n set((state) => {\n state.drillDownStack.push(frame);\n });\n\n // Apply the view circuit to canvas\n useCircuitStore.getState().setCircuit(viewCircuit);\n },\n\n drillUp: () => {\n const { drillDownStack } = get();\n if (drillDownStack.length === 0) return;\n\n get().navigateTo(drillDownStack.length - 1);\n },\n\n navigateTo: (depth: number) => {\n const { drillDownStack } = get();\n\n if (depth === 0) {\n // Return to top-level\n set((state) => {\n state.drillDownStack = [];\n });\n get().applyToCanvas();\n return;\n }\n\n if (depth >= drillDownStack.length) {\n // Already at or beyond target depth — no-op\n return;\n }\n\n // Pop stack to target depth and apply that level's circuit\n const targetFrame = drillDownStack[depth - 1];\n set((state) => {\n state.drillDownStack = state.drillDownStack.slice(0, depth);\n });\n\n // Apply the target frame's circuit\n useCircuitStore.getState().setCircuit(targetFrame.circuit);\n },\n\n isDrilledIn: () => {\n return get().drillDownStack.length > 0;\n },\n\n getPortValuePrefix: () => {\n const { drillDownStack } = get();\n if (drillDownStack.length === 0) return '';\n\n // Build prefix by concatenating all frame node IDs with dots\n return drillDownStack.map(f => f.nodeId).join('.') + '.';\n },\n }))\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"circuit-store.js","sourceRoot":"","sources":["../../../src/editor/stores/circuit-store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Circuit Store - IR v0.1 State Management\n *\n * This store manages the Circuit (IR v0.1) format, which uses name-based ports\n * and provides the canonical representation for the visual editor.\n *\n * Migration note: This replaces the legacy ir-store.ts which used index-based ports.\n * During migration, both stores coexist with conversion between formats.\n */\n\nimport { create } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport { nanoid } from 'nanoid';\nimport type {\n Circuit,\n Node,\n Connection,\n PortPath,\n PortDescriptor,\n ArgumentValue,\n} from '../types/circuit';\nimport { useCircuitLibraryStore } from './circuit-library-store';\n\ninterface CircuitActions {\n // Circuit-level operations\n setCircuit: (circuit: Circuit) => void;\n clearCircuit: () => void;\n getCircuit: () => Circuit | null;\n\n // Node operations\n addNode: (componentRef: string, args?: Record<string, ArgumentValue>) => string;\n removeNode: (nodeId: string) => void;\n updateNode: (nodeId: string, updates: Partial<Node>) => void;\n getNode: (nodeId: string) => Node | undefined;\n\n // Connection operations\n addConnection: (source: PortPath, target: PortPath) => string | null;\n removeConnection: (connectionId: string) => void;\n getConnection: (connectionId: string) => Connection | undefined;\n getNodeConnections: (nodeId: string) => Connection[];\n\n // Port operations\n getNodeOutputPorts: (nodeId: string) => PortDescriptor[];\n getNodeInputPorts: (nodeId: string) => PortDescriptor[];\n}\n\nexport interface CircuitStore extends CircuitActions {\n circuit: Circuit | null;\n}\n\nconst initialState = {\n circuit: null,\n};\n\nexport const useCircuitStore = create<CircuitStore>()(\n immer((set, get) => ({\n ...initialState,\n\n setCircuit: (circuit) => {\n set({ circuit });\n },\n\n clearCircuit: () => {\n set({ circuit: null });\n },\n\n getCircuit: () => {\n return get().circuit;\n },\n\n addNode: (componentRef, args = {}) => {\n const nodeId = nanoid();\n\n set((state) => {\n // Auto-create empty circuit if it doesn't exist\n if (!state.circuit) {\n state.circuit = {\n version: 1,\n name: 'Untitled Circuit',\n inputs: [],\n outputs: [],\n clocks: [],\n state: [],\n nodes: [],\n connections: [],\n implementation: { kind: 'composite' },\n };\n }\n\n // Resolve component to get its port definitions\n const library = useCircuitLibraryStore.getState();\n const component = library.resolveCircuit(componentRef);\n\n if (!component) {\n console.warn(`Component not found: ${componentRef}`);\n return;\n }\n\n // Create port instances from component definition\n const inputs = component.inputs.map((portDesc) => ({\n id: `${nodeId}.${portDesc.name}`,\n name: portDesc.name,\n portType: portDesc.portType,\n }));\n\n const outputs = component.outputs.map((portDesc) => ({\n id: `${nodeId}.${portDesc.name}`,\n name: portDesc.name,\n portType: portDesc.portType,\n }));\n\n const clocks = component.clocks.map((clockDesc) => ({\n id: `${nodeId}.${clockDesc.name}`,\n name: clockDesc.name,\n }));\n\n const node: Node = {\n id: nodeId,\n label: componentRef,\n componentRef,\n arguments: args,\n inputs,\n outputs,\n clocks,\n };\n\n state.circuit.nodes.push(node);\n });\n\n return nodeId;\n },\n\n removeNode: (nodeId) => {\n set((state) => {\n if (!state.circuit) return;\n\n // Remove the node\n state.circuit.nodes = state.circuit.nodes.filter((n) => n.id !== nodeId);\n\n // Remove all connections involving this node\n state.circuit.connections = state.circuit.connections.filter(\n (conn) => conn.source.nodeId !== nodeId && conn.target.nodeId !== nodeId\n );\n });\n },\n\n updateNode: (nodeId, updates) => {\n set((state) => {\n if (!state.circuit) return;\n\n const node = state.circuit.nodes.find((n) => n.id === nodeId);\n if (node) {\n Object.assign(node, updates);\n }\n });\n },\n\n getNode: (nodeId) => {\n const circuit = get().circuit;\n if (!circuit) return undefined;\n return circuit.nodes.find((n) => n.id === nodeId);\n },\n\n addConnection: (source, target) => {\n const circuit = get().circuit;\n if (!circuit) {\n console.warn('Cannot add connection: no circuit loaded');\n return null;\n }\n\n // Validation: check if source node exists\n const sourceNode = circuit.nodes.find((n) => n.id === source.nodeId);\n if (!sourceNode && source.nodeId !== '') {\n console.warn(`Source node not found: ${source.nodeId}`);\n return null;\n }\n\n // Validation: check if target node exists\n const targetNode = circuit.nodes.find((n) => n.id === target.nodeId);\n if (!targetNode && target.nodeId !== '') {\n console.warn(`Target node not found: ${target.nodeId}`);\n return null;\n }\n\n // Validation: check if source port exists\n let sourcePort;\n if (source.nodeId === '') {\n // Circuit-level input port\n sourcePort = circuit.inputs.find((p) => p.name === source.portName);\n } else {\n sourcePort = sourceNode?.outputs.find((p) => p.name === source.portName);\n }\n if (!sourcePort) {\n console.warn(`Source port not found: ${source.nodeId}.${source.portName}`);\n return null;\n }\n\n // Validation: check if target port exists\n let targetPort;\n if (target.nodeId === '') {\n // Circuit-level output port\n targetPort = circuit.outputs.find((p) => p.name === target.portName);\n } else {\n targetPort = targetNode?.inputs.find((p) => p.name === target.portName);\n }\n if (!targetPort) {\n console.warn(`Target port not found: ${target.nodeId}.${target.portName}`);\n return null;\n }\n\n // Validation: check if connection already exists\n const existingConnection = circuit.connections.find(\n (conn) =>\n conn.source.nodeId === source.nodeId &&\n conn.source.portName === source.portName &&\n conn.target.nodeId === target.nodeId &&\n conn.target.portName === target.portName\n );\n\n if (existingConnection) {\n console.warn('Connection already exists');\n return existingConnection.id;\n }\n\n // Validation: check if target port is already connected\n const targetAlreadyConnected = circuit.connections.some(\n (conn) => conn.target.nodeId === target.nodeId && conn.target.portName === target.portName\n );\n\n if (targetAlreadyConnected) {\n console.warn(`Target port already connected: ${target.nodeId}.${target.portName}`);\n return null;\n }\n\n // Validation: check port type compatibility\n if (sourcePort.portType.kind !== targetPort.portType.kind) {\n console.warn(\n `Port type mismatch: ${sourcePort.portType.kind} -> ${targetPort.portType.kind}`\n );\n return null;\n }\n\n if (\n sourcePort.portType.kind === 'bus' &&\n targetPort.portType.kind === 'bus' &&\n sourcePort.portType.width !== targetPort.portType.width\n ) {\n console.warn(\n `Bus width mismatch: ${sourcePort.portType.width} -> ${targetPort.portType.width}`\n );\n return null;\n }\n\n const connectionId = nanoid();\n set((state) => {\n if (!state.circuit) return;\n\n state.circuit.connections.push({\n id: connectionId,\n source,\n target,\n portType: sourcePort.portType,\n });\n });\n\n return connectionId;\n },\n\n removeConnection: (connectionId) => {\n set((state) => {\n if (!state.circuit) return;\n\n state.circuit.connections = state.circuit.connections.filter((c) => c.id !== connectionId);\n });\n },\n\n getConnection: (connectionId) => {\n const circuit = get().circuit;\n if (!circuit) return undefined;\n return circuit.connections.find((c) => c.id === connectionId);\n },\n\n getNodeConnections: (nodeId) => {\n const circuit = get().circuit;\n if (!circuit) return [];\n return circuit.connections.filter(\n (conn) => conn.source.nodeId === nodeId || conn.target.nodeId === nodeId\n );\n },\n\n getNodeOutputPorts: (nodeId) => {\n const node = get().getNode(nodeId);\n if (!node) return [];\n return node.outputs.map((p) => ({\n name: p.name,\n portType: p.portType,\n }));\n },\n\n getNodeInputPorts: (nodeId) => {\n const node = get().getNode(nodeId);\n if (!node) return [];\n return node.inputs.map((p) => ({\n name: p.name,\n portType: p.portType,\n }));\n },\n }))\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/stores/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/stores/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC","sourcesContent":["/**\n * Editor store exports\n */\nexport { useCircuitStore } from './circuit-store';\nexport { useCircuitLibraryStore } from './circuit-library-store';\nexport { useCircuitPreviewStore } from './circuit-preview-store';\nexport { useUIStore } from './ui-store';\n\nexport type { CircuitStore } from './circuit-store';\nexport type { CircuitLibraryStore } from './circuit-library-store';\nexport type { CircuitPreviewStore } from './circuit-preview-store';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../../src/editor/stores/ui-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui-store.js","sourceRoot":"","sources":["../../../src/editor/stores/ui-store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * UI Store - Interaction State Management\n *\n * Manages transient UI state for interactions, selections, and temporary operations.\n * This state is ephemeral and typically not persisted.\n */\n\nimport { create } from 'zustand';\nimport { immer } from 'zustand/middleware/immer';\nimport type { UIState, DragOperation, SimulationStatus } from '../types';\n\ninterface UIActions {\n // Drag operations\n startDrag: (operation: DragOperation) => void;\n endDrag: () => void;\n\n // Selection operations\n selectComponent: (id: string) => void;\n deselectComponent: (id: string) => void;\n clearSelection: () => void;\n toggleComponentSelection: (id: string) => void;\n\n // Simulation operations\n setSimulationStatus: (status: SimulationStatus) => void;\n setSimulationError: (error: string) => void;\n clearSimulationError: () => void;\n incrementStep: () => void;\n resetSimulation: () => void;\n\n // Canvas operations\n setZoom: (zoom: number) => void;\n setPan: (x: number, y: number) => void;\n}\n\nexport interface UIStore extends UIState, UIActions {}\n\nconst initialState: UIState = {\n drag: null,\n selection: {\n selectedComponentIds: new Set<string>(),\n selectedConnectionIds: new Set<string>(),\n },\n simulation: {\n status: 'idle',\n currentStep: 0,\n },\n canvas: {\n zoom: 1,\n panX: 0,\n panY: 0,\n },\n};\n\nexport const useUIStore = create<UIStore>()(\n immer((set) => ({\n ...initialState,\n\n startDrag: (operation) => {\n set((state) => {\n state.drag = operation;\n });\n },\n\n endDrag: () => {\n set((state) => {\n state.drag = null;\n });\n },\n\n selectComponent: (id) => {\n set((state) => {\n state.selection.selectedComponentIds.add(id);\n });\n },\n\n deselectComponent: (id) => {\n set((state) => {\n state.selection.selectedComponentIds.delete(id);\n });\n },\n\n clearSelection: () => {\n set((state) => {\n state.selection.selectedComponentIds.clear();\n state.selection.selectedConnectionIds.clear();\n });\n },\n\n toggleComponentSelection: (id) => {\n set((state) => {\n if (state.selection.selectedComponentIds.has(id)) {\n state.selection.selectedComponentIds.delete(id);\n } else {\n state.selection.selectedComponentIds.add(id);\n }\n });\n },\n\n setSimulationStatus: (status) => {\n set((state) => {\n state.simulation.status = status;\n });\n },\n\n setSimulationError: (error) => {\n set((state) => {\n state.simulation.error = error;\n state.simulation.status = 'error';\n });\n },\n\n clearSimulationError: () => {\n set((state) => {\n state.simulation.error = undefined;\n });\n },\n\n incrementStep: () => {\n set((state) => {\n state.simulation.currentStep += 1;\n });\n },\n\n resetSimulation: () => {\n set((state) => {\n state.simulation = initialState.simulation;\n });\n },\n\n setZoom: (zoom) => {\n set((state) => {\n state.canvas.zoom = zoom;\n });\n },\n\n setPan: (x, y) => {\n set((state) => {\n state.canvas.panX = x;\n state.canvas.panY = y;\n });\n },\n }))\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit.js","sourceRoot":"","sources":["../../../src/editor/types/circuit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+RH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,QAAgB;IAC7D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAW,EAAE,CAAW;IAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,YAAoB,EAAE,SAAiB;IAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC"}
1
+ {"version":3,"file":"circuit.js","sourceRoot":"","sources":["../../../src/editor/types/circuit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+RH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,QAAgB;IAC7D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAW,EAAE,CAAW;IAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzC,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAChD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO;IACrB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,YAAoB,EAAE,SAAiB;IAChE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AACrD,CAAC","sourcesContent":["/**\n * Intermediate Representation (IR) v0.1 - TypeScript Type Definitions\n *\n * This is the formal IR specification in TypeScript.\n * See /docs/circuit-spec.md for detailed documentation.\n */\n\n// ============================================================================\n// Port Types\n// ============================================================================\n\nexport interface BitType {\n kind: 'bit';\n}\n\nexport interface BusType {\n kind: 'bus';\n width: number;\n}\n\nexport type PortType = BitType | BusType;\n\n// ============================================================================\n// Port Descriptors (Component Definition)\n// ============================================================================\n\nexport interface PortDescriptor {\n name: string;\n portType: PortType;\n description?: string;\n /** Default value for unconnected inputs. If specified, port is optional. */\n defaultValue?: BitValue | BusValue;\n widthParam?: string;\n widthMultiplier?: number;\n}\n\n// ============================================================================\n// Port Instances (Runtime)\n// ============================================================================\n\nexport type BitValue = boolean;\nexport type BusValue = number; // Stored as integer for efficiency\n\nexport interface PortInstance {\n id: string;\n name: string;\n portType: PortType;\n value?: BitValue | BusValue;\n}\n\n// ============================================================================\n// Clock\n// ============================================================================\n\nexport interface ClockDescriptor {\n name: string;\n description?: string;\n}\n\nexport interface ClockState {\n value: boolean;\n edge: 'rising' | 'falling' | 'none';\n}\n\nexport interface ClockInstance {\n id: string;\n name: string;\n state?: ClockState;\n}\n\n// ============================================================================\n// State\n// ============================================================================\n\nexport interface MemoryType {\n kind: 'memory';\n addressWidth: number;\n dataWidth: number;\n}\n\nexport type StateType = BitType | BusType | MemoryType;\n\nexport interface MemoryValue {\n // Sparse storage: only store non-default values\n data: Map<number, number>;\n addressWidth: number;\n dataWidth: number;\n}\n\nexport type StateValue = BitValue | BusValue | MemoryValue | string;\n\nexport interface StateBlock {\n id: string;\n name: string;\n stateType: StateType;\n initialValue: StateValue;\n currentValue?: StateValue;\n clockRef?: string;\n edge?: 'rising' | 'falling';\n}\n\n// ============================================================================\n// Connections\n// ============================================================================\n\nexport interface PortPath {\n nodeId: string; // Empty string for circuit-level ports\n portName: string;\n}\n\nexport interface Connection {\n id: string;\n source: PortPath;\n target: PortPath;\n portType: PortType;\n}\n\n// ============================================================================\n// Nodes (Component Instances)\n// ============================================================================\n\nexport type ArgumentValue =\n | number\n | string\n | boolean\n | number[] // For array initialization (ROM data, RAM init)\n | Record<number, number>; // For sparse initialization (ROM data, RAM init)\n\nexport interface Node {\n id: string;\n label?: string;\n componentRef: string; // Reference to component by name\n arguments: Record<string, ArgumentValue>;\n inputs: PortInstance[];\n outputs: PortInstance[];\n clocks: ClockInstance[];\n}\n\n// ============================================================================\n// Implementation Types\n// ============================================================================\n\nexport interface PrimitiveImpl {\n kind: 'primitive';\n // Primitive components are provided by simulator kernel\n}\n\nexport interface CompositeImpl {\n kind: 'composite';\n // Implementation is defined by nodes and connections\n}\n\nexport interface IntrinsicImpl {\n kind: 'intrinsic';\n intrinsicType: string; // e.g., 'Display', 'DebugProbe'\n}\n\nexport type Implementation = PrimitiveImpl | CompositeImpl | IntrinsicImpl;\n\n// ============================================================================\n// Parameters\n// ============================================================================\n\nexport type ParameterType = 'int' | 'string' | 'bool';\n\nexport interface Parameter {\n name: string;\n paramType: ParameterType;\n defaultValue?: number | string | boolean;\n options?: (number | string | boolean)[];\n}\n\n// ============================================================================\n// Metadata\n// ============================================================================\n\nexport interface TestCase {\n name: string;\n inputs: Record<string, BitValue | BusValue>;\n expectedOutputs: Record<string, BitValue | BusValue>;\n}\n\n/**\n * Component Kind - determines evaluation order and cycle detection\n *\n * - combinational: Pure logic, no state, must be acyclic\n * - sequential: Has state (registers, RAM), updates on clock edges\n * - sink: Consumes signals but outputs don't feed back (Screen, audio, UART)\n */\nexport type ComponentKind = 'combinational' | 'sequential' | 'sink';\n\nexport interface CircuitMetadata {\n source?: {\n filename?: string;\n lineNumber?: number;\n };\n description?: string;\n author?: string;\n version?: string;\n testCases?: TestCase[];\n tags?: string[];\n /** Timing classification: combinational, sequential, or sink. */\n timing?: ComponentKind;\n /**\n * For sequential components: how outputs are computed\n * - 'state-only': Outputs come purely from state (DFlipFlop, Register)\n * - 'state+inputs': Outputs depend on state AND combinational inputs (RAM/ROM - address-based read)\n * - 'input-dependent': Outputs depend only on current inputs (pure combinational)\n *\n * Used for topological sorting. Evaluation order:\n * 1. state-only nodes (registers output .q)\n * 2. combinational logic (address calc, muxes, ALU)\n * 3. state+inputs nodes (RAM/ROM read using computed address)\n * 4. sinks\n */\n outputDependency?: 'state-only' | 'state+inputs' | 'input-dependent';\n}\n\n// ============================================================================\n// Circuit (Top Level)\n// ============================================================================\n\nexport interface Circuit {\n /** Schema version for the Circuit IR. */\n version: 1;\n name: string;\n inputs: PortDescriptor[];\n outputs: PortDescriptor[];\n clocks: ClockDescriptor[];\n state: StateBlock[];\n nodes: Node[];\n connections: Connection[];\n implementation: Implementation;\n metadata?: CircuitMetadata;\n}\n\n// ============================================================================\n// Library and System\n// ============================================================================\n\nexport interface CircuitFile {\n version: string;\n circuit: Circuit;\n}\n\n// ============================================================================\n// Validation Errors\n// ============================================================================\n\nexport type ValidationErrorType =\n | 'type_mismatch'\n | 'multiple_drivers'\n | 'combinational_loop'\n | 'undefined_component'\n | 'undefined_port'\n | 'invalid_clock_ref'\n | 'parameter_mismatch'\n | 'missing_required_connection';\n\nexport interface ValidationError {\n type: ValidationErrorType;\n location: {\n circuitId: string;\n nodeId?: string;\n connectionId?: string;\n portPath?: PortPath;\n };\n message: string;\n suggestions?: string[];\n}\n\n// ============================================================================\n// Simulation State\n// ============================================================================\n\nexport interface SimulationState {\n // Current port values\n portValues: Map<string, BitValue | BusValue>;\n\n // Current state values\n stateValues: Map<string, StateValue>;\n\n // Clock states\n clockStates: Map<string, ClockState>;\n\n // Simulation cycle counter\n cycle: number;\n\n // Evaluation order (topologically sorted node IDs)\n evaluationOrder: string[];\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a port path from components\n */\nexport function createPortPath(nodeId: string, portName: string): PortPath {\n return { nodeId, portName };\n}\n\n/**\n * Create a port path key for Map lookups\n */\nexport function portPathKey(path: PortPath): string {\n return path.nodeId === '' ? `circuit.${path.portName}` : `${path.nodeId}.${path.portName}`;\n}\n\n/**\n * Check if two port types are compatible\n */\nexport function isPortTypeCompatible(a: PortType, b: PortType): boolean {\n if (a.kind !== b.kind) return false;\n if (a.kind === 'bus' && b.kind === 'bus') {\n return a.width === b.width;\n }\n return true;\n}\n\n/**\n * Get default value for a port type\n */\nexport function getDefaultValue(portType: PortType): BitValue | BusValue {\n if (portType.kind === 'bit') {\n return false;\n } else {\n return 0;\n }\n}\n\n/**\n * Create a bit type\n */\nexport function bitType(): BitType {\n return { kind: 'bit' };\n}\n\n/**\n * Create a bus type\n */\nexport function busType(width: number): BusType {\n return { kind: 'bus', width };\n}\n\n/**\n * Create a memory type\n */\nexport function memoryType(addressWidth: number, dataWidth: number): MemoryType {\n return { kind: 'memory', addressWidth, dataWidth };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EACL,cAAc,EAAE,WAAW,EAC3B,oBAAoB,EAAE,eAAe,EACrC,OAAO,EAAE,OAAO,EAAE,UAAU,GAC7B,MAAM,WAAW,CAAC;AACnB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/editor/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,EACL,cAAc,EAAE,WAAW,EAC3B,oBAAoB,EAAE,eAAe,EACrC,OAAO,EAAE,OAAO,EAAE,UAAU,GAC7B,MAAM,WAAW,CAAC;AACnB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,WAAW,CAAC","sourcesContent":["/**\n * Type Exports\n *\n * Central export point for all type definitions.\n */\n\n// Circuit IR types (selective re-export to avoid conflicts with ui-model Connection/Component)\nexport type {\n BitType, BusType, PortType, PortDescriptor,\n BitValue, BusValue,\n ClockDescriptor, ClockState, ClockInstance,\n StateBlock, StateValue,\n PortPath, Node, Parameter, Implementation,\n CircuitMetadata, Circuit,\n ValidationError,\n} from './circuit';\nexport {\n createPortPath, portPathKey,\n isPortTypeCompatible, getDefaultValue,\n bitType, busType, memoryType,\n} from './circuit';\nexport * from './ui-model';\nexport * from './visual';\nexport * from './ui';\nexport * from './testing';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"testbench.js","sourceRoot":"","sources":["../../../src/editor/types/testbench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqIH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,IAAI,GAAG,EAAE;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA0B,EAC1B,KAAa,EACb,MAAsB;IAEtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAA0B,EAC1B,KAAa;IAEb,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC9B,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YACjC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC9B,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACvD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA0B;IAC5D,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"testbench.js","sourceRoot":"","sources":["../../../src/editor/types/testbench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqIH,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO;QACL,QAAQ;QACR,MAAM,EAAE,IAAI,GAAG,EAAE;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA0B,EAC1B,KAAa,EACb,MAAsB;IAEtB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;IACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAA0B,EAC1B,KAAa;IAEb,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAiB;IACzC,OAAO,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;AACxF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,gBAAgB,EAAE,EAAE;QACpB,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC9B,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;YACjC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAC9B,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAqB;IACvD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAA0B;IAC5D,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC","sourcesContent":["/**\n * Testbench Intermediate Representation (IR)\n *\n * This is the compiled, executable representation of testbenches.\n * The testbench IR is generated from testbench AST by the testbench compiler.\n *\n * Design:\n * - Bit-level stimulus core (cycle-by-cycle value assignments)\n * - VCD waveform capture configuration\n * - Future-proof for multi-clock and assertions\n */\n\nimport { BitValue, BusValue, Circuit } from './circuit';\n\n// ============================================================================\n// Testbench (Top Level)\n// ============================================================================\n\n/**\n * Compiled testbench ready for execution\n */\nexport interface Testbench {\n name: string;\n circuitRef: string; // Name of circuit under test\n dutInstanceId: string; // ID of DUT instance node\n circuit: Circuit; // The compiled circuit (includes DUT + test infrastructure)\n stimulus: StimulusSchedule;\n capture?: CaptureConfig;\n assertions?: AssertionSchedule; // Phase 5\n maxCycles: number; // Maximum simulation cycles\n}\n\n// ============================================================================\n// Stimulus Schedule (Core)\n// ============================================================================\n\n/**\n * Compiled stimulus schedule\n *\n * Maps cycle number -> signal assignments for that cycle\n * Signals hold their previous value unless explicitly changed\n */\nexport interface StimulusSchedule {\n clockRef: string; // Which clock this stimulus is synchronized to\n events: Map<number, StimulusAction[]>; // cycle -> actions\n}\n\n/**\n * Single stimulus action (apply value to signal)\n */\nexport interface StimulusAction {\n nodeId: string; // Node instance ID (empty string for testbench-level ports)\n portName: string; // Port or argument name\n value: BitValue | BusValue;\n}\n\n// ============================================================================\n// Capture Configuration (VCD Export)\n// ============================================================================\n\n/**\n * Configuration for waveform capture\n */\nexport interface CaptureConfig {\n signals: SignalRef[];\n format: 'vcd'; // Only VCD for now\n filename: string;\n}\n\n/**\n * Reference to a signal to capture\n */\nexport interface SignalRef {\n nodeId: string; // Empty string for circuit-level ports\n portName: string;\n displayName: string; // For VCD hierarchy\n width: number; // 1 for Bit, N for Bus[N]\n}\n\n// ============================================================================\n// Assertion Schedule (Phase 5)\n// ============================================================================\n\n/**\n * Compiled assertion schedule\n */\nexport interface AssertionSchedule {\n clockRef: string;\n assertions: Map<number, CompiledAssertion[]>; // cycle -> assertions\n}\n\n/**\n * Single assertion to check at a cycle\n */\nexport interface CompiledAssertion {\n id: string;\n condition: (state: TestbenchState) => boolean; // Compiled to function\n message: string;\n}\n\n// ============================================================================\n// Testbench State (Runtime)\n// ============================================================================\n\n/**\n * Testbench execution state\n */\nexport interface TestbenchState {\n cycle: number;\n portValues: Map<string, BitValue | BusValue>; // All port values\n assertionResults: AssertionResult[];\n captureData?: CaptureData; // Waveform data being collected\n status: 'running' | 'passed' | 'failed' | 'timeout';\n failureReason?: string;\n}\n\n/**\n * Result of an assertion check\n */\nexport interface AssertionResult {\n assertionId: string;\n cycle: number;\n passed: boolean;\n message: string;\n}\n\n/**\n * Captured waveform data\n */\nexport interface CaptureData {\n config: CaptureConfig;\n traces: Map<string, TraceData>; // signal key -> trace\n}\n\n/**\n * Trace data for a single signal\n */\nexport interface TraceData {\n signal: SignalRef;\n values: (BitValue | BusValue)[]; // One value per cycle\n changes: Array<{ cycle: number; value: BitValue | BusValue }>; // For efficient VCD\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a stimulus schedule\n */\nexport function createStimulusSchedule(clockRef: string): StimulusSchedule {\n return {\n clockRef,\n events: new Map(),\n };\n}\n\n/**\n * Add stimulus action to schedule\n */\nexport function addStimulusAction(\n schedule: StimulusSchedule,\n cycle: number,\n action: StimulusAction\n): void {\n if (!schedule.events.has(cycle)) {\n schedule.events.set(cycle, []);\n }\n schedule.events.get(cycle)!.push(action);\n}\n\n/**\n * Get stimulus actions for a cycle\n */\nexport function getStimulusActions(\n schedule: StimulusSchedule,\n cycle: number\n): StimulusAction[] {\n return schedule.events.get(cycle) || [];\n}\n\n/**\n * Create signal reference key for maps\n */\nexport function signalKey(signal: SignalRef): string {\n return signal.nodeId === '' ? signal.portName : `${signal.nodeId}.${signal.portName}`;\n}\n\n/**\n * Create a testbench state\n */\nexport function createTestbenchState(): TestbenchState {\n return {\n cycle: 0,\n portValues: new Map(),\n assertionResults: [],\n status: 'running',\n };\n}\n\n/**\n * Check if testbench has passed all assertions\n */\nexport function hasPassed(state: TestbenchState): boolean {\n return state.status === 'passed' ||\n (state.assertionResults.length > 0 &&\n state.assertionResults.every(r => r.passed));\n}\n\n/**\n * Check if testbench has failed any assertions\n */\nexport function hasFailed(state: TestbenchState): boolean {\n return state.status === 'failed' ||\n state.assertionResults.some(r => !r.passed);\n}\n\n/**\n * Get all failed assertions\n */\nexport function getFailedAssertions(state: TestbenchState): AssertionResult[] {\n return state.assertionResults.filter(r => !r.passed);\n}\n\n/**\n * Get the maximum cycle number in the stimulus schedule\n */\nexport function getMaxStimulusCycle(schedule: StimulusSchedule): number {\n if (schedule.events.size === 0) return 0;\n return Math.max(...Array.from(schedule.events.keys()));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/editor/types/testing.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../../src/editor/types/testing.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * Testing system types for the visual circuit editor\n * Enables users to define test cases with expected inputs/outputs\n */\n\nexport type TestStatus = 'pending' | 'running' | 'passed' | 'failed' | 'error';\n\n/**\n * Represents a single input or output value in a test case\n */\nexport interface TestValue {\n /** Component label (e.g., \"A\", \"B\", \"Sum\") */\n label: string;\n /** Expected boolean value */\n value: boolean;\n}\n\n/**\n * Comparison result for a single output\n */\nexport interface OutputComparison {\n label: string;\n expected: boolean;\n actual: boolean;\n passed: boolean;\n}\n\n/**\n * Test case definition\n */\nexport interface TestCase {\n id: string;\n name: string;\n description?: string;\n enabled: boolean;\n inputs: TestValue[];\n outputs: TestValue[];\n createdAt: number;\n updatedAt: number;\n}\n\n/**\n * Result from executing a test case\n */\nexport interface TestResult {\n testCaseId: string;\n status: TestStatus;\n /** Detailed comparison for each output */\n comparisons?: OutputComparison[];\n /** Error message if status is 'error' */\n errorMessage?: string;\n /** Timestamp of test execution */\n executedAt: number;\n /** Execution time in milliseconds */\n duration: number;\n}\n\n/**\n * State for the test store\n */\nexport interface TestState {\n /** All test cases, keyed by ID */\n testCases: Record<string, TestCase>;\n /** Test results, keyed by test case ID */\n results: Record<string, TestResult>;\n /** Whether tests are currently running */\n isRunning: boolean;\n /** ID of currently editing test case (for modal) */\n editingTestId: string | null;\n}\n\n/**\n * Actions for the test store\n */\nexport interface TestActions {\n /** Add a new test case */\n addTestCase: (testCase: Omit<TestCase, 'id' | 'createdAt' | 'updatedAt'>) => string;\n /** Update an existing test case */\n updateTestCase: (id: string, updates: Partial<Omit<TestCase, 'id' | 'createdAt'>>) => void;\n /** Remove a test case */\n removeTestCase: (id: string) => void;\n /** Toggle test case enabled/disabled */\n toggleTestCase: (id: string) => void;\n /** Duplicate a test case */\n duplicateTestCase: (id: string) => string;\n /** Set test result */\n setTestResult: (testCaseId: string, result: TestResult) => void;\n /** Clear all test results */\n clearResults: () => void;\n /** Set running state */\n setIsRunning: (isRunning: boolean) => void;\n /** Set editing test ID */\n setEditingTestId: (id: string | null) => void;\n}\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * UI Model Types\n *\n * Visual editor component model for ReactFlow rendering.\n * These types are specific to the visual editor UI layer.\n *\n * For circuit/simulation types (the actual IR), use @/core/simulator.\n */\n\nimport type { Circuit } from '@simten/core';\nimport { STDLIB_CIRCUITS } from '@simten/core/std';\n\n// Build lookup structures from stdlib exports. `STDLIB_CIRCUITS` materializes\n// parameterized factories (Register, Switch, etc.) with their default options\n// so they appear here as concrete `BuiltCircuit` instances alongside the\n// singleton primitives.\nconst STD_CIRCUIT_MAP: Map<string, Circuit> = new Map(STDLIB_CIRCUITS.map((b) => [b.circuit.name, b.circuit]));\nconst PRIMITIVE_NAMES: Set<string> = new Set(\n STDLIB_CIRCUITS\n .filter((b) => b.circuit.implementation.kind === 'primitive')\n .map((b) => b.circuit.name),\n);\nconst isPrimitive = (name: string) => PRIMITIVE_NAMES.has(name);\n\n// ===========================\n// Component Type Definitions\n// ===========================\n\n/**\n * Generic component interface.\n * This flexible interface supports all component types through dynamic properties.\n * Specific component behavior is determined by primitives.ts metadata.\n */\nexport interface Component {\n id: string;\n type: string;\n label?: string;\n // Dynamic properties for component-specific state\n [key: string]: unknown;\n}\n\n/**\n * UI-layer connection interface.\n * Represents a wire between two component ports in the visual editor.\n */\nexport interface Connection {\n id: string;\n sourceComponentId: string;\n sourcePortIndex: number;\n targetComponentId: string;\n targetPortIndex: number;\n}\n\n// ===========================\n// Component Specifications\n// ===========================\n\n/**\n * Defines the port configuration for each component type.\n */\nexport interface ComponentSpec {\n type: string;\n inputCount: number;\n outputCount: number;\n evaluate?: (inputs: (boolean | number)[]) => (boolean | number)[]; // Legacy logic function\n}\n\n/**\n * Get component specification for any component type.\n *\n * Uses primitives.ts as the source of truth for primitive components.\n */\nexport function getComponentSpec(type: string): ComponentSpec | undefined {\n const primitive = STD_CIRCUIT_MAP.get(type);\n if (primitive) {\n return {\n type,\n inputCount: primitive.inputs.length,\n outputCount: primitive.outputs.length,\n };\n }\n return undefined;\n}\n\n/**\n * Check if a component type is a primitive.\n *\n * Uses primitives.ts as the source of truth.\n */\nexport function isPrimitiveComponentType(type: string): boolean {\n return isPrimitive(type);\n}\n\n// ===========================\n// Sequential Component Detection\n// ===========================\n\n/**\n * Helper function to check if a component is sequential (has state).\n * Data-driven: checks if the primitive has clock ports.\n */\nexport function isSequentialComponent(type: string): boolean {\n const primitive = STD_CIRCUIT_MAP.get(type);\n return !!(primitive && primitive.clocks && primitive.clocks.length > 0);\n}\n\n// ===========================\n// Clock Edge Detection\n// ===========================\n\n/**\n * Clock signal state\n */\nexport interface ClockSignal {\n previousValue: boolean;\n currentValue: boolean;\n}\n\n/**\n * Helper function to detect clock edge\n */\nexport function detectClockEdge(clock: ClockSignal): 'rising' | 'falling' | 'none' {\n if (!clock.previousValue && clock.currentValue) {\n return 'rising';\n } else if (clock.previousValue && !clock.currentValue) {\n return 'falling';\n }\n return 'none';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/editor/types/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../src/editor/types/ui.ts"],"names":[],"mappings":"AAAA;;;;;GAKG","sourcesContent":["/**\n * UI State Types\n *\n * Transient UI state for interactions, selections, and temporary operations.\n * This state is ephemeral and not persisted.\n */\n\n// ===========================\n// Interaction State\n// ===========================\n\nexport interface DragOperation {\n type: 'component' | 'connection';\n componentRef?: string; // For palette drags\n active: boolean;\n}\n\nexport interface SelectionState {\n selectedComponentIds: Set<string>;\n selectedConnectionIds: Set<string>;\n}\n\n// ===========================\n// Simulation State\n// ===========================\n\nexport type SimulationStatus = 'idle' | 'running' | 'paused' | 'error';\n\nexport interface SimulationState {\n status: SimulationStatus;\n currentStep: number;\n error?: string;\n}\n\n// ===========================\n// Canvas State\n// ===========================\n\nexport interface CanvasState {\n zoom: number;\n panX: number;\n panY: number;\n}\n\n// ===========================\n// UI Store State\n// ===========================\n\nexport interface UIState {\n drag: DragOperation | null;\n selection: SelectionState;\n simulation: SimulationState;\n canvas: CanvasState;\n}\n"]}