@mindlogic-ai/logician-ui 3.1.0 → 3.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Icon/_constants/iconList.d.ts +1 -1
- package/dist/components/Icon/_constants/iconList.d.ts.map +1 -1
- package/dist/components/Icon/_constants/iconList.js +18 -0
- package/dist/components/Icon/_constants/iconList.js.map +1 -1
- package/dist/components/Icon/_constants/iconList.mjs +20 -2
- package/dist/components/Icon/_constants/iconList.mjs.map +1 -1
- package/dist/components/Icon/index.d.ts +2 -1
- package/dist/components/Icon/index.d.ts.map +1 -1
- package/dist/components/Icon/index.js +20 -1
- package/dist/components/Icon/index.js.map +1 -1
- package/dist/components/Icon/index.mjs +4 -2
- package/dist/components/Icon/index.mjs.map +1 -1
- package/dist/components/Tree/Tree.d.ts +20 -0
- package/dist/components/Tree/Tree.d.ts.map +1 -0
- package/dist/components/Tree/Tree.js +43 -0
- package/dist/components/Tree/Tree.js.map +1 -0
- package/dist/components/Tree/Tree.mjs +41 -0
- package/dist/components/Tree/Tree.mjs.map +1 -0
- package/dist/components/Tree/Tree.types.d.ts +21 -0
- package/dist/components/Tree/Tree.types.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranch.d.ts +3 -0
- package/dist/components/Tree/TreeBranch.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranch.js +14 -0
- package/dist/components/Tree/TreeBranch.js.map +1 -0
- package/dist/components/Tree/TreeBranch.mjs +12 -0
- package/dist/components/Tree/TreeBranch.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchContent.d.ts +3 -0
- package/dist/components/Tree/TreeBranchContent.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchContent.js +14 -0
- package/dist/components/Tree/TreeBranchContent.js.map +1 -0
- package/dist/components/Tree/TreeBranchContent.mjs +12 -0
- package/dist/components/Tree/TreeBranchContent.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchControl.d.ts +3 -0
- package/dist/components/Tree/TreeBranchControl.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchControl.js +19 -0
- package/dist/components/Tree/TreeBranchControl.js.map +1 -0
- package/dist/components/Tree/TreeBranchControl.mjs +17 -0
- package/dist/components/Tree/TreeBranchControl.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchIndentGuide.d.ts +3 -0
- package/dist/components/Tree/TreeBranchIndentGuide.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchIndentGuide.js +20 -0
- package/dist/components/Tree/TreeBranchIndentGuide.js.map +1 -0
- package/dist/components/Tree/TreeBranchIndentGuide.mjs +18 -0
- package/dist/components/Tree/TreeBranchIndentGuide.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchIndicator.d.ts +3 -0
- package/dist/components/Tree/TreeBranchIndicator.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchIndicator.js +15 -0
- package/dist/components/Tree/TreeBranchIndicator.js.map +1 -0
- package/dist/components/Tree/TreeBranchIndicator.mjs +13 -0
- package/dist/components/Tree/TreeBranchIndicator.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchText.d.ts +3 -0
- package/dist/components/Tree/TreeBranchText.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchText.js +14 -0
- package/dist/components/Tree/TreeBranchText.js.map +1 -0
- package/dist/components/Tree/TreeBranchText.mjs +12 -0
- package/dist/components/Tree/TreeBranchText.mjs.map +1 -0
- package/dist/components/Tree/TreeBranchTrigger.d.ts +3 -0
- package/dist/components/Tree/TreeBranchTrigger.d.ts.map +1 -0
- package/dist/components/Tree/TreeBranchTrigger.js +15 -0
- package/dist/components/Tree/TreeBranchTrigger.js.map +1 -0
- package/dist/components/Tree/TreeBranchTrigger.mjs +13 -0
- package/dist/components/Tree/TreeBranchTrigger.mjs.map +1 -0
- package/dist/components/Tree/TreeItem.d.ts +3 -0
- package/dist/components/Tree/TreeItem.d.ts.map +1 -0
- package/dist/components/Tree/TreeItem.js +25 -0
- package/dist/components/Tree/TreeItem.js.map +1 -0
- package/dist/components/Tree/TreeItem.mjs +23 -0
- package/dist/components/Tree/TreeItem.mjs.map +1 -0
- package/dist/components/Tree/TreeItemIndicator.d.ts +3 -0
- package/dist/components/Tree/TreeItemIndicator.d.ts.map +1 -0
- package/dist/components/Tree/TreeItemIndicator.js +14 -0
- package/dist/components/Tree/TreeItemIndicator.js.map +1 -0
- package/dist/components/Tree/TreeItemIndicator.mjs +12 -0
- package/dist/components/Tree/TreeItemIndicator.mjs.map +1 -0
- package/dist/components/Tree/TreeItemText.d.ts +3 -0
- package/dist/components/Tree/TreeItemText.d.ts.map +1 -0
- package/dist/components/Tree/TreeItemText.js +14 -0
- package/dist/components/Tree/TreeItemText.js.map +1 -0
- package/dist/components/Tree/TreeItemText.mjs +12 -0
- package/dist/components/Tree/TreeItemText.mjs.map +1 -0
- package/dist/components/Tree/TreeLabel.d.ts +3 -0
- package/dist/components/Tree/TreeLabel.d.ts.map +1 -0
- package/dist/components/Tree/TreeLabel.js +14 -0
- package/dist/components/Tree/TreeLabel.js.map +1 -0
- package/dist/components/Tree/TreeLabel.mjs +12 -0
- package/dist/components/Tree/TreeLabel.mjs.map +1 -0
- package/dist/components/Tree/TreeNode.d.ts +5 -0
- package/dist/components/Tree/TreeNode.d.ts.map +1 -0
- package/dist/components/Tree/TreeNode.js +9 -0
- package/dist/components/Tree/TreeNode.js.map +1 -0
- package/dist/components/Tree/TreeNode.mjs +7 -0
- package/dist/components/Tree/TreeNode.mjs.map +1 -0
- package/dist/components/Tree/TreeNodeCheckbox.d.ts +3 -0
- package/dist/components/Tree/TreeNodeCheckbox.d.ts.map +1 -0
- package/dist/components/Tree/TreeNodeCheckbox.js +14 -0
- package/dist/components/Tree/TreeNodeCheckbox.js.map +1 -0
- package/dist/components/Tree/TreeNodeCheckbox.mjs +12 -0
- package/dist/components/Tree/TreeNodeCheckbox.mjs.map +1 -0
- package/dist/components/Tree/TreeNodeContext.d.ts +2 -0
- package/dist/components/Tree/TreeNodeContext.d.ts.map +1 -0
- package/dist/components/Tree/TreeNodeContext.js +9 -0
- package/dist/components/Tree/TreeNodeContext.js.map +1 -0
- package/dist/components/Tree/TreeNodeContext.mjs +7 -0
- package/dist/components/Tree/TreeNodeContext.mjs.map +1 -0
- package/dist/components/Tree/TreeNodeProvider.d.ts +5 -0
- package/dist/components/Tree/TreeNodeProvider.d.ts.map +1 -0
- package/dist/components/Tree/TreeNodeProvider.js +9 -0
- package/dist/components/Tree/TreeNodeProvider.js.map +1 -0
- package/dist/components/Tree/TreeNodeProvider.mjs +7 -0
- package/dist/components/Tree/TreeNodeProvider.mjs.map +1 -0
- package/dist/components/Tree/TreeRoot.d.ts +3 -0
- package/dist/components/Tree/TreeRoot.d.ts.map +1 -0
- package/dist/components/Tree/TreeRoot.js +14 -0
- package/dist/components/Tree/TreeRoot.js.map +1 -0
- package/dist/components/Tree/TreeRoot.mjs +12 -0
- package/dist/components/Tree/TreeRoot.mjs.map +1 -0
- package/dist/components/Tree/TreeTree.d.ts +3 -0
- package/dist/components/Tree/TreeTree.d.ts.map +1 -0
- package/dist/components/Tree/TreeTree.js +14 -0
- package/dist/components/Tree/TreeTree.js.map +1 -0
- package/dist/components/Tree/TreeTree.mjs +12 -0
- package/dist/components/Tree/TreeTree.mjs.map +1 -0
- package/dist/components/Tree/index.d.ts +23 -0
- package/dist/components/Tree/index.d.ts.map +1 -0
- package/dist/components/Workflow/Workflow.d.ts +3 -0
- package/dist/components/Workflow/Workflow.d.ts.map +1 -0
- package/dist/components/Workflow/Workflow.js +109 -0
- package/dist/components/Workflow/Workflow.js.map +1 -0
- package/dist/components/Workflow/Workflow.mjs +107 -0
- package/dist/components/Workflow/Workflow.mjs.map +1 -0
- package/dist/components/Workflow/Workflow.translations.json.js +164 -0
- package/dist/components/Workflow/Workflow.translations.json.js.map +1 -0
- package/dist/components/Workflow/Workflow.translations.json.mjs +138 -0
- package/dist/components/Workflow/Workflow.translations.json.mjs.map +1 -0
- package/dist/components/Workflow/Workflow.types.d.ts +435 -0
- package/dist/components/Workflow/Workflow.types.d.ts.map +1 -0
- package/dist/components/Workflow/Workflow.types.js +19 -0
- package/dist/components/Workflow/Workflow.types.js.map +1 -0
- package/dist/components/Workflow/Workflow.types.mjs +16 -0
- package/dist/components/Workflow/Workflow.types.mjs.map +1 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.d.ts +10 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.d.ts.map +1 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.js +163 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.js.map +1 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.mjs +159 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.mjs.map +1 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.types.d.ts +117 -0
- package/dist/components/Workflow/WorkflowContext/WorkflowContext.types.d.ts.map +1 -0
- package/dist/components/Workflow/WorkflowContext/index.d.ts +3 -0
- package/dist/components/Workflow/WorkflowContext/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.d.ts +19 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.js +44 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.mjs +42 -0
- package/dist/components/Workflow/canvas/Canvas/BranchLabelBadge.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.d.ts +10 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.js +531 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.mjs +529 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.d.ts +53 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.js +96 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.mjs +93 -0
- package/dist/components/Workflow/canvas/Canvas/Canvas.styles.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.d.ts +27 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.js +70 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.mjs +68 -0
- package/dist/components/Workflow/canvas/Canvas/CanvasControls.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.d.ts +10 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.js +106 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.mjs +104 -0
- package/dist/components/Workflow/canvas/Canvas/LabeledEdge.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.d.ts +13 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.js +18 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.js.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.mjs +16 -0
- package/dist/components/Workflow/canvas/Canvas/edgeLabelVariant.mjs.map +1 -0
- package/dist/components/Workflow/canvas/Canvas/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/Canvas/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.d.ts +30 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.js +34 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.js.map +1 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.mjs +32 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.mjs.map +1 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/CollapsibleSection/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.d.ts +37 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.js +33 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.js.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.mjs +31 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.mjs.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.d.ts +16 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.js +54 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.js.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.mjs +52 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.mjs.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.d.ts +27 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.js +178 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.js.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.mjs +176 -0
- package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.mjs.map +1 -0
- package/dist/components/Workflow/canvas/DrawerShell/index.d.ts +3 -0
- package/dist/components/Workflow/canvas/DrawerShell/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.d.ts +12 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.js +68 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.js.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.mjs +66 -0
- package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.mjs.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.d.ts +19 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.js +35 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.js.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.mjs +32 -0
- package/dist/components/Workflow/canvas/EdgeInspector/endpointTitle.mjs.map +1 -0
- package/dist/components/Workflow/canvas/EdgeInspector/index.d.ts +3 -0
- package/dist/components/Workflow/canvas/EdgeInspector/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.d.ts +54 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.js +56 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.js.map +1 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.mjs +54 -0
- package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.mjs.map +1 -0
- package/dist/components/Workflow/canvas/FieldWrapper/index.d.ts +3 -0
- package/dist/components/Workflow/canvas/FieldWrapper/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.d.ts +16 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.js +25 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.js.map +1 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.mjs +22 -0
- package/dist/components/Workflow/canvas/FloatingCard/FloatingCard.mjs.map +1 -0
- package/dist/components/Workflow/canvas/FloatingCard/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/FloatingCard/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.d.ts +14 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.js +61 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.js.map +1 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.mjs +59 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.mjs.map +1 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.types.d.ts +11 -0
- package/dist/components/Workflow/canvas/GenericNode/GenericNode.types.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/GenericNode/index.d.ts +3 -0
- package/dist/components/Workflow/canvas/GenericNode/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.d.ts +15 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.js +145 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.js.map +1 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.mjs +143 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.mjs.map +1 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/GraphErrorBanner/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.d.ts +10 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.js +21 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.js.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.mjs +19 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.mjs.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.d.ts +18 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.js +40 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.js.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.mjs +37 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.styles.mjs.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.types.d.ts +15 -0
- package/dist/components/Workflow/canvas/IconTile/IconTile.types.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IconTile/index.d.ts +4 -0
- package/dist/components/Workflow/canvas/IconTile/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.d.ts +24 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.js +34 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.js.map +1 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.mjs +32 -0
- package/dist/components/Workflow/canvas/IssueList/IssueList.mjs.map +1 -0
- package/dist/components/Workflow/canvas/IssueList/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/IssueList/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.d.ts +9 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.js +94 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.js.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs +92 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.d.ts +7 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.js +13 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.js.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.mjs +10 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePalette.styles.mjs.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.d.ts +10 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.js +28 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.js.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.mjs +26 -0
- package/dist/components/Workflow/canvas/NodePalette/NodePaletteToggle.mjs.map +1 -0
- package/dist/components/Workflow/canvas/NodePalette/index.d.ts +4 -0
- package/dist/components/Workflow/canvas/NodePalette/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.d.ts +3 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.js +137 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.js.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.mjs +135 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.mjs.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.d.ts +66 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.js +87 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.js.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.mjs +77 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.styles.mjs.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.types.d.ts +35 -0
- package/dist/components/Workflow/canvas/NodeShell/NodeShell.types.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/NodeShell/index.d.ts +4 -0
- package/dist/components/Workflow/canvas/NodeShell/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.d.ts +15 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.js +14 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.js.map +1 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.mjs +12 -0
- package/dist/components/Workflow/canvas/SeverityDot/SeverityDot.mjs.map +1 -0
- package/dist/components/Workflow/canvas/SeverityDot/index.d.ts +2 -0
- package/dist/components/Workflow/canvas/SeverityDot/index.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/issueSeverity.d.ts +23 -0
- package/dist/components/Workflow/canvas/issueSeverity.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/issueSeverity.js +51 -0
- package/dist/components/Workflow/canvas/issueSeverity.js.map +1 -0
- package/dist/components/Workflow/canvas/issueSeverity.mjs +47 -0
- package/dist/components/Workflow/canvas/issueSeverity.mjs.map +1 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.d.ts +14 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.js +48 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.js.map +1 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.mjs +46 -0
- package/dist/components/Workflow/canvas/useFieldFocusRequest.mjs.map +1 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.d.ts +12 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.d.ts.map +1 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.js +17 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.js.map +1 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.mjs +15 -0
- package/dist/components/Workflow/canvas/workflowLabelProps.mjs.map +1 -0
- package/dist/components/Workflow/connectionRules.d.ts +59 -0
- package/dist/components/Workflow/connectionRules.d.ts.map +1 -0
- package/dist/components/Workflow/connectionRules.js +150 -0
- package/dist/components/Workflow/connectionRules.js.map +1 -0
- package/dist/components/Workflow/connectionRules.mjs +145 -0
- package/dist/components/Workflow/connectionRules.mjs.map +1 -0
- package/dist/components/Workflow/createNode.d.ts +27 -0
- package/dist/components/Workflow/createNode.d.ts.map +1 -0
- package/dist/components/Workflow/createNode.js +66 -0
- package/dist/components/Workflow/createNode.js.map +1 -0
- package/dist/components/Workflow/createNode.mjs +62 -0
- package/dist/components/Workflow/createNode.mjs.map +1 -0
- package/dist/components/Workflow/graphHistory.d.ts +23 -0
- package/dist/components/Workflow/graphHistory.d.ts.map +1 -0
- package/dist/components/Workflow/graphHistory.js +73 -0
- package/dist/components/Workflow/graphHistory.js.map +1 -0
- package/dist/components/Workflow/graphHistory.mjs +70 -0
- package/dist/components/Workflow/graphHistory.mjs.map +1 -0
- package/dist/components/Workflow/graphObserver.d.ts +13 -0
- package/dist/components/Workflow/graphObserver.d.ts.map +1 -0
- package/dist/components/Workflow/graphObserver.js +11 -0
- package/dist/components/Workflow/graphObserver.js.map +1 -0
- package/dist/components/Workflow/graphObserver.mjs +8 -0
- package/dist/components/Workflow/graphObserver.mjs.map +1 -0
- package/dist/components/Workflow/graphReducer.d.ts +75 -0
- package/dist/components/Workflow/graphReducer.d.ts.map +1 -0
- package/dist/components/Workflow/graphReducer.js +122 -0
- package/dist/components/Workflow/graphReducer.js.map +1 -0
- package/dist/components/Workflow/graphReducer.mjs +119 -0
- package/dist/components/Workflow/graphReducer.mjs.map +1 -0
- package/dist/components/Workflow/index.d.ts +22 -0
- package/dist/components/Workflow/index.d.ts.map +1 -0
- package/dist/components/Workflow/layout/autoLayout.d.ts +49 -0
- package/dist/components/Workflow/layout/autoLayout.d.ts.map +1 -0
- package/dist/components/Workflow/layout/autoLayout.js +149 -0
- package/dist/components/Workflow/layout/autoLayout.js.map +1 -0
- package/dist/components/Workflow/layout/autoLayout.mjs +146 -0
- package/dist/components/Workflow/layout/autoLayout.mjs.map +1 -0
- package/dist/components/Workflow/stories/toyNodeTypes.d.ts +40 -0
- package/dist/components/Workflow/stories/toyNodeTypes.d.ts.map +1 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.d.ts +15 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.d.ts.map +1 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.js +45 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.js.map +1 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.mjs +43 -0
- package/dist/components/Workflow/useWorkflowIssueMessage.mjs.map +1 -0
- package/dist/components/Workflow/useWorkflowKeyboard.d.ts +10 -0
- package/dist/components/Workflow/useWorkflowKeyboard.d.ts.map +1 -0
- package/dist/components/Workflow/useWorkflowKeyboard.js +116 -0
- package/dist/components/Workflow/useWorkflowKeyboard.js.map +1 -0
- package/dist/components/Workflow/useWorkflowKeyboard.mjs +114 -0
- package/dist/components/Workflow/useWorkflowKeyboard.mjs.map +1 -0
- package/dist/icons.js +17 -0
- package/dist/icons.js.map +1 -1
- package/dist/icons.mjs +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +33 -1
- package/dist/index.mjs.map +1 -1
- package/dist/test-support/setup.d.ts +5 -0
- package/dist/test-support/setup.d.ts.map +1 -0
- package/package.json +10 -2
- package/src/components/Icon/_constants/iconList.ts +35 -0
- package/src/components/Icon/index.tsx +20 -0
- package/src/components/Tree/Tree.stories.tsx +564 -0
- package/src/components/Tree/Tree.tsx +37 -0
- package/src/components/Tree/Tree.types.ts +51 -0
- package/src/components/Tree/TreeBranch.tsx +11 -0
- package/src/components/Tree/TreeBranchContent.tsx +21 -0
- package/src/components/Tree/TreeBranchControl.tsx +28 -0
- package/src/components/Tree/TreeBranchIndentGuide.tsx +20 -0
- package/src/components/Tree/TreeBranchIndicator.tsx +27 -0
- package/src/components/Tree/TreeBranchText.tsx +19 -0
- package/src/components/Tree/TreeBranchTrigger.tsx +25 -0
- package/src/components/Tree/TreeItem.tsx +33 -0
- package/src/components/Tree/TreeItemIndicator.tsx +20 -0
- package/src/components/Tree/TreeItemText.tsx +19 -0
- package/src/components/Tree/TreeLabel.tsx +19 -0
- package/src/components/Tree/TreeNode.tsx +6 -0
- package/src/components/Tree/TreeNodeCheckbox.tsx +12 -0
- package/src/components/Tree/TreeNodeContext.tsx +3 -0
- package/src/components/Tree/TreeNodeProvider.tsx +6 -0
- package/src/components/Tree/TreeRoot.tsx +11 -0
- package/src/components/Tree/TreeTree.tsx +11 -0
- package/src/components/Tree/index.ts +42 -0
- package/src/components/Workflow/README.md +362 -0
- package/src/components/Workflow/Workflow.translations.json +112 -0
- package/src/components/Workflow/Workflow.tsx +189 -0
- package/src/components/Workflow/Workflow.types.ts +496 -0
- package/src/components/Workflow/WorkflowContext/WorkflowContext.tsx +215 -0
- package/src/components/Workflow/WorkflowContext/WorkflowContext.types.ts +122 -0
- package/src/components/Workflow/WorkflowContext/index.ts +10 -0
- package/src/components/Workflow/WorkflowContext/workflowSelection.test.tsx +93 -0
- package/src/components/Workflow/canvas/Canvas/BranchLabelBadge.tsx +69 -0
- package/src/components/Workflow/canvas/Canvas/Canvas.styles.ts +91 -0
- package/src/components/Workflow/canvas/Canvas/Canvas.tsx +773 -0
- package/src/components/Workflow/canvas/Canvas/CanvasControls.tsx +178 -0
- package/src/components/Workflow/canvas/Canvas/LabeledEdge.tsx +198 -0
- package/src/components/Workflow/canvas/Canvas/edgeLabelVariant.test.ts +26 -0
- package/src/components/Workflow/canvas/Canvas/edgeLabelVariant.ts +23 -0
- package/src/components/Workflow/canvas/Canvas/index.ts +1 -0
- package/src/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.tsx +96 -0
- package/src/components/Workflow/canvas/CollapsibleSection/index.ts +4 -0
- package/src/components/Workflow/canvas/DrawerShell/DrawerHeader.tsx +104 -0
- package/src/components/Workflow/canvas/DrawerShell/DrawerIssues.tsx +115 -0
- package/src/components/Workflow/canvas/DrawerShell/DrawerShell.tsx +408 -0
- package/src/components/Workflow/canvas/DrawerShell/index.ts +2 -0
- package/src/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.tsx +135 -0
- package/src/components/Workflow/canvas/EdgeInspector/endpointTitle.ts +38 -0
- package/src/components/Workflow/canvas/EdgeInspector/index.ts +2 -0
- package/src/components/Workflow/canvas/FieldWrapper/FieldWrapper.tsx +118 -0
- package/src/components/Workflow/canvas/FieldWrapper/index.ts +6 -0
- package/src/components/Workflow/canvas/FloatingCard/FloatingCard.tsx +37 -0
- package/src/components/Workflow/canvas/FloatingCard/index.ts +1 -0
- package/src/components/Workflow/canvas/GenericNode/GenericNode.tsx +114 -0
- package/src/components/Workflow/canvas/GenericNode/GenericNode.types.ts +10 -0
- package/src/components/Workflow/canvas/GenericNode/index.ts +5 -0
- package/src/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.tsx +284 -0
- package/src/components/Workflow/canvas/GraphErrorBanner/index.ts +1 -0
- package/src/components/Workflow/canvas/IconTile/IconTile.styles.ts +40 -0
- package/src/components/Workflow/canvas/IconTile/IconTile.tsx +36 -0
- package/src/components/Workflow/canvas/IconTile/IconTile.types.ts +13 -0
- package/src/components/Workflow/canvas/IconTile/index.ts +7 -0
- package/src/components/Workflow/canvas/IssueList/IssueList.tsx +84 -0
- package/src/components/Workflow/canvas/IssueList/index.ts +1 -0
- package/src/components/Workflow/canvas/NodePalette/NodePalette.styles.ts +7 -0
- package/src/components/Workflow/canvas/NodePalette/NodePalette.tsx +180 -0
- package/src/components/Workflow/canvas/NodePalette/NodePaletteToggle.tsx +39 -0
- package/src/components/Workflow/canvas/NodePalette/index.ts +3 -0
- package/src/components/Workflow/canvas/NodeShell/NodeShell.styles.ts +84 -0
- package/src/components/Workflow/canvas/NodeShell/NodeShell.tsx +321 -0
- package/src/components/Workflow/canvas/NodeShell/NodeShell.types.ts +45 -0
- package/src/components/Workflow/canvas/NodeShell/index.ts +8 -0
- package/src/components/Workflow/canvas/SeverityDot/SeverityDot.tsx +33 -0
- package/src/components/Workflow/canvas/SeverityDot/index.ts +1 -0
- package/src/components/Workflow/canvas/issueSeverity.ts +48 -0
- package/src/components/Workflow/canvas/useFieldFocusRequest.ts +54 -0
- package/src/components/Workflow/canvas/workflowLabelProps.ts +11 -0
- package/src/components/Workflow/connectionRules.test.ts +326 -0
- package/src/components/Workflow/connectionRules.ts +190 -0
- package/src/components/Workflow/createNode.test.ts +61 -0
- package/src/components/Workflow/createNode.ts +67 -0
- package/src/components/Workflow/graphHistory.test.ts +178 -0
- package/src/components/Workflow/graphHistory.ts +91 -0
- package/src/components/Workflow/graphObserver.ts +21 -0
- package/src/components/Workflow/graphReducer.test.ts +314 -0
- package/src/components/Workflow/graphReducer.ts +196 -0
- package/src/components/Workflow/index.ts +74 -0
- package/src/components/Workflow/layout/autoLayout.test.ts +170 -0
- package/src/components/Workflow/layout/autoLayout.ts +200 -0
- package/src/components/Workflow/stories/Workflow.stories.tsx +111 -0
- package/src/components/Workflow/stories/toyNodeTypes.tsx +146 -0
- package/src/components/Workflow/useWorkflowIssueMessage.test.ts +101 -0
- package/src/components/Workflow/useWorkflowIssueMessage.ts +49 -0
- package/src/components/Workflow/useWorkflowKeyboard.ts +126 -0
- package/src/index.ts +2 -0
- package/src/test-support/setup.ts +11 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type ReactNode, useMemo } from 'react';
|
|
4
|
+
import { Box, HStack, VStack } from '@chakra-ui/react';
|
|
5
|
+
|
|
6
|
+
import { AlertTriangle, TbAlertCircle } from '@/components/Icon';
|
|
7
|
+
import { Subtext } from '@/components/Typography';
|
|
8
|
+
|
|
9
|
+
import { useWorkflowIssueMessage } from '../../useWorkflowIssueMessage';
|
|
10
|
+
import type { Issue, IssueSeverity } from '../../Workflow.types';
|
|
11
|
+
import { useWorkflowTranslate } from '../../WorkflowContext';
|
|
12
|
+
import { severityCalloutStyle } from '../issueSeverity';
|
|
13
|
+
import { SeverityDot } from '../SeverityDot';
|
|
14
|
+
|
|
15
|
+
interface DrawerIssuesProps {
|
|
16
|
+
/**
|
|
17
|
+
* Issues to surface in the drawer header band, already filtered by the
|
|
18
|
+
* caller (node drawers pass only orphan / non-field-scoped issues; edge
|
|
19
|
+
* drawers pass all of theirs). Returns null when empty.
|
|
20
|
+
*/
|
|
21
|
+
issues: Issue[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* One severity bucket of node/edge issues, rendered as a tinted callout: a
|
|
26
|
+
* severity icon + a short heading ("Fixes needed" / "Worth checking") on top,
|
|
27
|
+
* then the messages as a bulleted list beneath. Severities never mix in a box
|
|
28
|
+
* so the icon, heading and tint stay meaningful.
|
|
29
|
+
*
|
|
30
|
+
* Markers use the severity's `dark` tone via `SeverityDot` — the CSS list
|
|
31
|
+
* `::marker` defaults to a muted grey that reads as an odd low-contrast dot on
|
|
32
|
+
* the tinted background.
|
|
33
|
+
*/
|
|
34
|
+
function IssueCallout({
|
|
35
|
+
severity,
|
|
36
|
+
title,
|
|
37
|
+
issues,
|
|
38
|
+
resolveMessage,
|
|
39
|
+
}: {
|
|
40
|
+
severity: IssueSeverity;
|
|
41
|
+
title: ReactNode;
|
|
42
|
+
issues: Issue[];
|
|
43
|
+
resolveMessage: (issue: Issue) => string;
|
|
44
|
+
}) {
|
|
45
|
+
const { bg, color, borderColor } = severityCalloutStyle(severity);
|
|
46
|
+
const Icon = severity === 'error' ? TbAlertCircle : AlertTriangle;
|
|
47
|
+
return (
|
|
48
|
+
<Box
|
|
49
|
+
border="1px solid"
|
|
50
|
+
borderColor={borderColor}
|
|
51
|
+
borderRadius="md"
|
|
52
|
+
bg={bg}
|
|
53
|
+
px={3}
|
|
54
|
+
py={2}
|
|
55
|
+
>
|
|
56
|
+
<VStack align="stretch" gap={1.5}>
|
|
57
|
+
<HStack gap={1.5} color={color}>
|
|
58
|
+
<Icon boxSize="xs" />
|
|
59
|
+
<Subtext color={color} fontWeight="bold">
|
|
60
|
+
{title}
|
|
61
|
+
</Subtext>
|
|
62
|
+
</HStack>
|
|
63
|
+
<VStack align="stretch" gap={0.5} ps={1}>
|
|
64
|
+
{issues.map((issue, i) => (
|
|
65
|
+
<HStack key={`${issue.code}_${i}`} gap={2} align="flex-start">
|
|
66
|
+
<SeverityDot severity={severity} tone="dark" mt={1.5} />
|
|
67
|
+
<Subtext color={color}>{resolveMessage(issue)}</Subtext>
|
|
68
|
+
</HStack>
|
|
69
|
+
))}
|
|
70
|
+
</VStack>
|
|
71
|
+
</VStack>
|
|
72
|
+
</Box>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Header issue band shared by node and edge drawers: groups the given issues
|
|
78
|
+
* by severity and renders one tinted `IssueCallout` per non-empty bucket.
|
|
79
|
+
*/
|
|
80
|
+
export function DrawerIssues({ issues }: DrawerIssuesProps) {
|
|
81
|
+
const resolveIssueMessage = useWorkflowIssueMessage();
|
|
82
|
+
const translate = useWorkflowTranslate();
|
|
83
|
+
const grouped = useMemo(
|
|
84
|
+
() => ({
|
|
85
|
+
errors: issues.filter((i) => i.severity === 'error'),
|
|
86
|
+
warnings: issues.filter((i) => i.severity === 'warning'),
|
|
87
|
+
}),
|
|
88
|
+
[issues]
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
if (issues.length === 0) return null;
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<Box px={4} py={3}>
|
|
95
|
+
<VStack align="stretch" gap={2}>
|
|
96
|
+
{grouped.errors.length > 0 ? (
|
|
97
|
+
<IssueCallout
|
|
98
|
+
severity="error"
|
|
99
|
+
title={translate('workflow_drawer_issues_error_title')}
|
|
100
|
+
issues={grouped.errors}
|
|
101
|
+
resolveMessage={resolveIssueMessage}
|
|
102
|
+
/>
|
|
103
|
+
) : null}
|
|
104
|
+
{grouped.warnings.length > 0 ? (
|
|
105
|
+
<IssueCallout
|
|
106
|
+
severity="warning"
|
|
107
|
+
title={translate('workflow_drawer_issues_warning_title')}
|
|
108
|
+
issues={grouped.warnings}
|
|
109
|
+
resolveMessage={resolveIssueMessage}
|
|
110
|
+
/>
|
|
111
|
+
) : null}
|
|
112
|
+
</VStack>
|
|
113
|
+
</Box>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type ComponentType, type ReactNode, useEffect, useMemo } from 'react';
|
|
4
|
+
import { Box, chakra } from '@chakra-ui/react';
|
|
5
|
+
|
|
6
|
+
import { Button } from '@/components/Button';
|
|
7
|
+
import { TbX } from '@/components/Icon';
|
|
8
|
+
import { Menu } from '@/components/Menu';
|
|
9
|
+
import { Text } from '@/components/Typography';
|
|
10
|
+
|
|
11
|
+
import { renamedOutputHandle } from '../../connectionRules';
|
|
12
|
+
import { cloneNode } from '../../createNode';
|
|
13
|
+
import type {
|
|
14
|
+
DockSide,
|
|
15
|
+
EdgeDrawerRenderProps,
|
|
16
|
+
GraphEdge,
|
|
17
|
+
GraphNode,
|
|
18
|
+
Issue,
|
|
19
|
+
} from '../../Workflow.types';
|
|
20
|
+
import { useWorkflow, useWorkflowTranslate } from '../../WorkflowContext';
|
|
21
|
+
import { BuiltInEdgeInspector, endpointTitle } from '../EdgeInspector';
|
|
22
|
+
import { FloatingCard } from '../FloatingCard';
|
|
23
|
+
import { DrawerHeader } from './DrawerHeader';
|
|
24
|
+
import { DrawerIssues } from './DrawerIssues';
|
|
25
|
+
|
|
26
|
+
export type NodeInspectorProps = {
|
|
27
|
+
/**
|
|
28
|
+
* Which side the inspector docks on. `'right'` (default) renders after the
|
|
29
|
+
* canvas; `'left'` orders it before the canvas (use when another surface owns
|
|
30
|
+
* the right rail). Also drives the top gutter — a left dock sits higher since
|
|
31
|
+
* it has no top-right action card to clear.
|
|
32
|
+
*/
|
|
33
|
+
dock?: DockSide;
|
|
34
|
+
/**
|
|
35
|
+
* Optional host renderer for the edge inspector body. When omitted, edges get
|
|
36
|
+
* a built-in inspector (editable label + read-only endpoints + delete).
|
|
37
|
+
*/
|
|
38
|
+
renderEdgeDrawer?: ComponentType<EdgeDrawerRenderProps>;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The built-in node/edge inspector. Mount it as a child of `<Workflow>` to get
|
|
43
|
+
* the default floating drawer; omit it to own inspection entirely (drive your
|
|
44
|
+
* own UI off `onSelectionChange`). A node and an edge share this surface: the
|
|
45
|
+
* editor's `drawerTarget` selects which branch renders. Node bodies come from
|
|
46
|
+
* the host node-type registry (`def.renderDrawer`); edge bodies come from the
|
|
47
|
+
* optional `renderEdgeDrawer`, falling back to a built-in label + endpoints
|
|
48
|
+
* inspector. Renders even in read-only mode (controls disable themselves).
|
|
49
|
+
*/
|
|
50
|
+
export function NodeInspector({
|
|
51
|
+
dock = 'right',
|
|
52
|
+
renderEdgeDrawer,
|
|
53
|
+
}: NodeInspectorProps) {
|
|
54
|
+
const {
|
|
55
|
+
graph,
|
|
56
|
+
dispatch,
|
|
57
|
+
getNodeType,
|
|
58
|
+
editor,
|
|
59
|
+
setDrawerTarget,
|
|
60
|
+
issuesByNode,
|
|
61
|
+
issuesByEdge,
|
|
62
|
+
readOnly,
|
|
63
|
+
hostBridge,
|
|
64
|
+
} = useWorkflow();
|
|
65
|
+
|
|
66
|
+
const target = editor.drawerTarget;
|
|
67
|
+
const node: GraphNode | null =
|
|
68
|
+
target?.type === 'node'
|
|
69
|
+
? (graph.nodes.find((n) => n.id === target.id) ?? null)
|
|
70
|
+
: null;
|
|
71
|
+
const edge: GraphEdge | null =
|
|
72
|
+
target?.type === 'edge'
|
|
73
|
+
? (graph.edges.find((e) => e.id === target.id) ?? null)
|
|
74
|
+
: null;
|
|
75
|
+
|
|
76
|
+
// Target points at something that no longer exists (e.g. just deleted) —
|
|
77
|
+
// clear it defensively so the drawer doesn't get stuck open on a ghost.
|
|
78
|
+
useEffect(() => {
|
|
79
|
+
if (target && !node && !edge) setDrawerTarget(null);
|
|
80
|
+
}, [target, node, edge, setDrawerTarget]);
|
|
81
|
+
|
|
82
|
+
// Render even when read-only: node/edge inspectors disable their own controls
|
|
83
|
+
// via the `readOnly` flag, so the drawer stays a legible read-only view (used
|
|
84
|
+
// by the version-history preview). Callers that want it gone simply don't
|
|
85
|
+
// mount <NodeInspector>.
|
|
86
|
+
if (!target) return null;
|
|
87
|
+
if (target.type === 'node') {
|
|
88
|
+
if (!node) return null;
|
|
89
|
+
return (
|
|
90
|
+
// Keyed by node id so switching between two same-kind nodes remounts the
|
|
91
|
+
// drawer — without this, scroll offset and collapsed-section state from
|
|
92
|
+
// the previous node carry over to the next one.
|
|
93
|
+
<NodeDrawer
|
|
94
|
+
key={node.id}
|
|
95
|
+
node={node}
|
|
96
|
+
issuesByNode={issuesByNode}
|
|
97
|
+
hostBridge={hostBridge}
|
|
98
|
+
readOnly={readOnly}
|
|
99
|
+
dock={dock}
|
|
100
|
+
dispatch={dispatch}
|
|
101
|
+
getNodeType={getNodeType}
|
|
102
|
+
graphNodes={graph.nodes}
|
|
103
|
+
setDrawerTarget={setDrawerTarget}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
if (!edge) return null;
|
|
108
|
+
return (
|
|
109
|
+
<EdgeDrawer
|
|
110
|
+
edge={edge}
|
|
111
|
+
issues={issuesByEdge[edge.id] ?? []}
|
|
112
|
+
hostBridge={hostBridge}
|
|
113
|
+
readOnly={readOnly}
|
|
114
|
+
dock={dock}
|
|
115
|
+
RenderEdge={renderEdgeDrawer}
|
|
116
|
+
/>
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Shared drawer chrome: a floating `Card` inspector with a header + scrollable
|
|
122
|
+
* body. Kept in its own column (rather than overlaying) so it never covers the
|
|
123
|
+
* canvas MiniMap; the margin gutter detaches it from the edges and the top
|
|
124
|
+
* inset clears any floating action controls a host renders in the canvas
|
|
125
|
+
* top-right.
|
|
126
|
+
*
|
|
127
|
+
* `alignSelf="flex-start"` opts the card out of the flex row's stretch so it
|
|
128
|
+
* sizes to its content rather than the full canvas height; `maxHeight` caps it
|
|
129
|
+
* at the available column (minus the `mt`/`mb` gutters, kept in sync via the
|
|
130
|
+
* spacing CSS vars) so a long inspector still scrolls its body instead of
|
|
131
|
+
* overflowing.
|
|
132
|
+
*/
|
|
133
|
+
function DrawerFrame({
|
|
134
|
+
header,
|
|
135
|
+
children,
|
|
136
|
+
dock,
|
|
137
|
+
}: {
|
|
138
|
+
header: ReactNode;
|
|
139
|
+
children: ReactNode;
|
|
140
|
+
dock: DockSide;
|
|
141
|
+
}) {
|
|
142
|
+
// A right dock clears the host's top-right action card (mt=20); a left dock
|
|
143
|
+
// (version-history preview) has nothing above it, so it sits at the same top
|
|
144
|
+
// gutter as the palette (mt=4).
|
|
145
|
+
const topInset = dock === 'left' ? 4 : 20;
|
|
146
|
+
return (
|
|
147
|
+
<FloatingCard
|
|
148
|
+
// A left dock renders before the canvas in the flex row; a right dock
|
|
149
|
+
// after. The host hides the palette when docking left, so order:-1 lands
|
|
150
|
+
// the inspector at the left edge.
|
|
151
|
+
order={dock === 'left' ? -1 : undefined}
|
|
152
|
+
mt={topInset}
|
|
153
|
+
mb={4}
|
|
154
|
+
mx={4}
|
|
155
|
+
alignSelf="flex-start"
|
|
156
|
+
maxHeight={`calc(100% - var(--chakra-spacing-${topInset}) - var(--chakra-spacing-4))`}
|
|
157
|
+
display="flex"
|
|
158
|
+
flexDirection="column"
|
|
159
|
+
>
|
|
160
|
+
{header}
|
|
161
|
+
<Box flex="1" minHeight={0} overflowY="auto">
|
|
162
|
+
{children}
|
|
163
|
+
</Box>
|
|
164
|
+
</FloatingCard>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Wraps an inspector body in a disabled `<fieldset>` when read-only (version
|
|
170
|
+
* preview). A disabled fieldset natively disables every form control nested in
|
|
171
|
+
* it — inputs, textareas, selects, buttons, switches — so the whole inspector
|
|
172
|
+
* goes read-only without each node type having to gate every control. The
|
|
173
|
+
* header (close button) lives outside this, so the drawer can still be closed.
|
|
174
|
+
*/
|
|
175
|
+
function ReadOnlyFieldset({
|
|
176
|
+
readOnly,
|
|
177
|
+
children,
|
|
178
|
+
}: {
|
|
179
|
+
readOnly: boolean;
|
|
180
|
+
children: ReactNode;
|
|
181
|
+
}) {
|
|
182
|
+
return (
|
|
183
|
+
<chakra.fieldset disabled={readOnly} border="0" m={0} p={0} minW={0}>
|
|
184
|
+
{children}
|
|
185
|
+
</chakra.fieldset>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function NodeDrawer({
|
|
190
|
+
node,
|
|
191
|
+
issuesByNode,
|
|
192
|
+
hostBridge,
|
|
193
|
+
readOnly,
|
|
194
|
+
dock,
|
|
195
|
+
dispatch,
|
|
196
|
+
getNodeType,
|
|
197
|
+
graphNodes,
|
|
198
|
+
setDrawerTarget,
|
|
199
|
+
}: {
|
|
200
|
+
node: GraphNode;
|
|
201
|
+
issuesByNode: Record<string, Issue[]>;
|
|
202
|
+
hostBridge: unknown;
|
|
203
|
+
readOnly: boolean;
|
|
204
|
+
dock: DockSide;
|
|
205
|
+
dispatch: ReturnType<typeof useWorkflow>['dispatch'];
|
|
206
|
+
getNodeType: ReturnType<typeof useWorkflow>['getNodeType'];
|
|
207
|
+
graphNodes: GraphNode[];
|
|
208
|
+
setDrawerTarget: ReturnType<typeof useWorkflow>['setDrawerTarget'];
|
|
209
|
+
}) {
|
|
210
|
+
const translate = useWorkflowTranslate();
|
|
211
|
+
const def = getNodeType(node.kind);
|
|
212
|
+
const issues = useMemo<Issue[]>(
|
|
213
|
+
() => issuesByNode[node.id] ?? [],
|
|
214
|
+
[issuesByNode, node.id]
|
|
215
|
+
);
|
|
216
|
+
// Field-scoped issues render inline beneath their inputs via FieldWrapper.
|
|
217
|
+
// Only node-scoped issues that DON'T target a specific field (e.g.
|
|
218
|
+
// graph-level "unreachable from start") still need a header surface.
|
|
219
|
+
const orphanIssues = useMemo(
|
|
220
|
+
() => issues.filter((i) => !i.fieldKey),
|
|
221
|
+
[issues]
|
|
222
|
+
);
|
|
223
|
+
|
|
224
|
+
if (!def) return null;
|
|
225
|
+
|
|
226
|
+
const Render = def.renderDrawer;
|
|
227
|
+
const Icon = def.icon;
|
|
228
|
+
// Title the drawer with the instance (an agent's name), not the kind — with
|
|
229
|
+
// several same-kind nodes the kind alone doesn't say which one is open. The
|
|
230
|
+
// kind stays visible as the subtitle (dropped when the node is unnamed and
|
|
231
|
+
// the title already IS the kind label).
|
|
232
|
+
const instanceTitle = endpointTitle(node, def, node.id);
|
|
233
|
+
// Single dispatch path for every config write, so a handle rename (e.g. a
|
|
234
|
+
// renamed Classify category, whose handle is `cat_<name>`) always moves its
|
|
235
|
+
// edge instead of orphaning it.
|
|
236
|
+
const applyConfig = (next: unknown) =>
|
|
237
|
+
dispatch({
|
|
238
|
+
type: 'updateNodeConfig',
|
|
239
|
+
id: node.id,
|
|
240
|
+
config: next,
|
|
241
|
+
remapEdgeHandle: renamedOutputHandle(def.handles, node.config, next),
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
const header = (
|
|
245
|
+
<DrawerHeader
|
|
246
|
+
icon={
|
|
247
|
+
<Box color="slate.1200" display="flex" alignItems="center">
|
|
248
|
+
<Icon boxSize="xs" />
|
|
249
|
+
</Box>
|
|
250
|
+
}
|
|
251
|
+
title={instanceTitle}
|
|
252
|
+
subtitle={instanceTitle === def.label ? undefined : def.label}
|
|
253
|
+
lineClampTitle
|
|
254
|
+
menuItems={
|
|
255
|
+
// No mutating actions in read-only (version preview) — selection stays
|
|
256
|
+
// enabled so the node is still inspectable, but Duplicate/Delete are
|
|
257
|
+
// hidden so the previewed graph can't be edited.
|
|
258
|
+
!readOnly && !def.placement?.pinned ? (
|
|
259
|
+
<>
|
|
260
|
+
<Menu.Item
|
|
261
|
+
value="duplicate"
|
|
262
|
+
onClick={() => {
|
|
263
|
+
const clone = cloneNode(node, graphNodes);
|
|
264
|
+
dispatch({ type: 'addNode', node: clone });
|
|
265
|
+
setDrawerTarget({ type: 'node', id: clone.id });
|
|
266
|
+
}}
|
|
267
|
+
>
|
|
268
|
+
{translate('workflow_node_duplicate') as string}
|
|
269
|
+
</Menu.Item>
|
|
270
|
+
<Menu.Item
|
|
271
|
+
value="delete"
|
|
272
|
+
color="danger.main"
|
|
273
|
+
onClick={() => {
|
|
274
|
+
dispatch({ type: 'deleteNode', id: node.id });
|
|
275
|
+
setDrawerTarget(null);
|
|
276
|
+
}}
|
|
277
|
+
>
|
|
278
|
+
{translate('workflow_node_delete') as string}
|
|
279
|
+
</Menu.Item>
|
|
280
|
+
</>
|
|
281
|
+
) : undefined
|
|
282
|
+
}
|
|
283
|
+
onClose={() => setDrawerTarget(null)}
|
|
284
|
+
/>
|
|
285
|
+
);
|
|
286
|
+
|
|
287
|
+
return (
|
|
288
|
+
<DrawerFrame header={header} dock={dock}>
|
|
289
|
+
<DrawerIssues issues={orphanIssues} />
|
|
290
|
+
<ReadOnlyFieldset readOnly={readOnly}>
|
|
291
|
+
{Render ? (
|
|
292
|
+
<Render
|
|
293
|
+
id={node.id}
|
|
294
|
+
config={node.config}
|
|
295
|
+
issues={issues}
|
|
296
|
+
readOnly={readOnly}
|
|
297
|
+
hostBridge={hostBridge}
|
|
298
|
+
onChange={applyConfig}
|
|
299
|
+
/>
|
|
300
|
+
) : (
|
|
301
|
+
<Text color="slate.600" fontSize="sm" px={4} py={4}>
|
|
302
|
+
{translate('workflow_drawer_empty_settings')}
|
|
303
|
+
</Text>
|
|
304
|
+
)}
|
|
305
|
+
</ReadOnlyFieldset>
|
|
306
|
+
</DrawerFrame>
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
function EdgeDrawer({
|
|
311
|
+
edge,
|
|
312
|
+
issues,
|
|
313
|
+
hostBridge,
|
|
314
|
+
readOnly,
|
|
315
|
+
dock,
|
|
316
|
+
RenderEdge,
|
|
317
|
+
}: {
|
|
318
|
+
edge: GraphEdge;
|
|
319
|
+
issues: Issue[];
|
|
320
|
+
hostBridge: unknown;
|
|
321
|
+
readOnly: boolean;
|
|
322
|
+
dock: DockSide;
|
|
323
|
+
RenderEdge?: ComponentType<EdgeDrawerRenderProps>;
|
|
324
|
+
}) {
|
|
325
|
+
const translate = useWorkflowTranslate();
|
|
326
|
+
const { graph, dispatch, getNodeType, setDrawerTarget, setSelectedEdgeId } =
|
|
327
|
+
useWorkflow();
|
|
328
|
+
|
|
329
|
+
const sourceNode = graph.nodes.find((n) => n.id === edge.source);
|
|
330
|
+
const targetNode = graph.nodes.find((n) => n.id === edge.target);
|
|
331
|
+
const connectionTitle = translate('workflow_edge_connection', {
|
|
332
|
+
source: endpointTitle(
|
|
333
|
+
sourceNode,
|
|
334
|
+
sourceNode ? getNodeType(sourceNode.kind) : undefined,
|
|
335
|
+
edge.source
|
|
336
|
+
),
|
|
337
|
+
target: endpointTitle(
|
|
338
|
+
targetNode,
|
|
339
|
+
targetNode ? getNodeType(targetNode.kind) : undefined,
|
|
340
|
+
edge.target
|
|
341
|
+
),
|
|
342
|
+
}) as string;
|
|
343
|
+
|
|
344
|
+
const onChange = (next: GraphEdge) =>
|
|
345
|
+
dispatch({
|
|
346
|
+
type: 'updateEdge',
|
|
347
|
+
id: edge.id,
|
|
348
|
+
patch: { label: next.label },
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
const onDelete = () => {
|
|
352
|
+
dispatch({ type: 'deleteEdge', id: edge.id });
|
|
353
|
+
setDrawerTarget(null);
|
|
354
|
+
setSelectedEdgeId(null);
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
const header = (
|
|
358
|
+
// Delete moved out of the kebab into an explicit button at the foot of the
|
|
359
|
+
// drawer (below), so it's discoverable when you just click an edge — the
|
|
360
|
+
// hover-X on the canvas only appears over the edge's name badge now.
|
|
361
|
+
<DrawerHeader
|
|
362
|
+
title={connectionTitle}
|
|
363
|
+
lineClampTitle
|
|
364
|
+
onClose={() => setDrawerTarget(null)}
|
|
365
|
+
/>
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
return (
|
|
369
|
+
<DrawerFrame header={header} dock={dock}>
|
|
370
|
+
<DrawerIssues issues={issues} />
|
|
371
|
+
<ReadOnlyFieldset readOnly={readOnly}>
|
|
372
|
+
{RenderEdge ? (
|
|
373
|
+
<RenderEdge
|
|
374
|
+
edge={edge}
|
|
375
|
+
onChange={onChange}
|
|
376
|
+
issues={issues}
|
|
377
|
+
readOnly={readOnly}
|
|
378
|
+
hostBridge={hostBridge}
|
|
379
|
+
/>
|
|
380
|
+
) : (
|
|
381
|
+
<BuiltInEdgeInspector
|
|
382
|
+
edge={edge}
|
|
383
|
+
onChange={onChange}
|
|
384
|
+
issues={issues}
|
|
385
|
+
readOnly={readOnly}
|
|
386
|
+
hostBridge={hostBridge}
|
|
387
|
+
/>
|
|
388
|
+
)}
|
|
389
|
+
</ReadOnlyFieldset>
|
|
390
|
+
{/* Explicit delete affordance for the edge — outside the read-only
|
|
391
|
+
fieldset, and hidden entirely in the version-history preview. */}
|
|
392
|
+
{readOnly ? null : (
|
|
393
|
+
<Box borderTopWidth="1px" borderColor="slate.200" px={4} py={3}>
|
|
394
|
+
<Button
|
|
395
|
+
size="sm"
|
|
396
|
+
variant="outline"
|
|
397
|
+
colorPalette="danger"
|
|
398
|
+
width="100%"
|
|
399
|
+
onClick={onDelete}
|
|
400
|
+
>
|
|
401
|
+
<TbX boxSize="xs" />
|
|
402
|
+
{translate('workflow_edge_delete') as string}
|
|
403
|
+
</Button>
|
|
404
|
+
</Box>
|
|
405
|
+
)}
|
|
406
|
+
</DrawerFrame>
|
|
407
|
+
);
|
|
408
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { Box, Stack, VStack } from '@chakra-ui/react';
|
|
4
|
+
|
|
5
|
+
import { Input } from '@/components/Input';
|
|
6
|
+
import { Subtext } from '@/components/Typography';
|
|
7
|
+
|
|
8
|
+
import type {
|
|
9
|
+
EdgeDrawerRenderProps,
|
|
10
|
+
GraphNode,
|
|
11
|
+
NodeTypeDef,
|
|
12
|
+
} from '../../Workflow.types';
|
|
13
|
+
import { useWorkflow, useWorkflowTranslate } from '../../WorkflowContext';
|
|
14
|
+
import { FieldWrapper } from '../FieldWrapper';
|
|
15
|
+
import { endpointTitle, findPort } from './endpointTitle';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Author-facing line for the port an edge endpoint sits on. A resolved port
|
|
19
|
+
* shows its label (Pass / 분기 1 — the same text LabeledEdge rides on the
|
|
20
|
+
* wire) or nothing when unlabeled (raw ids like `out` are wiring detail). A
|
|
21
|
+
* DANGLING handle — one no current port matches, e.g. after restoring a
|
|
22
|
+
* snapshot whose category was renamed — falls back to the raw id, the only
|
|
23
|
+
* clue left for diagnosing the broken wire.
|
|
24
|
+
*/
|
|
25
|
+
function portLabel(
|
|
26
|
+
node: GraphNode | undefined,
|
|
27
|
+
def: NodeTypeDef | undefined,
|
|
28
|
+
side: 'inputs' | 'outputs',
|
|
29
|
+
handleId: string | undefined
|
|
30
|
+
): string | undefined {
|
|
31
|
+
if (!node || !def || !handleId) return undefined;
|
|
32
|
+
const port = findPort(node, def, side, handleId);
|
|
33
|
+
return port ? port.label : handleId;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Built-in edge inspector body rendered in `DrawerShell` when the host does not
|
|
38
|
+
* supply a `renderEdgeDrawer`. Shows an editable label plus read-only endpoint
|
|
39
|
+
* info (source title → target title, and handle ids when present). Label edits
|
|
40
|
+
* flow through `onChange` (an `updateEdge` dispatch) so they are undoable.
|
|
41
|
+
*
|
|
42
|
+
* Deliberately uses only generic primitives (logician-ui + FieldWrapper) so the
|
|
43
|
+
* framework core stays domain-free.
|
|
44
|
+
*/
|
|
45
|
+
export function BuiltInEdgeInspector({
|
|
46
|
+
edge,
|
|
47
|
+
onChange,
|
|
48
|
+
readOnly,
|
|
49
|
+
}: EdgeDrawerRenderProps) {
|
|
50
|
+
const translate = useWorkflowTranslate();
|
|
51
|
+
const { graph, getNodeType } = useWorkflow();
|
|
52
|
+
|
|
53
|
+
const sourceNode = graph.nodes.find((n) => n.id === edge.source);
|
|
54
|
+
const targetNode = graph.nodes.find((n) => n.id === edge.target);
|
|
55
|
+
const sourceDef = sourceNode ? getNodeType(sourceNode.kind) : undefined;
|
|
56
|
+
const targetDef = targetNode ? getNodeType(targetNode.kind) : undefined;
|
|
57
|
+
const sourceTitle = endpointTitle(sourceNode, sourceDef, edge.source);
|
|
58
|
+
const targetTitle = endpointTitle(targetNode, targetDef, edge.target);
|
|
59
|
+
|
|
60
|
+
return (
|
|
61
|
+
<Box px={4} py={4}>
|
|
62
|
+
<VStack align="stretch" gap={4}>
|
|
63
|
+
<FieldWrapper
|
|
64
|
+
// Edges have no field-scoped issues in `issuesByField` (which is keyed
|
|
65
|
+
// by nodeId), so this lookup is intentionally empty — FieldWrapper is
|
|
66
|
+
// reused purely for its label + layout.
|
|
67
|
+
nodeId={edge.id}
|
|
68
|
+
fieldKey="label"
|
|
69
|
+
label={translate('workflow_edge_label_label') as string}
|
|
70
|
+
>
|
|
71
|
+
{({ borderColor }) => (
|
|
72
|
+
<Input
|
|
73
|
+
borderColor={borderColor}
|
|
74
|
+
value={edge.label ?? ''}
|
|
75
|
+
disabled={readOnly}
|
|
76
|
+
placeholder={
|
|
77
|
+
translate('workflow_edge_label_placeholder') as string
|
|
78
|
+
}
|
|
79
|
+
onChange={(e) =>
|
|
80
|
+
onChange({ ...edge, label: e.target.value || undefined })
|
|
81
|
+
}
|
|
82
|
+
/>
|
|
83
|
+
)}
|
|
84
|
+
</FieldWrapper>
|
|
85
|
+
|
|
86
|
+
<Stack gap={1.5}>
|
|
87
|
+
<Subtext fontWeight="semibold" color="slate.1300">
|
|
88
|
+
{translate('workflow_edge_endpoints_heading') as string}
|
|
89
|
+
</Subtext>
|
|
90
|
+
<Stack gap={2}>
|
|
91
|
+
<EndpointRow
|
|
92
|
+
label={translate('workflow_edge_source_label') as string}
|
|
93
|
+
title={sourceTitle}
|
|
94
|
+
portLabel={portLabel(
|
|
95
|
+
sourceNode,
|
|
96
|
+
sourceDef,
|
|
97
|
+
'outputs',
|
|
98
|
+
edge.sourceHandle
|
|
99
|
+
)}
|
|
100
|
+
/>
|
|
101
|
+
<EndpointRow
|
|
102
|
+
label={translate('workflow_edge_target_label') as string}
|
|
103
|
+
title={targetTitle}
|
|
104
|
+
portLabel={portLabel(
|
|
105
|
+
targetNode,
|
|
106
|
+
targetDef,
|
|
107
|
+
'inputs',
|
|
108
|
+
edge.targetHandle
|
|
109
|
+
)}
|
|
110
|
+
/>
|
|
111
|
+
</Stack>
|
|
112
|
+
</Stack>
|
|
113
|
+
</VStack>
|
|
114
|
+
</Box>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** One read-only endpoint line: role label, resolved node title, optional port label. */
|
|
119
|
+
function EndpointRow({
|
|
120
|
+
label,
|
|
121
|
+
title,
|
|
122
|
+
portLabel,
|
|
123
|
+
}: {
|
|
124
|
+
label: string;
|
|
125
|
+
title: string;
|
|
126
|
+
portLabel?: string;
|
|
127
|
+
}) {
|
|
128
|
+
return (
|
|
129
|
+
<Stack gap={0.5}>
|
|
130
|
+
<Subtext color="slate.900">{label}</Subtext>
|
|
131
|
+
<Subtext color="slate.1200">{title}</Subtext>
|
|
132
|
+
{portLabel ? <Subtext color="slate.700">{portLabel}</Subtext> : null}
|
|
133
|
+
</Stack>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GraphNode, HandleDef, NodeTypeDef } from '../../Workflow.types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Author-facing title for an edge endpoint: the node-type's per-instance title
|
|
5
|
+
* (e.g. an agent's name) when available, else the type label, else the raw id.
|
|
6
|
+
*
|
|
7
|
+
* Shared by the edge inspector (drawer header connection title + endpoint info).
|
|
8
|
+
*/
|
|
9
|
+
export function endpointTitle(
|
|
10
|
+
node: GraphNode | undefined,
|
|
11
|
+
def: NodeTypeDef | undefined,
|
|
12
|
+
fallbackId: string
|
|
13
|
+
): string {
|
|
14
|
+
if (node && def?.getInstanceTitle) {
|
|
15
|
+
const title = def.getInstanceTitle(node.config);
|
|
16
|
+
if (title) return title;
|
|
17
|
+
}
|
|
18
|
+
return def?.label ?? fallbackId;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the port an edge endpoint sits on, from the owning node's current
|
|
23
|
+
* handle set. `undefined` when the handle id no longer matches any port — a
|
|
24
|
+
* dangling endpoint (e.g. a restored snapshot referencing a renamed Classify
|
|
25
|
+
* category).
|
|
26
|
+
*
|
|
27
|
+
* Shared by the canvas wire label (LabeledEdge) and the edge inspector so the
|
|
28
|
+
* two surfaces can't drift on how a port is named.
|
|
29
|
+
*/
|
|
30
|
+
export function findPort(
|
|
31
|
+
node: GraphNode | undefined,
|
|
32
|
+
def: NodeTypeDef | undefined,
|
|
33
|
+
side: 'inputs' | 'outputs',
|
|
34
|
+
handleId: string | undefined
|
|
35
|
+
): HandleDef | undefined {
|
|
36
|
+
if (!node || !def || !handleId) return undefined;
|
|
37
|
+
return def.handles(node.config)[side].find((h) => h.id === handleId);
|
|
38
|
+
}
|