@bian-womp/spark-workbench 0.3.88 → 0.3.90

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 (169) hide show
  1. package/lib/src/adapters/cli/index.d.ts +22 -0
  2. package/lib/src/adapters/cli/index.d.ts.map +1 -0
  3. package/lib/src/adapters/cli/index.js +50 -0
  4. package/lib/src/adapters/cli/index.js.map +1 -0
  5. package/lib/src/core/AbstractWorkbench.d.ts +40 -0
  6. package/lib/src/core/AbstractWorkbench.d.ts.map +1 -0
  7. package/lib/src/core/AbstractWorkbench.js +15 -0
  8. package/lib/src/core/AbstractWorkbench.js.map +1 -0
  9. package/lib/src/core/InMemoryWorkbench.d.ts +304 -0
  10. package/lib/src/core/InMemoryWorkbench.d.ts.map +1 -0
  11. package/lib/src/core/InMemoryWorkbench.js +1016 -0
  12. package/lib/src/core/InMemoryWorkbench.js.map +1 -0
  13. package/lib/src/core/contracts.d.ts +172 -0
  14. package/lib/src/core/contracts.d.ts.map +1 -0
  15. package/lib/src/core/contracts.js +2 -0
  16. package/lib/src/core/contracts.js.map +1 -0
  17. package/lib/src/core/ui-extensions.d.ts +85 -0
  18. package/lib/src/core/ui-extensions.d.ts.map +1 -0
  19. package/lib/src/core/ui-extensions.js +111 -0
  20. package/lib/src/core/ui-extensions.js.map +1 -0
  21. package/lib/src/examples/cli.d.ts +2 -0
  22. package/lib/src/examples/cli.d.ts.map +1 -0
  23. package/lib/src/examples/cli.js +244 -0
  24. package/lib/src/examples/cli.js.map +1 -0
  25. package/lib/src/examples/reactflow/App.d.ts +2 -0
  26. package/lib/src/examples/reactflow/App.d.ts.map +1 -0
  27. package/lib/src/examples/reactflow/App.js +20 -0
  28. package/lib/src/examples/reactflow/App.js.map +1 -0
  29. package/lib/src/index.d.ts +30 -0
  30. package/lib/src/index.d.ts.map +1 -0
  31. package/lib/src/index.js +30 -0
  32. package/lib/src/index.js.map +1 -0
  33. package/lib/src/misc/DebugEvents.d.ts +7 -0
  34. package/lib/src/misc/DebugEvents.d.ts.map +1 -0
  35. package/lib/src/misc/DebugEvents.js +51 -0
  36. package/lib/src/misc/DebugEvents.js.map +1 -0
  37. package/lib/src/misc/DefaultEdge.d.ts +5 -0
  38. package/lib/src/misc/DefaultEdge.d.ts.map +1 -0
  39. package/lib/src/misc/DefaultEdge.js +15 -0
  40. package/lib/src/misc/DefaultEdge.js.map +1 -0
  41. package/lib/src/misc/DefaultNode.d.ts +5 -0
  42. package/lib/src/misc/DefaultNode.d.ts.map +1 -0
  43. package/lib/src/misc/DefaultNode.js +25 -0
  44. package/lib/src/misc/DefaultNode.js.map +1 -0
  45. package/lib/src/misc/DefaultNodeContent.d.ts +4 -0
  46. package/lib/src/misc/DefaultNodeContent.d.ts.map +1 -0
  47. package/lib/src/misc/DefaultNodeContent.js +58 -0
  48. package/lib/src/misc/DefaultNodeContent.js.map +1 -0
  49. package/lib/src/misc/DefaultNodeHeader.d.ts +13 -0
  50. package/lib/src/misc/DefaultNodeHeader.d.ts.map +1 -0
  51. package/lib/src/misc/DefaultNodeHeader.js +78 -0
  52. package/lib/src/misc/DefaultNodeHeader.js.map +1 -0
  53. package/lib/src/misc/Inspector.d.ts +12 -0
  54. package/lib/src/misc/Inspector.d.ts.map +1 -0
  55. package/lib/src/misc/Inspector.js +253 -0
  56. package/lib/src/misc/Inspector.js.map +1 -0
  57. package/lib/src/misc/IssueBadge.d.ts +7 -0
  58. package/lib/src/misc/IssueBadge.d.ts.map +1 -0
  59. package/lib/src/misc/IssueBadge.js +7 -0
  60. package/lib/src/misc/IssueBadge.js.map +1 -0
  61. package/lib/src/misc/KeyboardShortcutToast.d.ts +16 -0
  62. package/lib/src/misc/KeyboardShortcutToast.d.ts.map +1 -0
  63. package/lib/src/misc/KeyboardShortcutToast.js +40 -0
  64. package/lib/src/misc/KeyboardShortcutToast.js.map +1 -0
  65. package/lib/src/misc/NodeHandles.d.ts +18 -0
  66. package/lib/src/misc/NodeHandles.d.ts.map +1 -0
  67. package/lib/src/misc/NodeHandles.js +67 -0
  68. package/lib/src/misc/NodeHandles.js.map +1 -0
  69. package/lib/src/misc/SelectionActiveSync.d.ts +10 -0
  70. package/lib/src/misc/SelectionActiveSync.d.ts.map +1 -0
  71. package/lib/src/misc/SelectionActiveSync.js +21 -0
  72. package/lib/src/misc/SelectionActiveSync.js.map +1 -0
  73. package/lib/src/misc/WorkbenchCanvas.d.ts +23 -0
  74. package/lib/src/misc/WorkbenchCanvas.d.ts.map +1 -0
  75. package/lib/src/misc/WorkbenchCanvas.js +669 -0
  76. package/lib/src/misc/WorkbenchCanvas.js.map +1 -0
  77. package/lib/src/misc/WorkbenchStudio.d.ts +43 -0
  78. package/lib/src/misc/WorkbenchStudio.d.ts.map +1 -0
  79. package/lib/src/misc/WorkbenchStudio.js +463 -0
  80. package/lib/src/misc/WorkbenchStudio.js.map +1 -0
  81. package/lib/src/misc/constants.d.ts +4 -0
  82. package/lib/src/misc/constants.d.ts.map +1 -0
  83. package/lib/src/misc/constants.js +5 -0
  84. package/lib/src/misc/constants.js.map +1 -0
  85. package/lib/src/misc/context/WorkbenchContext.d.ts +133 -0
  86. package/lib/src/misc/context/WorkbenchContext.d.ts.map +1 -0
  87. package/lib/src/misc/context/WorkbenchContext.js +9 -0
  88. package/lib/src/misc/context/WorkbenchContext.js.map +1 -0
  89. package/lib/src/misc/context/WorkbenchContext.provider.d.ts +12 -0
  90. package/lib/src/misc/context/WorkbenchContext.provider.d.ts.map +1 -0
  91. package/lib/src/misc/context/WorkbenchContext.provider.js +995 -0
  92. package/lib/src/misc/context/WorkbenchContext.provider.js.map +1 -0
  93. package/lib/src/misc/context-menu/ContextMenuButton.d.ts +8 -0
  94. package/lib/src/misc/context-menu/ContextMenuButton.d.ts.map +1 -0
  95. package/lib/src/misc/context-menu/ContextMenuButton.js +10 -0
  96. package/lib/src/misc/context-menu/ContextMenuButton.js.map +1 -0
  97. package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts +85 -0
  98. package/lib/src/misc/context-menu/ContextMenuHandlers.d.ts.map +1 -0
  99. package/lib/src/misc/context-menu/ContextMenuHandlers.js +2 -0
  100. package/lib/src/misc/context-menu/ContextMenuHandlers.js.map +1 -0
  101. package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts +45 -0
  102. package/lib/src/misc/context-menu/ContextMenuHelpers.d.ts.map +1 -0
  103. package/lib/src/misc/context-menu/ContextMenuHelpers.js +182 -0
  104. package/lib/src/misc/context-menu/ContextMenuHelpers.js.map +1 -0
  105. package/lib/src/misc/context-menu/DefaultContextMenu.d.ts +3 -0
  106. package/lib/src/misc/context-menu/DefaultContextMenu.d.ts.map +1 -0
  107. package/lib/src/misc/context-menu/DefaultContextMenu.js +111 -0
  108. package/lib/src/misc/context-menu/DefaultContextMenu.js.map +1 -0
  109. package/lib/src/misc/context-menu/NodeContextMenu.d.ts +3 -0
  110. package/lib/src/misc/context-menu/NodeContextMenu.d.ts.map +1 -0
  111. package/lib/src/misc/context-menu/NodeContextMenu.js +51 -0
  112. package/lib/src/misc/context-menu/NodeContextMenu.js.map +1 -0
  113. package/lib/src/misc/context-menu/SelectionContextMenu.d.ts +3 -0
  114. package/lib/src/misc/context-menu/SelectionContextMenu.d.ts.map +1 -0
  115. package/lib/src/misc/context-menu/SelectionContextMenu.js +47 -0
  116. package/lib/src/misc/context-menu/SelectionContextMenu.js.map +1 -0
  117. package/lib/src/misc/hooks.d.ts +18 -0
  118. package/lib/src/misc/hooks.d.ts.map +1 -0
  119. package/lib/src/misc/hooks.js +275 -0
  120. package/lib/src/misc/hooks.js.map +1 -0
  121. package/lib/src/misc/layout.d.ts +117 -0
  122. package/lib/src/misc/layout.d.ts.map +1 -0
  123. package/lib/src/misc/layout.js +205 -0
  124. package/lib/src/misc/layout.js.map +1 -0
  125. package/lib/src/misc/load.d.ts +5 -0
  126. package/lib/src/misc/load.d.ts.map +1 -0
  127. package/lib/src/misc/load.js +106 -0
  128. package/lib/src/misc/load.js.map +1 -0
  129. package/lib/src/misc/mapping.d.ts +128 -0
  130. package/lib/src/misc/mapping.d.ts.map +1 -0
  131. package/lib/src/misc/mapping.js +270 -0
  132. package/lib/src/misc/mapping.js.map +1 -0
  133. package/lib/src/misc/merge-utils.d.ts +12 -0
  134. package/lib/src/misc/merge-utils.d.ts.map +1 -0
  135. package/lib/src/misc/merge-utils.js +51 -0
  136. package/lib/src/misc/merge-utils.js.map +1 -0
  137. package/lib/src/misc/thumbnail-utils.d.ts +53 -0
  138. package/lib/src/misc/thumbnail-utils.d.ts.map +1 -0
  139. package/lib/src/misc/thumbnail-utils.js +629 -0
  140. package/lib/src/misc/thumbnail-utils.js.map +1 -0
  141. package/lib/src/misc/types.d.ts +18 -0
  142. package/lib/src/misc/types.d.ts.map +1 -0
  143. package/lib/src/misc/types.js +2 -0
  144. package/lib/src/misc/types.js.map +1 -0
  145. package/lib/src/misc/value.d.ts +16 -0
  146. package/lib/src/misc/value.d.ts.map +1 -0
  147. package/lib/src/misc/value.js +114 -0
  148. package/lib/src/misc/value.js.map +1 -0
  149. package/lib/src/misc/viewport-utils.d.ts +6 -0
  150. package/lib/src/misc/viewport-utils.d.ts.map +1 -0
  151. package/lib/src/misc/viewport-utils.js +18 -0
  152. package/lib/src/misc/viewport-utils.js.map +1 -0
  153. package/lib/src/runtime/AbstractGraphRunner.d.ts +61 -0
  154. package/lib/src/runtime/AbstractGraphRunner.d.ts.map +1 -0
  155. package/lib/src/runtime/AbstractGraphRunner.js +63 -0
  156. package/lib/src/runtime/AbstractGraphRunner.js.map +1 -0
  157. package/lib/src/runtime/IGraphRunner.d.ts +100 -0
  158. package/lib/src/runtime/IGraphRunner.d.ts.map +1 -0
  159. package/lib/src/runtime/IGraphRunner.js +2 -0
  160. package/lib/src/runtime/IGraphRunner.js.map +1 -0
  161. package/lib/src/runtime/LocalGraphRunner.d.ts +60 -0
  162. package/lib/src/runtime/LocalGraphRunner.d.ts.map +1 -0
  163. package/lib/src/runtime/LocalGraphRunner.js +294 -0
  164. package/lib/src/runtime/LocalGraphRunner.js.map +1 -0
  165. package/lib/src/runtime/RemoteGraphRunner.d.ts +109 -0
  166. package/lib/src/runtime/RemoteGraphRunner.d.ts.map +1 -0
  167. package/lib/src/runtime/RemoteGraphRunner.js +696 -0
  168. package/lib/src/runtime/RemoteGraphRunner.js.map +1 -0
  169. package/package.json +4 -4
@@ -0,0 +1,78 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React from "react";
3
+ import { StopIcon, PlayIcon, FastForwardIcon } from "@phosphor-icons/react";
4
+ import { NODE_HEADER_HEIGHT_PX } from "./constants";
5
+ import { IssueBadge } from "./IssueBadge";
6
+ import { useWorkbenchContext } from "./context/WorkbenchContext";
7
+ export function DefaultNodeHeader({ id, typeId, validation, right, showId, }) {
8
+ const ctx = useWorkbenchContext();
9
+ const [isEditing, setIsEditing] = React.useState(false);
10
+ const [editValue, setEditValue] = React.useState("");
11
+ const inputRef = React.useRef(null);
12
+ // Use getNodeDisplayName if typeId is provided, otherwise use title prop
13
+ const displayName = typeId ? ctx.getNodeDisplayName(id) : id;
14
+ const effectiveTypeId = typeId ?? id;
15
+ // Get the default display name (without custom name) for comparison
16
+ const getDefaultDisplayName = React.useCallback(() => {
17
+ if (!typeId)
18
+ return id;
19
+ const node = ctx.wb.def.nodes.find((n) => n.nodeId === id);
20
+ if (!node)
21
+ return id;
22
+ const desc = ctx.wb.registry.nodes.get(node.typeId);
23
+ return desc?.displayName || node.typeId;
24
+ }, [ctx, id, typeId]);
25
+ const handleDoubleClick = React.useCallback((e) => {
26
+ // Only allow editing if typeId is provided (enables renaming)
27
+ if (!typeId)
28
+ return;
29
+ e.stopPropagation();
30
+ setIsEditing(true);
31
+ setEditValue(displayName);
32
+ }, [typeId, displayName]);
33
+ const handleSave = React.useCallback(() => {
34
+ if (!typeId)
35
+ return;
36
+ const trimmed = editValue.trim();
37
+ const defaultDisplayName = getDefaultDisplayName();
38
+ // If the trimmed value matches the default display name or typeId, clear the custom name
39
+ ctx.setNodeName(id, trimmed === defaultDisplayName || trimmed === effectiveTypeId ? undefined : trimmed);
40
+ setIsEditing(false);
41
+ }, [ctx, id, editValue, getDefaultDisplayName, effectiveTypeId, typeId]);
42
+ const handleCancel = React.useCallback(() => {
43
+ setIsEditing(false);
44
+ setEditValue(displayName);
45
+ }, [displayName]);
46
+ const handleKeyDown = React.useCallback((e) => {
47
+ if (e.key === "Enter") {
48
+ e.preventDefault();
49
+ e.stopPropagation();
50
+ handleSave();
51
+ }
52
+ else if (e.key === "Escape") {
53
+ e.preventDefault();
54
+ e.stopPropagation();
55
+ handleCancel();
56
+ }
57
+ }, [handleSave, handleCancel]);
58
+ React.useEffect(() => {
59
+ if (isEditing && inputRef.current) {
60
+ inputRef.current.focus();
61
+ inputRef.current.select();
62
+ }
63
+ }, [isEditing]);
64
+ return (_jsxs("div", { className: "flex items-center justify-center px-2 border-b border-solid border-gray-500 dark:border-gray-400 text-gray-600 dark:text-gray-300", style: {
65
+ maxHeight: NODE_HEADER_HEIGHT_PX,
66
+ minHeight: NODE_HEADER_HEIGHT_PX,
67
+ }, children: [isEditing ? (_jsx("input", { ref: inputRef, type: "text", value: editValue, onChange: (e) => setEditValue(e.target.value), onBlur: handleSave, onKeyDown: handleKeyDown, onClick: (e) => e.stopPropagation(), onMouseDown: (e) => e.stopPropagation(), className: "flex-1 h-full text-sm bg-transparent border border-blue-500 rounded px-1 outline-none wb-nodrag", style: { lineHeight: `${NODE_HEADER_HEIGHT_PX}px` } })) : (_jsx("strong", { className: `react-flow__node-title flex-1 h-full text-sm select-none truncate ${typeId ? "cursor-text" : ""}`, style: { lineHeight: `${NODE_HEADER_HEIGHT_PX}px` }, onDoubleClick: handleDoubleClick, title: typeId ? "Double-click to rename" : undefined, children: displayName })), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { onClick: (e) => {
68
+ e.stopPropagation();
69
+ void ctx.runNode(id);
70
+ }, className: "w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-green-600 dark:hover:text-green-400 transition-colors", title: "Run node", children: _jsx(PlayIcon, { size: 10, weight: "fill" }) }), ctx.runMode === "manual" && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: (e) => {
71
+ e.stopPropagation();
72
+ void ctx.runFromHere(id);
73
+ }, className: "w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-blue-600 dark:hover:text-blue-400 transition-colors", title: "Run from here", children: _jsx(FastForwardIcon, { size: 10, weight: "fill" }) }), _jsx("button", { onClick: (e) => {
74
+ e.stopPropagation();
75
+ ctx.abortNode(id);
76
+ }, className: "w-4 h-4 flex items-center justify-center hover:bg-gray-200 dark:hover:bg-gray-700 rounded text-gray-600 dark:text-gray-400 hover:text-red-600 dark:hover:text-red-400 transition-colors", title: "Abort node", children: _jsx(StopIcon, { size: 10, weight: "fill" }) })] })), right, validation.issues && validation.issues.length > 0 && (_jsx(IssueBadge, { level: validation.issues.some((i) => i.level === "error") ? "error" : "warning", size: 12, className: "w-3 h-3", title: validation.issues.map((v) => `${v.code}: ${v.message}`).join("; ") })), showId && _jsxs("span", { className: "text-[10px] opacity-70", children: ["(", id, ")"] })] })] }));
77
+ }
78
+ //# sourceMappingURL=DefaultNodeHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DefaultNodeHeader.js","sourceRoot":"","sources":["../../../src/misc/DefaultNodeHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+ export declare function Inspector({ debug, autoScroll, hideWorkbench, onAutoScrollChange, onHideWorkbenchChange, toString, contextPanel, setInput, }: {
3
+ debug?: boolean;
4
+ autoScroll?: boolean;
5
+ hideWorkbench?: boolean;
6
+ onAutoScrollChange?: (v: boolean) => void;
7
+ onHideWorkbenchChange?: (v: boolean) => void;
8
+ toString: (typeId?: string, value?: unknown) => string;
9
+ contextPanel?: React.ReactNode;
10
+ setInput: (handle: string, value: string | number | undefined) => void;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ //# sourceMappingURL=Inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inspector.d.ts","sourceRoot":"","sources":["../../../src/misc/Inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAC;AAehE,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,kBAAkB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,qBAAqB,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IACvD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACxE,2CAwqBA"}
@@ -0,0 +1,253 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { isInputPrivate, getInputTypeId, getInputDeclaredTypes, isTyped, unwrapTypeId, unwrapValue, } from "@bian-womp/spark-graph";
4
+ import { XIcon, CopyIcon, XCircleIcon } from "@phosphor-icons/react";
5
+ import { resolveOutputDisplay, prettyHandle } from "./value";
6
+ import { IssueBadge } from "./IssueBadge";
7
+ import { useWorkbenchContext } from "./context/WorkbenchContext";
8
+ import { DebugEvents } from "./DebugEvents";
9
+ export function Inspector({ debug, autoScroll, hideWorkbench, onAutoScrollChange, onHideWorkbenchChange, toString, contextPanel, setInput, }) {
10
+ const safeToString = (typeId, value) => {
11
+ try {
12
+ if (typeof toString === "function") {
13
+ return toString(typeId, value);
14
+ }
15
+ return String(value ?? "");
16
+ }
17
+ catch {
18
+ return String(value ?? "");
19
+ }
20
+ };
21
+ const unwrapForDisplay = (declaredTypeId, value) => {
22
+ if (isTyped(value)) {
23
+ const t = unwrapTypeId(value) ?? declaredTypeId;
24
+ return { typeId: t, value: unwrapValue(value) };
25
+ }
26
+ return { typeId: declaredTypeId, value };
27
+ };
28
+ const { wb, registryVersion, selectedNodeId, selectedEdgeId, inputsMap, inputDefaultsMap, outputsMap, outputTypesMap, nodeStatus, edgeStatus, validationByNode, validationByEdge, validationGlobal, valuesTick, updateEdgeType, systemErrors, registryErrors, inputValidationErrors, clearSystemErrors, clearRegistryErrors, clearInputValidationErrors, removeSystemError, removeRegistryError, removeInputValidationError, handlesMap, } = useWorkbenchContext();
29
+ const nodeValidationIssues = validationByNode.issues;
30
+ const edgeValidationIssues = validationByEdge.issues;
31
+ const nodeValidationHandles = validationByNode;
32
+ const globalValidationIssues = validationGlobal;
33
+ const selectedNode = wb.def.nodes.find((n) => n.nodeId === selectedNodeId);
34
+ const selectedEdge = wb.def.edges.find((e) => e.id === selectedEdgeId);
35
+ // Use precomputed handles map from context
36
+ const effectiveHandles = selectedNode
37
+ ? (handlesMap[selectedNode.nodeId] ?? {
38
+ inputs: {},
39
+ outputs: {},
40
+ inputDefaults: {},
41
+ })
42
+ : { inputs: {}, outputs: {}, inputDefaults: {} };
43
+ const inputHandles = Object.entries(effectiveHandles.inputs)
44
+ .filter(([k]) => !isInputPrivate(effectiveHandles.inputs, k))
45
+ .map(([k]) => k);
46
+ const outputHandles = Object.keys(effectiveHandles.outputs);
47
+ const nodeInputsRaw = selectedNodeId ? (inputsMap[selectedNodeId] ?? {}) : {};
48
+ const nodeInputsDefaults = selectedNodeId
49
+ ? {
50
+ ...effectiveHandles.inputDefaults,
51
+ ...inputDefaultsMap[selectedNodeId],
52
+ }
53
+ : {};
54
+ // Keep defaults separate for placeholder use (don't merge into nodeInputs)
55
+ const nodeInputs = nodeInputsRaw;
56
+ const nodeOutputs = selectedNodeId ? (outputsMap[selectedNodeId] ?? {}) : {};
57
+ // Helper to truncate long values
58
+ const truncateValue = (str, maxLen = 50) => {
59
+ if (str.length <= maxLen)
60
+ return str;
61
+ const start = Math.floor(maxLen / 2) - 5;
62
+ const end = str.length - Math.floor(maxLen / 2) + 5;
63
+ return `${str.slice(0, start)}...${str.slice(end)}`;
64
+ };
65
+ // Helper to copy to clipboard
66
+ const copyToClipboard = (text) => {
67
+ navigator.clipboard.writeText(text).catch(() => {
68
+ // Fallback for older browsers
69
+ const textarea = document.createElement("textarea");
70
+ textarea.value = text;
71
+ document.body.appendChild(textarea);
72
+ textarea.select();
73
+ document.execCommand("copy");
74
+ document.body.removeChild(textarea);
75
+ });
76
+ };
77
+ const selectedNodeStatus = selectedNodeId ? nodeStatus?.[selectedNodeId] : undefined;
78
+ const selectedNodeValidation = selectedNodeId ? (nodeValidationIssues?.[selectedNodeId] ?? []) : [];
79
+ const selectedEdgeValidation = selectedEdge ? (edgeValidationIssues?.[selectedEdge.id] ?? []) : [];
80
+ const selectedNodeHandleValidation = selectedNodeId
81
+ ? {
82
+ inputs: nodeValidationHandles?.inputs?.[selectedNodeId] ?? [],
83
+ outputs: nodeValidationHandles?.outputs?.[selectedNodeId] ?? [],
84
+ }
85
+ : { inputs: [], outputs: [] };
86
+ // Render edge status indicator
87
+ const renderEdgeStatus = useCallback(() => {
88
+ if (!selectedEdge)
89
+ return null;
90
+ const status = edgeStatus?.[selectedEdge.id];
91
+ if (status?.activeRuns > 0) {
92
+ return (_jsxs("div", { className: "mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1", children: [_jsxs("div", { className: "font-semibold", children: ["Running (", status.activeRuns, ")"] }), _jsx("div", { className: "text-[10px] text-blue-600 mt-1", children: "Note: Edge runIds are not available in stats events" })] }));
93
+ }
94
+ return null;
95
+ }, [selectedEdge, edgeStatus]);
96
+ // Render linked input display value
97
+ const renderLinkedInputDisplay = useCallback((typeId, current) => {
98
+ const displayStr = safeToString(typeId, current);
99
+ const isLong = displayStr.length > 50;
100
+ const truncated = isLong ? truncateValue(displayStr) : displayStr;
101
+ return (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { className: "truncate", children: truncated }), isLong && (_jsx("button", { className: "flex-shrink-0 p-1 hover:bg-gray-100 rounded", onClick: () => copyToClipboard(displayStr), title: "Copy full value", children: _jsx(CopyIcon, { size: 14 }) }))] }));
102
+ }, [safeToString, truncateValue, copyToClipboard]);
103
+ // Render output validation issues badge
104
+ const renderOutputValidationBadge = useCallback((handle) => {
105
+ const outIssues = selectedNodeHandleValidation.outputs.filter((m) => m.handle === handle);
106
+ if (outIssues.length === 0)
107
+ return null;
108
+ const outErr = outIssues.some((m) => m.level === "error");
109
+ const outTitle = outIssues.map((v) => `${v.code}: ${v.message}`).join("; ");
110
+ return _jsx(IssueBadge, { level: outErr ? "error" : "warning", size: 24, className: "ml-1 w-6 h-6", title: outTitle });
111
+ }, [selectedNodeHandleValidation]);
112
+ // Render output display value
113
+ const renderOutputDisplay = useCallback((outputValue, effectiveHandle) => {
114
+ const { typeId, value } = resolveOutputDisplay(outputValue, effectiveHandle);
115
+ const displayStr = safeToString(typeId, value);
116
+ const isLong = displayStr.length > 50;
117
+ const truncated = isLong ? truncateValue(displayStr) : displayStr;
118
+ return (_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { className: "truncate", children: truncated }), isLong && (_jsx("button", { className: "flex-shrink-0 p-1 hover:bg-gray-100 rounded", onClick: () => copyToClipboard(displayStr), title: "Copy full value", children: _jsx(CopyIcon, { size: 14 }) }))] }));
119
+ }, [safeToString, truncateValue, copyToClipboard]);
120
+ // Local drafts and originals for commit-on-blur/enter behavior
121
+ const [drafts, setDrafts] = useState({});
122
+ const [originals, setOriginals] = useState({});
123
+ // Initialize drafts from current inputs whenever selection or valuesTick change,
124
+ // but do not clobber fields currently being edited (dirty drafts)
125
+ useEffect(() => {
126
+ const shallowEqual = (a, b) => {
127
+ const ak = Object.keys(a);
128
+ const bk = Object.keys(b);
129
+ if (ak.length !== bk.length)
130
+ return false;
131
+ for (const k of ak)
132
+ if (a[k] !== b[k])
133
+ return false;
134
+ return true;
135
+ };
136
+ if (!selectedNodeId) {
137
+ if (Object.keys(drafts).length || Object.keys(originals).length) {
138
+ setDrafts({});
139
+ setOriginals({});
140
+ }
141
+ return;
142
+ }
143
+ const handles = Object.keys(effectiveHandles.inputs);
144
+ const nextDrafts = { ...drafts };
145
+ const nextOriginals = { ...originals };
146
+ for (const h of handles) {
147
+ const typeId = getInputTypeId(effectiveHandles.inputs, h);
148
+ const current = nodeInputs[h];
149
+ const { typeId: displayTypeId, value: displayValue } = unwrapForDisplay(typeId, current);
150
+ const display = safeToString(displayTypeId, displayValue);
151
+ const wasOriginal = originals[h];
152
+ const isDirty = drafts[h] !== undefined && wasOriginal !== undefined && drafts[h] !== wasOriginal;
153
+ if (!isDirty) {
154
+ nextDrafts[h] = display;
155
+ nextOriginals[h] = display;
156
+ }
157
+ }
158
+ if (!shallowEqual(drafts, nextDrafts))
159
+ setDrafts(nextDrafts);
160
+ if (!shallowEqual(originals, nextOriginals))
161
+ setOriginals(nextOriginals);
162
+ }, [selectedNodeId, selectedNode, wb.registry, registryVersion, valuesTick]);
163
+ const widthClass = debug ? "w-[480px]" : "w-[320px]";
164
+ const deleteEdgeById = (edgeId) => {
165
+ if (!edgeId)
166
+ return;
167
+ try {
168
+ wb.disconnect(edgeId);
169
+ }
170
+ catch { }
171
+ };
172
+ return (_jsxs("div", { className: `${widthClass} border-l border-gray-300 p-3 flex flex-col h-full min-h-0 overflow-auto select-none`, children: [_jsxs("div", { className: "flex-1 overflow-auto", children: [contextPanel && _jsx("div", { className: "mb-2", children: contextPanel }), inputValidationErrors.length > 0 && (_jsxs("div", { className: "mb-2 space-y-1", children: [inputValidationErrors.map((err, i) => (_jsxs("div", { className: "text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-semibold", children: "Input Validation Error" }), _jsx("div", { className: "break-words", children: err.message }), _jsxs("div", { className: "text-[10px] text-red-600 mt-1", children: [err.nodeId, ".", err.handle, " (type: ", err.typeId, ")"] })] }), _jsx("button", { className: "text-red-500 hover:text-red-700 text-[10px] px-1", onClick: () => removeInputValidationError(i), title: "Dismiss", children: _jsx(XIcon, { size: 10 }) })] }, i))), inputValidationErrors.length > 1 && (_jsx("button", { className: "text-xs text-red-600 hover:text-red-800 underline", onClick: clearInputValidationErrors, children: "Clear all" }))] })), systemErrors.length > 0 && (_jsxs("div", { className: "mb-2 space-y-1", children: [systemErrors.map((err, i) => (_jsxs("div", { className: "text-xs text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-semibold", children: err.code ? `Error ${err.code}` : "Error" }), _jsx("div", { className: "break-words", children: err.message })] }), _jsx("button", { className: "text-red-500 hover:text-red-700 text-[10px] px-1", onClick: () => removeSystemError(i), title: "Dismiss", children: _jsx(XIcon, { size: 10 }) })] }, i))), systemErrors.length > 1 && (_jsx("button", { className: "text-xs text-red-600 hover:text-red-800 underline", onClick: clearSystemErrors, children: "Clear all" }))] })), registryErrors.length > 0 && (_jsxs("div", { className: "mb-2 space-y-1", children: [registryErrors.map((err, i) => (_jsxs("div", { className: "text-xs text-amber-700 bg-amber-50 border border-amber-200 rounded px-2 py-1 flex items-start justify-between gap-2", children: [_jsxs("div", { className: "flex-1", children: [_jsx("div", { className: "font-semibold", children: "Registry Error" }), _jsx("div", { className: "break-words", children: err.message }), err.attempt && err.maxAttempts && (_jsxs("div", { className: "text-[10px] text-amber-600 mt-1", children: ["Attempt ", err.attempt, " of ", err.maxAttempts] }))] }), _jsx("button", { className: "text-amber-500 hover:text-amber-700 text-[10px] px-1", onClick: () => removeRegistryError(i), title: "Dismiss", children: _jsx(XIcon, { size: 10 }) })] }, i))), registryErrors.length > 1 && (_jsx("button", { className: "text-xs text-amber-600 hover:text-amber-800 underline", onClick: clearRegistryErrors, children: "Clear all" }))] })), _jsx("div", { className: "font-semibold mb-2", children: "Inspector" }), _jsxs("div", { className: "text-xs text-gray-500 mb-2", children: ["valuesTick: ", valuesTick] }), _jsx("div", { className: "flex-1", children: !selectedNode && !selectedEdge ? (_jsxs("div", { children: [_jsx("div", { className: "text-gray-500", children: "Select a node or edge." }), globalValidationIssues && globalValidationIssues.length > 0 && (_jsxs("div", { className: "mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1", children: [_jsx("div", { className: "font-semibold mb-1", children: "Validation" }), _jsx("ul", { className: "list-disc ml-4", children: globalValidationIssues.map((m, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(IssueBadge, { level: m.level, size: 24, className: "w-6 h-6" }), _jsx("span", { children: `${m.code}: ${m.message}` }), !!m.data?.edgeId && (_jsx("button", { className: "ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50", onClick: (e) => {
173
+ e.stopPropagation();
174
+ deleteEdgeById(m.data?.edgeId);
175
+ }, title: "Delete referenced edge", children: "Delete edge" }))] }, i))) })] }))] })) : selectedEdge ? (_jsxs("div", { children: [_jsxs("div", { className: "mb-2", children: [_jsxs("div", { children: ["Edge: ", selectedEdge.id] }), _jsxs("div", { children: [selectedEdge.source.nodeId, ".", selectedEdge.source.handle, " \u2192 ", selectedEdge.target.nodeId, ".", selectedEdge.target.handle] }), renderEdgeStatus(), _jsx("div", { className: "mt-1", children: _jsx("button", { className: "text-xs px-2 py-1 border border-red-300 rounded text-red-700 hover:bg-red-50", onClick: (e) => {
176
+ e.stopPropagation();
177
+ deleteEdgeById(selectedEdge.id);
178
+ }, title: "Delete this edge", children: "Delete edge" }) }), _jsxs("div", { className: "flex items-center gap-2 mt-1", children: [_jsxs("label", { className: "w-20 flex flex-col", children: [_jsx("span", { children: "Type" }), _jsx("span", { className: "text-gray-500 text-[11px]", children: "DataTypeId" })] }), _jsxs("select", { className: "border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 w-full", value: selectedEdge.typeId ?? "", onChange: (e) => {
179
+ const v = e.target.value;
180
+ const next = v === "" ? undefined : v;
181
+ updateEdgeType(selectedEdge.id, next);
182
+ }, children: [_jsx("option", { value: "", children: "(infer from source)" }), Array.from(wb.registry.types.keys()).map((tid) => (_jsx("option", { value: tid, children: tid }, tid)))] })] })] }), selectedEdgeValidation.length > 0 && (_jsxs("div", { className: "mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1", children: [_jsx("div", { className: "font-semibold mb-1", children: "Validation" }), _jsx("ul", { className: "list-disc ml-4", children: selectedEdgeValidation.map((m, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(IssueBadge, { level: m.level, size: 24, className: "w-6 h-6" }), _jsx("span", { children: `${m.code}: ${m.message}` }), _jsx("button", { className: "ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50", onClick: (e) => {
183
+ e.stopPropagation();
184
+ deleteEdgeById(selectedEdge.id);
185
+ }, title: "Delete this edge", children: "Delete edge" })] }, i))) })] }))] })) : (_jsxs("div", { children: [selectedNode && (_jsxs("div", { className: "mb-2", children: [_jsxs("div", { children: ["Node: ", selectedNode.nodeId] }), _jsxs("div", { children: ["Type: ", selectedNode.typeId] }), !!selectedNodeStatus?.activeRuns && selectedNodeStatus.activeRuns > 0 && (_jsxs("div", { className: "mt-1 text-xs text-blue-700 bg-blue-50 border border-blue-200 rounded px-2 py-1", children: [_jsxs("div", { className: "font-semibold", children: ["Running (", selectedNodeStatus.activeRuns, ")"] }), selectedNodeStatus.activeRunIds && selectedNodeStatus.activeRunIds.length > 0 ? (_jsxs("div", { className: "mt-1", children: [_jsx("div", { className: "text-[10px] text-blue-600", children: "RunIds:" }), _jsx("div", { className: "flex flex-wrap gap-1 mt-1", children: selectedNodeStatus.activeRunIds.map((runId, idx) => (_jsx("span", { className: "text-[10px] px-1.5 py-0.5 bg-blue-100 border border-blue-300 rounded font-mono", children: runId }, idx))) })] })) : (_jsx("div", { className: "text-[10px] text-blue-600 mt-1", children: "RunIds not available (some runs may have started without runId)" }))] })), !!selectedNodeStatus?.lastError && (_jsx("div", { className: "mt-2 text-sm text-red-700 bg-red-50 border border-red-200 rounded px-2 py-1 break-words", children: String(selectedNodeStatus.lastError?.message ?? selectedNodeStatus.lastError) }))] })), _jsxs("div", { className: "mb-2", children: [_jsx("div", { className: "font-semibold mb-1", children: "Inputs" }), inputHandles.length === 0 ? (_jsx("div", { className: "text-gray-500", children: "No inputs" })) : (inputHandles.map((h) => {
186
+ const typeId = getInputTypeId(effectiveHandles.inputs, h);
187
+ const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, h);
188
+ const typeLabel = Array.isArray(declaredTypes) ? declaredTypes.join(" | ") : (typeId ?? "");
189
+ const isLinked = wb.def.edges.some((e) => e.target.nodeId === selectedNodeId && e.target.handle === h);
190
+ const inbound = new Set(wb.def.edges
191
+ .filter((e) => e.target.nodeId === selectedNodeId && e.target.handle === h)
192
+ .map((e) => e.target.handle));
193
+ const { typeId: defaultTypeId, value: defaultValue } = unwrapForDisplay(typeId, nodeInputsDefaults[h]);
194
+ const hasDefault = !inbound.has(h) && nodeInputsDefaults[h] !== undefined;
195
+ const defaultStr = hasDefault ? safeToString(defaultTypeId, defaultValue) : undefined;
196
+ const commonProps = {
197
+ style: { flex: 1 },
198
+ disabled: isLinked,
199
+ };
200
+ const current = nodeInputs[h];
201
+ const { typeId: displayTypeId, value: displayValue } = unwrapForDisplay(typeId, current);
202
+ const hasValue = displayValue !== undefined && displayValue !== null;
203
+ const value = drafts[h] ?? safeToString(displayTypeId, displayValue);
204
+ const placeholder = hasDefault ? defaultStr : undefined;
205
+ const onChangeText = (text) => setDrafts((d) => ({ ...d, [h]: text }));
206
+ const commit = () => {
207
+ const draft = drafts[h];
208
+ if (draft === undefined)
209
+ return;
210
+ // Only commit if draft differs from current value
211
+ const currentDisplay = safeToString(typeId, current);
212
+ if (draft === currentDisplay) {
213
+ // No change, just sync originals without calling setInput
214
+ setOriginals((o) => ({ ...o, [h]: draft }));
215
+ return;
216
+ }
217
+ setInput(h, draft);
218
+ setOriginals((o) => ({ ...o, [h]: draft }));
219
+ };
220
+ const revert = () => {
221
+ const orig = originals[h] ?? safeToString(typeId, current);
222
+ setDrafts((d) => ({ ...d, [h]: orig }));
223
+ };
224
+ const clearInput = () => {
225
+ setInput(h, undefined);
226
+ setDrafts((d) => ({ ...d, [h]: "" }));
227
+ setOriginals((o) => ({ ...o, [h]: "" }));
228
+ };
229
+ const isEnum = displayTypeId?.startsWith("enum:");
230
+ const inIssues = selectedNodeHandleValidation.inputs.filter((m) => m.handle === h);
231
+ const hasValidation = inIssues.length > 0;
232
+ const hasErr = inIssues.some((m) => m.level === "error");
233
+ const title = inIssues.map((v) => `${v.code}: ${v.message}`).join("; ");
234
+ return (_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsxs("label", { className: "w-32 flex flex-col", children: [_jsx("span", { children: prettyHandle(h) }), _jsx("span", { className: "text-gray-500 text-[11px]", children: typeLabel })] }), hasValidation && (_jsx(IssueBadge, { level: hasErr ? "error" : "warning", size: 24, className: "ml-1 w-6 h-6", title: title })), isEnum ? (_jsxs("div", { className: "flex items-center gap-1 flex-1", children: [_jsxs("select", { className: "border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1 select-text", value: current !== undefined && current !== null ? String(current) : "", onChange: (e) => {
235
+ const val = e.target.value;
236
+ const raw = val === "" ? undefined : Number(val);
237
+ setInput(h, raw);
238
+ // keep drafts/originals in sync with label for display elsewhere
239
+ const display = safeToString(typeId, raw);
240
+ setDrafts((d) => ({ ...d, [h]: display }));
241
+ setOriginals((o) => ({ ...o, [h]: display }));
242
+ }, ...commonProps, children: [_jsx("option", { value: "", children: placeholder ? `Default: ${placeholder}` : "(select)" }), wb.registry.enums.get(typeId)?.options.map((opt) => (_jsx("option", { value: String(opt.value), children: opt.label }, opt.value)))] }), hasValue && !isLinked && (_jsx("button", { className: "flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700", onClick: clearInput, title: "Clear input value", children: _jsx(XCircleIcon, { size: 16 }) }))] })) : isLinked ? (_jsx("div", { className: "flex items-center gap-1 flex-1", children: _jsx("div", { className: "flex-1 min-w-0", children: renderLinkedInputDisplay(displayTypeId, displayValue) }) })) : (_jsxs("div", { className: "flex items-center gap-1 flex-1", children: [_jsx("input", { className: "border border-gray-300 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 flex-1 select-text", placeholder: placeholder ? `Default: ${placeholder}` : undefined, value: value, onChange: (e) => onChangeText(e.target.value), onBlur: commit, onKeyDown: (e) => {
243
+ if (e.key === "Enter")
244
+ commit();
245
+ if (e.key === "Escape")
246
+ revert();
247
+ }, ...commonProps }), hasValue && !isLinked && (_jsx("button", { className: "flex-shrink-0 p-1 hover:bg-gray-100 rounded text-gray-500 hover:text-gray-700", onClick: clearInput, title: "Clear input value", children: _jsx(XCircleIcon, { size: 16 }) }))] }))] }, h));
248
+ }))] }), _jsxs("div", { children: [_jsx("div", { className: "font-semibold mb-1", children: "Outputs" }), outputHandles.length === 0 ? (_jsx("div", { className: "text-gray-500", children: "No outputs" })) : (outputHandles.map((h) => (_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsxs("label", { className: "w-20 flex flex-col", children: [_jsx("span", { children: prettyHandle(h) }), _jsx("span", { className: "text-gray-500 text-[11px]", children: outputTypesMap[selectedNodeId]?.[h] ?? "" })] }), _jsx("div", { className: "flex-1 min-w-0", children: renderOutputDisplay(nodeOutputs[h], effectiveHandles.outputs[h]) }), renderOutputValidationBadge(h)] }, h))))] }), selectedNodeValidation.length > 0 && (_jsxs("div", { className: "mt-2 text-xs bg-red-50 border border-red-200 rounded px-2 py-1", children: [_jsx("div", { className: "font-semibold mb-1", children: "Validation" }), _jsx("ul", { className: "list-disc ml-4", children: selectedNodeValidation.map((m, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(IssueBadge, { level: m.level, size: 24, className: "w-6 h-6" }), _jsx("span", { children: `${m.code}: ${m.message}` }), !!m.data?.edgeId && (_jsx("button", { className: "ml-2 text-[10px] px-1 py-[2px] border border-red-300 rounded text-red-700 hover:bg-red-50", onClick: (e) => {
249
+ e.stopPropagation();
250
+ deleteEdgeById(m.data?.edgeId);
251
+ }, title: "Delete referenced edge", children: "Delete edge" }))] }, i))) })] }))] })) })] }), debug && (_jsx("div", { className: "mt-3 flex-none min-h-0 h-[50%]", children: _jsx(DebugEvents, { autoScroll: !!autoScroll, hideWorkbench: !!hideWorkbench, onAutoScrollChange: onAutoScrollChange, onHideWorkbenchChange: onHideWorkbenchChange }) }))] }));
252
+ }
253
+ //# sourceMappingURL=Inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inspector.js","sourceRoot":"","sources":["../../../src/misc/Inspector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function IssueBadge({ level, title, size, className, }: {
2
+ level: "error" | "warning";
3
+ title?: string;
4
+ size?: number;
5
+ className?: string;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=IssueBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IssueBadge.d.ts","sourceRoot":"","sources":["../../../src/misc/IssueBadge.tsx"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,IAAS,EACT,SAAS,GACV,EAAE;IACD,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAYA"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { WarningCircleIcon, XCircleIcon } from "@phosphor-icons/react";
3
+ export function IssueBadge({ level, title, size = 12, className, }) {
4
+ const colorClass = level === "error" ? "text-red-600" : "text-amber-600";
5
+ return (_jsx("button", { type: "button", className: `inline-flex items-center justify-center shrink-0 ${colorClass} ${className ?? ""}`, title: title, style: { width: size, height: size }, children: level === "error" ? _jsx(XCircleIcon, { size: size, weight: "fill" }) : _jsx(WarningCircleIcon, { size: size, weight: "fill" }) }));
6
+ }
7
+ //# sourceMappingURL=IssueBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IssueBadge.js","sourceRoot":"","sources":["../../../src/misc/IssueBadge.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEvE,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,IAAI,GAAG,EAAE,EACT,SAAS,GAMV;IACC,MAAM,UAAU,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACzE,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,oDAAoD,UAAU,IAAI,SAAS,IAAI,EAAE,EAAE,EAC9F,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAEnC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAC,iBAAiB,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,GAAG,GACzG,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ interface KeyboardShortcutToastProps {
2
+ message: string;
3
+ duration?: number;
4
+ onClose: () => void;
5
+ }
6
+ export declare function KeyboardShortcutToast({ message, duration, onClose }: KeyboardShortcutToastProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function useKeyboardShortcutToast(): {
8
+ toast: {
9
+ message: string;
10
+ id: number;
11
+ } | null;
12
+ showToast: (message: string) => void;
13
+ hideToast: () => void;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=KeyboardShortcutToast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardShortcutToast.d.ts","sourceRoot":"","sources":["../../../src/misc/KeyboardShortcutToast.tsx"],"names":[],"mappings":"AAEA,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAe,EAAE,OAAO,EAAE,EAAE,0BAA0B,2CAsCtG;AAGD,wBAAgB,wBAAwB;;iBACQ,MAAM;YAAM,MAAM;;yBAEpC,MAAM;;EAUnC"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState, useRef } from "react";
3
+ export function KeyboardShortcutToast({ message, duration = 1000, onClose }) {
4
+ const [isVisible, setIsVisible] = useState(true);
5
+ const onCloseRef = useRef(onClose);
6
+ const fadeOutTimerRef = useRef(null);
7
+ // Keep onClose ref up to date
8
+ useEffect(() => {
9
+ onCloseRef.current = onClose;
10
+ }, [onClose]);
11
+ useEffect(() => {
12
+ const timer = setTimeout(() => {
13
+ setIsVisible(false);
14
+ // Wait for fade-out animation before calling onClose
15
+ fadeOutTimerRef.current = setTimeout(() => {
16
+ onCloseRef.current();
17
+ }, 300);
18
+ }, duration);
19
+ return () => {
20
+ clearTimeout(timer);
21
+ if (fadeOutTimerRef.current) {
22
+ clearTimeout(fadeOutTimerRef.current);
23
+ }
24
+ };
25
+ }, [duration]);
26
+ return (_jsx("div", { className: `fixed top-4 left-1/2 -translate-x-1/2 z-[2000] pointer-events-none transition-opacity duration-300 ${isVisible ? "opacity-100" : "opacity-0"}`, children: _jsx("div", { className: "bg-white border border-gray-300 rounded-lg shadow-lg px-2 py-1 text-sm text-gray-700 font-medium whitespace-nowrap", children: message }) }));
27
+ }
28
+ // Hook to manage toast state
29
+ export function useKeyboardShortcutToast() {
30
+ const [toast, setToast] = useState(null);
31
+ const showToast = (message) => {
32
+ const id = Date.now();
33
+ setToast({ message, id });
34
+ };
35
+ const hideToast = () => {
36
+ setToast(null);
37
+ };
38
+ return { toast, showToast, hideToast };
39
+ }
40
+ //# sourceMappingURL=KeyboardShortcutToast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardShortcutToast.js","sourceRoot":"","sources":["../../../src/misc/KeyboardShortcutToast.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAQ3D,MAAM,UAAU,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,EAAE,OAAO,EAA8B;IACrG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAE5D,8BAA8B;IAC9B,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,qDAAqD;YACrD,eAAe,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxC,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEb,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5B,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CACL,cACE,SAAS,EAAE,sGACT,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAC9B,EAAE,YAEF,cAAK,SAAS,EAAC,oHAAoH,YAChI,OAAO,GACJ,GACF,CACP,CAAC;AACJ,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,wBAAwB;IACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAyC,IAAI,CAAC,CAAC;IAEjF,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,GAAG,EAAE;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import type { RFNodeData } from "./mapping";
3
+ export declare function NodeHandles({ data, isConnectable, getClassName, renderLabel, labelClassName, }: {
4
+ data: RFNodeData;
5
+ isConnectable: boolean;
6
+ getClassName?: (args: {
7
+ kind: "input" | "output";
8
+ id: string;
9
+ type: "source" | "target";
10
+ }) => string | undefined;
11
+ renderLabel?: (args: {
12
+ kind: "input" | "output";
13
+ id: string;
14
+ }) => React.ReactNode;
15
+ labelClassName?: string;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ export default NodeHandles;
18
+ //# sourceMappingURL=NodeHandles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeHandles.d.ts","sourceRoot":"","sources":["../../../src/misc/NodeHandles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAqD5C,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAA4F,GAC7F,EAAE;IACD,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IACjH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,2CAiIA;AAED,eAAe,WAAW,CAAC"}