@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,178 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import type { FitViewOptions } from '@xyflow/react';
|
|
4
|
+
import {
|
|
5
|
+
ControlButton,
|
|
6
|
+
Controls,
|
|
7
|
+
useReactFlow,
|
|
8
|
+
useStore,
|
|
9
|
+
useStoreApi,
|
|
10
|
+
} from '@xyflow/react';
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
Minus,
|
|
14
|
+
Plus,
|
|
15
|
+
TbArrowBackUp,
|
|
16
|
+
TbArrowForwardUp,
|
|
17
|
+
TbLock,
|
|
18
|
+
TbLockOpen,
|
|
19
|
+
TbMaximize,
|
|
20
|
+
TbSitemap,
|
|
21
|
+
} from '@/components/Icon';
|
|
22
|
+
import { Tooltip } from '@/components/Tooltip';
|
|
23
|
+
|
|
24
|
+
import { useWorkflow, useWorkflowTranslate } from '../../WorkflowContext';
|
|
25
|
+
|
|
26
|
+
// Rendered height of the palette toggle the controls tuck under in edit mode;
|
|
27
|
+
// update if the toggle resizes. Combined with the palette's own top gutter
|
|
28
|
+
// (spacing-4) it forms the clearance the controls drop by so they sit just
|
|
29
|
+
// below the toggle instead of overlapping it.
|
|
30
|
+
const PALETTE_TOGGLE_HEIGHT_PX = 52;
|
|
31
|
+
// Edit-mode top offset: clear the palette toggle (its gutter + height). Read-only
|
|
32
|
+
// preview has no chrome, so the controls sit at the plain corner inset instead.
|
|
33
|
+
const TOP_LEFT_OVERLAY_CLEARANCE = `calc(var(--chakra-spacing-4) + ${PALETTE_TOGGLE_HEIGHT_PX}px)`;
|
|
34
|
+
// Corner inset (spacing-3) for the controls when no chrome sits above them.
|
|
35
|
+
const CORNER_INSET = 'var(--chakra-spacing-3)';
|
|
36
|
+
|
|
37
|
+
type CanvasControlsProps = {
|
|
38
|
+
/** Read-only preview hides the authoring-only lock and auto-arrange actions. */
|
|
39
|
+
readOnly: boolean;
|
|
40
|
+
/** Tidy the graph left-to-right — owned by the canvas, which has the node
|
|
41
|
+
measurements the layout needs. */
|
|
42
|
+
onAutoArrange: () => void;
|
|
43
|
+
/** Shared fit-view framing so the manual button settles the view the same way
|
|
44
|
+
the initial mount and re-fits do. */
|
|
45
|
+
fitViewOptions: FitViewOptions;
|
|
46
|
+
/** Whether the top-left corner already holds overlay chrome (palette toggle or
|
|
47
|
+
error banner). When it does, the controls tuck below it; otherwise they sit
|
|
48
|
+
tight in the corner so they never float under an empty gap. */
|
|
49
|
+
topLeftChromePresent: boolean;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The top-left canvas controls. We render every button ourselves — React
|
|
54
|
+
* Flow's built-in zoom / fit / interactivity buttons are suppressed — so each
|
|
55
|
+
* carries a localized {@link Tooltip} instead of React Flow's hardcoded English
|
|
56
|
+
* `title`. We dock the cluster into the top-left overlay corner (rather than
|
|
57
|
+
* React Flow's default bottom-left) so it doesn't read as orphaned mid-canvas —
|
|
58
|
+
* most noticeably when the version-history inspector docks on the left.
|
|
59
|
+
* Placement "right" keeps the tooltip on-canvas.
|
|
60
|
+
*/
|
|
61
|
+
export function CanvasControls({
|
|
62
|
+
readOnly,
|
|
63
|
+
onAutoArrange,
|
|
64
|
+
fitViewOptions,
|
|
65
|
+
topLeftChromePresent,
|
|
66
|
+
}: CanvasControlsProps) {
|
|
67
|
+
const { zoomIn, zoomOut, fitView } = useReactFlow();
|
|
68
|
+
// Context undo/redo route through the Workflow wrapper that also asks the
|
|
69
|
+
// host to persist a position-only revert — same path the keyboard shortcuts
|
|
70
|
+
// take, so a button-driven undo of an auto-arrange sticks across reloads.
|
|
71
|
+
const { undo, redo, canUndo, canRedo } = useWorkflow();
|
|
72
|
+
const translate = useWorkflowTranslate();
|
|
73
|
+
const t = (key: string) => translate(key) as string;
|
|
74
|
+
|
|
75
|
+
// Mirror React Flow's built-in interactivity lock so our custom buttons drive
|
|
76
|
+
// the same store state the default lock button would. "Interactive" means
|
|
77
|
+
// nodes can be dragged, connected, and selected; the lock flips all three.
|
|
78
|
+
const isInteractive = useStore(
|
|
79
|
+
(s) => s.nodesDraggable || s.nodesConnectable || s.elementsSelectable
|
|
80
|
+
);
|
|
81
|
+
const store = useStoreApi();
|
|
82
|
+
const onToggleInteractivity = () =>
|
|
83
|
+
store.setState({
|
|
84
|
+
nodesDraggable: !isInteractive,
|
|
85
|
+
nodesConnectable: !isInteractive,
|
|
86
|
+
elementsSelectable: !isInteractive,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
const zoomInLabel = t('workflow_zoom_in');
|
|
90
|
+
const zoomOutLabel = t('workflow_zoom_out');
|
|
91
|
+
const fitViewLabel = t('workflow_fit_view');
|
|
92
|
+
const undoLabel = t('workflow_undo');
|
|
93
|
+
const redoLabel = t('workflow_redo');
|
|
94
|
+
const autoArrangeLabel = t('workflow_auto_arrange');
|
|
95
|
+
// The tooltip names the action a click performs: an interactive canvas locks,
|
|
96
|
+
// a locked canvas unlocks.
|
|
97
|
+
const interactivityLabel = isInteractive
|
|
98
|
+
? t('workflow_lock_canvas')
|
|
99
|
+
: t('workflow_unlock_canvas');
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<Controls
|
|
103
|
+
showZoom={false}
|
|
104
|
+
showFitView={false}
|
|
105
|
+
showInteractive={false}
|
|
106
|
+
// Dock into the top-left overlay corner. When the corner already holds
|
|
107
|
+
// chrome (the palette toggle or the error banner) the cluster tucks below
|
|
108
|
+
// it; otherwise it sits at the corner so it never floats under an empty gap.
|
|
109
|
+
position="top-left"
|
|
110
|
+
style={{
|
|
111
|
+
top: topLeftChromePresent ? TOP_LEFT_OVERLAY_CLEARANCE : CORNER_INSET,
|
|
112
|
+
left: CORNER_INSET,
|
|
113
|
+
margin: 0,
|
|
114
|
+
}}
|
|
115
|
+
>
|
|
116
|
+
<Tooltip content={zoomInLabel} placement="right">
|
|
117
|
+
<ControlButton onClick={() => zoomIn()} aria-label={zoomInLabel}>
|
|
118
|
+
<Plus />
|
|
119
|
+
</ControlButton>
|
|
120
|
+
</Tooltip>
|
|
121
|
+
<Tooltip content={zoomOutLabel} placement="right">
|
|
122
|
+
<ControlButton onClick={() => zoomOut()} aria-label={zoomOutLabel}>
|
|
123
|
+
<Minus />
|
|
124
|
+
</ControlButton>
|
|
125
|
+
</Tooltip>
|
|
126
|
+
<Tooltip content={fitViewLabel} placement="right">
|
|
127
|
+
<ControlButton
|
|
128
|
+
onClick={() => fitView(fitViewOptions)}
|
|
129
|
+
aria-label={fitViewLabel}
|
|
130
|
+
>
|
|
131
|
+
<TbMaximize />
|
|
132
|
+
</ControlButton>
|
|
133
|
+
</Tooltip>
|
|
134
|
+
{/* Undo/redo, the interactivity lock and auto-arrange are authoring
|
|
135
|
+
controls — meaningless in the read-only preview, so all are hidden
|
|
136
|
+
there. */}
|
|
137
|
+
{readOnly ? null : (
|
|
138
|
+
<Tooltip content={undoLabel} placement="right">
|
|
139
|
+
<ControlButton
|
|
140
|
+
onClick={undo}
|
|
141
|
+
disabled={!canUndo}
|
|
142
|
+
aria-label={undoLabel}
|
|
143
|
+
>
|
|
144
|
+
<TbArrowBackUp />
|
|
145
|
+
</ControlButton>
|
|
146
|
+
</Tooltip>
|
|
147
|
+
)}
|
|
148
|
+
{readOnly ? null : (
|
|
149
|
+
<Tooltip content={redoLabel} placement="right">
|
|
150
|
+
<ControlButton
|
|
151
|
+
onClick={redo}
|
|
152
|
+
disabled={!canRedo}
|
|
153
|
+
aria-label={redoLabel}
|
|
154
|
+
>
|
|
155
|
+
<TbArrowForwardUp />
|
|
156
|
+
</ControlButton>
|
|
157
|
+
</Tooltip>
|
|
158
|
+
)}
|
|
159
|
+
{readOnly ? null : (
|
|
160
|
+
<Tooltip content={interactivityLabel} placement="right">
|
|
161
|
+
<ControlButton
|
|
162
|
+
onClick={onToggleInteractivity}
|
|
163
|
+
aria-label={interactivityLabel}
|
|
164
|
+
>
|
|
165
|
+
{isInteractive ? <TbLockOpen /> : <TbLock />}
|
|
166
|
+
</ControlButton>
|
|
167
|
+
</Tooltip>
|
|
168
|
+
)}
|
|
169
|
+
{readOnly ? null : (
|
|
170
|
+
<Tooltip content={autoArrangeLabel} placement="right">
|
|
171
|
+
<ControlButton onClick={onAutoArrange} aria-label={autoArrangeLabel}>
|
|
172
|
+
<TbSitemap />
|
|
173
|
+
</ControlButton>
|
|
174
|
+
</Tooltip>
|
|
175
|
+
)}
|
|
176
|
+
</Controls>
|
|
177
|
+
);
|
|
178
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
type MouseEvent,
|
|
5
|
+
useCallback,
|
|
6
|
+
useEffect,
|
|
7
|
+
useMemo,
|
|
8
|
+
useRef,
|
|
9
|
+
useState,
|
|
10
|
+
} from 'react';
|
|
11
|
+
import { Box } from '@chakra-ui/react';
|
|
12
|
+
import {
|
|
13
|
+
BaseEdge,
|
|
14
|
+
EdgeLabelRenderer,
|
|
15
|
+
type EdgeProps,
|
|
16
|
+
getSmoothStepPath,
|
|
17
|
+
} from '@xyflow/react';
|
|
18
|
+
|
|
19
|
+
import { TbX } from '@/components/Icon';
|
|
20
|
+
import { IconButton } from '@/components/IconButton';
|
|
21
|
+
|
|
22
|
+
import { useWorkflow, useWorkflowTranslate } from '../../WorkflowContext';
|
|
23
|
+
import { findPort } from '../EdgeInspector';
|
|
24
|
+
import { BranchLabelBadge } from './BranchLabelBadge';
|
|
25
|
+
import { getEdgeLabelVariant } from './edgeLabelVariant';
|
|
26
|
+
|
|
27
|
+
// Grace period on pointer-leave so moving from the SVG edge to the portaled
|
|
28
|
+
// label (or the delete button beside it) doesn't flicker the affordance off in
|
|
29
|
+
// the gap between layers.
|
|
30
|
+
const HOVER_LEAVE_GRACE_MS = 80;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Edge with a logician-ui `Badge` label that rides the connection midpoint.
|
|
34
|
+
* Clicking the label selects the edge (opens its inspector); hovering the edge
|
|
35
|
+
* reveals a delete button BESIDE the label (not replacing it), so the label
|
|
36
|
+
* stays clickable. Labels use `EdgeLabelRenderer` rather than React Flow's SVG
|
|
37
|
+
* `labelStyle` so they inherit the design system's Badge styling.
|
|
38
|
+
*/
|
|
39
|
+
export function LabeledEdge({
|
|
40
|
+
id,
|
|
41
|
+
source,
|
|
42
|
+
sourceHandleId,
|
|
43
|
+
sourceX,
|
|
44
|
+
sourceY,
|
|
45
|
+
targetX,
|
|
46
|
+
targetY,
|
|
47
|
+
sourcePosition,
|
|
48
|
+
targetPosition,
|
|
49
|
+
label,
|
|
50
|
+
markerEnd,
|
|
51
|
+
style,
|
|
52
|
+
}: EdgeProps) {
|
|
53
|
+
const {
|
|
54
|
+
graph,
|
|
55
|
+
getNodeType,
|
|
56
|
+
dispatch,
|
|
57
|
+
readOnly,
|
|
58
|
+
editor: { selectedEdgeId },
|
|
59
|
+
setSelectedNodeId,
|
|
60
|
+
setSelectedEdgeId,
|
|
61
|
+
setDrawerTarget,
|
|
62
|
+
revealInspector,
|
|
63
|
+
} = useWorkflow();
|
|
64
|
+
const translate = useWorkflowTranslate();
|
|
65
|
+
|
|
66
|
+
const [hovered, setHovered] = useState(false);
|
|
67
|
+
const leaveTimer = useRef<ReturnType<typeof setTimeout> | undefined>(
|
|
68
|
+
undefined
|
|
69
|
+
);
|
|
70
|
+
const onEnter = useCallback(() => {
|
|
71
|
+
if (leaveTimer.current) clearTimeout(leaveTimer.current);
|
|
72
|
+
setHovered(true);
|
|
73
|
+
}, []);
|
|
74
|
+
const onLeave = useCallback(() => {
|
|
75
|
+
leaveTimer.current = setTimeout(
|
|
76
|
+
() => setHovered(false),
|
|
77
|
+
HOVER_LEAVE_GRACE_MS
|
|
78
|
+
);
|
|
79
|
+
}, []);
|
|
80
|
+
useEffect(
|
|
81
|
+
() => () => {
|
|
82
|
+
if (leaveTimer.current) clearTimeout(leaveTimer.current);
|
|
83
|
+
},
|
|
84
|
+
[]
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
// Clicking the label selects the edge and opens its inspector — mirrors the
|
|
88
|
+
// canvas `onEdgeClick` so the label is just another way in. Routes through
|
|
89
|
+
// revealInspector so a label click in test mode also restores the parked
|
|
90
|
+
// inspector (the badge stops propagation, so it never reaches onEdgeClick).
|
|
91
|
+
const onSelect = useCallback(
|
|
92
|
+
(e: MouseEvent) => {
|
|
93
|
+
e.stopPropagation();
|
|
94
|
+
setSelectedNodeId(null);
|
|
95
|
+
setSelectedEdgeId(id);
|
|
96
|
+
revealInspector({ type: 'edge', id });
|
|
97
|
+
},
|
|
98
|
+
[id, setSelectedNodeId, setSelectedEdgeId, revealInspector]
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const onDelete = useCallback(
|
|
102
|
+
(e: MouseEvent) => {
|
|
103
|
+
// Don't let the click fall through to edge/pane selection handlers.
|
|
104
|
+
e.stopPropagation();
|
|
105
|
+
dispatch({ type: 'deleteEdge', id });
|
|
106
|
+
// Mirror the keyboard-delete cleanup so the inspector doesn't linger on a
|
|
107
|
+
// now-removed edge.
|
|
108
|
+
if (selectedEdgeId === id) {
|
|
109
|
+
setSelectedEdgeId(null);
|
|
110
|
+
setDrawerTarget(null);
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
[dispatch, id, selectedEdgeId, setSelectedEdgeId, setDrawerTarget]
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
const [edgePath, labelX, labelY] = getSmoothStepPath({
|
|
117
|
+
sourceX,
|
|
118
|
+
sourceY,
|
|
119
|
+
sourcePosition,
|
|
120
|
+
targetX,
|
|
121
|
+
targetY,
|
|
122
|
+
targetPosition,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// The label's text: an explicit edge label wins; otherwise fall back to the
|
|
126
|
+
// source handle's label, so semantic exits (Pass / Fail / branch / Else) ride
|
|
127
|
+
// on the wire without the author having to name every edge.
|
|
128
|
+
const variant = getEdgeLabelVariant(sourceHandleId);
|
|
129
|
+
// Resolve the source handle's label once (not per render): React Flow
|
|
130
|
+
// re-renders edges constantly during pan/zoom, and `handles()` rebuilds its
|
|
131
|
+
// outputs array each call.
|
|
132
|
+
const handleLabel = useMemo(() => {
|
|
133
|
+
const sourceNode = graph.nodes.find((n) => n.id === source);
|
|
134
|
+
return findPort(
|
|
135
|
+
sourceNode,
|
|
136
|
+
sourceNode ? getNodeType(sourceNode.kind) : undefined,
|
|
137
|
+
'outputs',
|
|
138
|
+
sourceHandleId ?? undefined
|
|
139
|
+
)?.label;
|
|
140
|
+
}, [graph.nodes, source, sourceHandleId, getNodeType]);
|
|
141
|
+
const displayLabel = label ?? handleLabel;
|
|
142
|
+
|
|
143
|
+
// Delete shows only while the name badge itself is hovered (when editable) —
|
|
144
|
+
// not anywhere on the wire — so it's a deliberate, low-noise affordance. The
|
|
145
|
+
// edge inspector's delete button (see DrawerShell) covers labelless edges and
|
|
146
|
+
// anyone who'd rather delete from the sidebar.
|
|
147
|
+
const showDelete = hovered && !readOnly && Boolean(displayLabel);
|
|
148
|
+
const wrapperTransform = `translate(-50%, -50%) translate(${labelX}px, ${labelY}px)`;
|
|
149
|
+
|
|
150
|
+
return (
|
|
151
|
+
<>
|
|
152
|
+
<BaseEdge id={id} path={edgePath} markerEnd={markerEnd} style={style} />
|
|
153
|
+
{showDelete || displayLabel ? (
|
|
154
|
+
<EdgeLabelRenderer>
|
|
155
|
+
{/* The anchor is centered on the edge midpoint and wraps the badge;
|
|
156
|
+
hovering it (the badge) is what reveals delete. Delete is
|
|
157
|
+
positioned absolutely to the badge's right (out of the centered
|
|
158
|
+
flow) so revealing it doesn't shift the badge. */}
|
|
159
|
+
<Box
|
|
160
|
+
position="absolute"
|
|
161
|
+
transform={wrapperTransform}
|
|
162
|
+
pointerEvents="all"
|
|
163
|
+
display="inline-flex"
|
|
164
|
+
onMouseEnter={onEnter}
|
|
165
|
+
onMouseLeave={onLeave}
|
|
166
|
+
>
|
|
167
|
+
{displayLabel ? (
|
|
168
|
+
<BranchLabelBadge variant={variant} onClick={onSelect}>
|
|
169
|
+
{displayLabel}
|
|
170
|
+
</BranchLabelBadge>
|
|
171
|
+
) : null}
|
|
172
|
+
{showDelete ? (
|
|
173
|
+
<Box
|
|
174
|
+
position="absolute"
|
|
175
|
+
left="100%"
|
|
176
|
+
top="50%"
|
|
177
|
+
transform="translateY(-50%)"
|
|
178
|
+
pl={1}
|
|
179
|
+
>
|
|
180
|
+
<IconButton
|
|
181
|
+
aria-label={translate('workflow_edge_delete') as string}
|
|
182
|
+
onClick={onDelete}
|
|
183
|
+
size="xs"
|
|
184
|
+
variant="outline"
|
|
185
|
+
colorPalette="danger"
|
|
186
|
+
bg="bg.surface"
|
|
187
|
+
borderRadius="full"
|
|
188
|
+
>
|
|
189
|
+
<TbX boxSize="xs" />
|
|
190
|
+
</IconButton>
|
|
191
|
+
</Box>
|
|
192
|
+
) : null}
|
|
193
|
+
</Box>
|
|
194
|
+
</EdgeLabelRenderer>
|
|
195
|
+
) : null}
|
|
196
|
+
</>
|
|
197
|
+
);
|
|
198
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
|
|
3
|
+
import { getEdgeLabelVariant } from './edgeLabelVariant';
|
|
4
|
+
|
|
5
|
+
describe('getEdgeLabelVariant', () => {
|
|
6
|
+
it('maps guardrail exits to semantic pass/fail', () => {
|
|
7
|
+
expect(getEdgeLabelVariant('pass')).toBe('pass');
|
|
8
|
+
expect(getEdgeLabelVariant('fail')).toBe('fail');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it('maps the if-else fallback to else (dashed)', () => {
|
|
12
|
+
expect(getEdgeLabelVariant('else')).toBe('else');
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('maps if-else branches and classify categories to neutral keys', () => {
|
|
16
|
+
expect(getEdgeLabelVariant('branch_0')).toBe('key');
|
|
17
|
+
expect(getEdgeLabelVariant('branch_12')).toBe('key');
|
|
18
|
+
expect(getEdgeLabelVariant('cat_refund')).toBe('key');
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
it('falls back to default for plain/unknown handles', () => {
|
|
22
|
+
expect(getEdgeLabelVariant('out')).toBe('default');
|
|
23
|
+
expect(getEdgeLabelVariant(undefined)).toBe('default');
|
|
24
|
+
expect(getEdgeLabelVariant(null)).toBe('default');
|
|
25
|
+
});
|
|
26
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pill variant for an edge label, derived from the SOURCE handle it leaves.
|
|
3
|
+
*
|
|
4
|
+
* Guardrail has two exits — `pass` / `fail` — a binary safety outcome, so they
|
|
5
|
+
* read as semantic green / red. Every routing exit — If-Else branches, the
|
|
6
|
+
* If-Else `else` fallback, and Classify categories (`branch_*` / `cat_*` /
|
|
7
|
+
* `else`) — plus any free-text label reads as a neutral badge, so the branch
|
|
8
|
+
* names all look alike. `else` stays its own variant in case it ever needs
|
|
9
|
+
* distinguishing, but currently renders neutral like the other keys.
|
|
10
|
+
*/
|
|
11
|
+
export type EdgeLabelVariant = 'pass' | 'fail' | 'else' | 'key' | 'default';
|
|
12
|
+
|
|
13
|
+
export const getEdgeLabelVariant = (
|
|
14
|
+
sourceHandle?: string | null
|
|
15
|
+
): EdgeLabelVariant => {
|
|
16
|
+
if (sourceHandle === 'pass') return 'pass';
|
|
17
|
+
if (sourceHandle === 'fail') return 'fail';
|
|
18
|
+
if (sourceHandle === 'else') return 'else';
|
|
19
|
+
if (sourceHandle?.startsWith('branch_') || sourceHandle?.startsWith('cat_')) {
|
|
20
|
+
return 'key';
|
|
21
|
+
}
|
|
22
|
+
return 'default';
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Canvas } from './Canvas';
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { ReactNode, useId, useState } from 'react';
|
|
4
|
+
import { Box, HStack, Stack, type StackProps } from '@chakra-ui/react';
|
|
5
|
+
|
|
6
|
+
import { TbAlertCircle, TbChevronDown, TbChevronUp } from '@/components/Icon';
|
|
7
|
+
import { Subtext } from '@/components/Typography';
|
|
8
|
+
|
|
9
|
+
export type CollapsibleSectionProps = StackProps & {
|
|
10
|
+
label: string;
|
|
11
|
+
/** Optional initial expanded state. Defaults to true. */
|
|
12
|
+
defaultExpanded?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* When the section is collapsed AND `hasError` is true, the chevron is
|
|
15
|
+
* replaced by a danger-tinted alert glyph so users don't miss errors
|
|
16
|
+
* hidden behind a collapsed header.
|
|
17
|
+
*/
|
|
18
|
+
hasError?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Slot for a trailing icon-button in the header row (e.g. an info
|
|
21
|
+
* popover trigger). Click handler on the action is responsible for
|
|
22
|
+
* stopping propagation; otherwise the section also toggles.
|
|
23
|
+
*/
|
|
24
|
+
headerAction?: ReactNode;
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Vertical accordion section used in the node drawer. Each section header
|
|
30
|
+
* is the entire toggle target — the chevron is decorative. Collapse state
|
|
31
|
+
* is session-only per mounted instance; switching to a different node
|
|
32
|
+
* remounts and resets to defaults. The component is style-agnostic about
|
|
33
|
+
* dividers — parents control border/spacing via the spread Stack props
|
|
34
|
+
* (e.g. a `_notFirst` selector on the wrapping Stack).
|
|
35
|
+
*/
|
|
36
|
+
export function CollapsibleSection({
|
|
37
|
+
label,
|
|
38
|
+
defaultExpanded = true,
|
|
39
|
+
hasError = false,
|
|
40
|
+
headerAction,
|
|
41
|
+
children,
|
|
42
|
+
...rest
|
|
43
|
+
}: CollapsibleSectionProps) {
|
|
44
|
+
const [expanded, setExpanded] = useState(defaultExpanded);
|
|
45
|
+
const contentId = useId();
|
|
46
|
+
const showErrorGlyph = !expanded && hasError;
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<Stack gap={0} {...rest}>
|
|
50
|
+
<Box
|
|
51
|
+
as="button"
|
|
52
|
+
aria-expanded={expanded}
|
|
53
|
+
aria-controls={contentId}
|
|
54
|
+
onClick={() => setExpanded((e) => !e)}
|
|
55
|
+
display="flex"
|
|
56
|
+
justifyContent="space-between"
|
|
57
|
+
alignItems="center"
|
|
58
|
+
w="100%"
|
|
59
|
+
gap={2}
|
|
60
|
+
px={3.5}
|
|
61
|
+
py={3.5}
|
|
62
|
+
cursor="pointer"
|
|
63
|
+
bg="transparent"
|
|
64
|
+
border="none"
|
|
65
|
+
textAlign="left"
|
|
66
|
+
_hover={{ bg: 'slate.50' }}
|
|
67
|
+
>
|
|
68
|
+
<Subtext
|
|
69
|
+
fontWeight="bold"
|
|
70
|
+
color="slate.900"
|
|
71
|
+
textTransform="uppercase"
|
|
72
|
+
letterSpacing="wider"
|
|
73
|
+
>
|
|
74
|
+
{label}
|
|
75
|
+
</Subtext>
|
|
76
|
+
<HStack gap={1.5} onClick={(e) => e.stopPropagation()}>
|
|
77
|
+
{headerAction}
|
|
78
|
+
<Box color="slate.900" display="flex" alignItems="center">
|
|
79
|
+
{showErrorGlyph ? (
|
|
80
|
+
<TbAlertCircle boxSize="xs" color="danger.main" />
|
|
81
|
+
) : expanded ? (
|
|
82
|
+
<TbChevronUp boxSize="xs" />
|
|
83
|
+
) : (
|
|
84
|
+
<TbChevronDown boxSize="xs" />
|
|
85
|
+
)}
|
|
86
|
+
</Box>
|
|
87
|
+
</HStack>
|
|
88
|
+
</Box>
|
|
89
|
+
{expanded ? (
|
|
90
|
+
<Box id={contentId} px={3.5} pb={4} pt={1}>
|
|
91
|
+
{children}
|
|
92
|
+
</Box>
|
|
93
|
+
) : null}
|
|
94
|
+
</Stack>
|
|
95
|
+
);
|
|
96
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type ReactNode } from 'react';
|
|
4
|
+
import { HStack } from '@chakra-ui/react';
|
|
5
|
+
|
|
6
|
+
import { RxDotsHorizontal, TbX } from '@/components/Icon';
|
|
7
|
+
import { IconButton } from '@/components/IconButton';
|
|
8
|
+
import { Menu } from '@/components/Menu';
|
|
9
|
+
import { Subtext, Text } from '@/components/Typography';
|
|
10
|
+
|
|
11
|
+
import { useWorkflowTranslate } from '../../WorkflowContext';
|
|
12
|
+
|
|
13
|
+
interface DrawerHeaderProps {
|
|
14
|
+
/**
|
|
15
|
+
* Title text shown semibold on the left. Node drawers render an icon
|
|
16
|
+
* cluster ahead of it via `icon`; edge drawers render only the text.
|
|
17
|
+
*/
|
|
18
|
+
title: string;
|
|
19
|
+
/**
|
|
20
|
+
* Muted text trailing the title. Node drawers pass the node-type label here
|
|
21
|
+
* when the title is an instance name (e.g. "고객 응대 · Agent") so the kind
|
|
22
|
+
* stays identifiable next to author-chosen names.
|
|
23
|
+
*/
|
|
24
|
+
subtitle?: string;
|
|
25
|
+
/** Optional leading icon cluster (node drawers pass the node-type icon). */
|
|
26
|
+
icon?: ReactNode;
|
|
27
|
+
/**
|
|
28
|
+
* Clamp the title to a single line (edge connection titles can be long).
|
|
29
|
+
* Node labels are short and render unclamped.
|
|
30
|
+
*/
|
|
31
|
+
lineClampTitle?: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Overflow-menu contents (pre-built `Menu.Item` nodes from the caller).
|
|
34
|
+
* When omitted, no overflow menu renders at all — this preserves the
|
|
35
|
+
* pinned-node behavior of showing only the close button.
|
|
36
|
+
*/
|
|
37
|
+
menuItems?: ReactNode;
|
|
38
|
+
/** Close button handler. */
|
|
39
|
+
onClose: () => void;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Shared inspector-drawer header: a fixed-height bar with a left title cluster
|
|
44
|
+
* and a right action cluster (optional overflow `Menu` + a close button). Stays
|
|
45
|
+
* domain-free — each drawer passes its own title bits and `Menu.Item`s.
|
|
46
|
+
*/
|
|
47
|
+
export function DrawerHeader({
|
|
48
|
+
title,
|
|
49
|
+
subtitle,
|
|
50
|
+
icon,
|
|
51
|
+
lineClampTitle,
|
|
52
|
+
menuItems,
|
|
53
|
+
onClose,
|
|
54
|
+
}: DrawerHeaderProps) {
|
|
55
|
+
const translate = useWorkflowTranslate();
|
|
56
|
+
return (
|
|
57
|
+
<HStack
|
|
58
|
+
justify="space-between"
|
|
59
|
+
align="center"
|
|
60
|
+
px={4}
|
|
61
|
+
py={3}
|
|
62
|
+
borderBottom="1px solid"
|
|
63
|
+
borderColor="slate.200"
|
|
64
|
+
>
|
|
65
|
+
<HStack gap={2} minW={0} flex="1">
|
|
66
|
+
{icon}
|
|
67
|
+
<Text fontWeight="semibold" lineClamp={lineClampTitle ? 1 : undefined}>
|
|
68
|
+
{title}
|
|
69
|
+
</Text>
|
|
70
|
+
{subtitle ? (
|
|
71
|
+
<Subtext color="slate.700" flexShrink={0}>
|
|
72
|
+
{subtitle}
|
|
73
|
+
</Subtext>
|
|
74
|
+
) : null}
|
|
75
|
+
</HStack>
|
|
76
|
+
<HStack gap={0.5}>
|
|
77
|
+
{menuItems ? (
|
|
78
|
+
<Menu>
|
|
79
|
+
<Menu.Trigger asChild>
|
|
80
|
+
<IconButton
|
|
81
|
+
aria-label={translate('workflow_node_overflow_label') as string}
|
|
82
|
+
size="xs"
|
|
83
|
+
variant="ghost"
|
|
84
|
+
colorPalette="neutral"
|
|
85
|
+
>
|
|
86
|
+
<RxDotsHorizontal boxSize="xs" />
|
|
87
|
+
</IconButton>
|
|
88
|
+
</Menu.Trigger>
|
|
89
|
+
<Menu.List zIndex="popover">{menuItems}</Menu.List>
|
|
90
|
+
</Menu>
|
|
91
|
+
) : null}
|
|
92
|
+
<IconButton
|
|
93
|
+
aria-label={translate('workflow_node_close') as string}
|
|
94
|
+
size="xs"
|
|
95
|
+
variant="ghost"
|
|
96
|
+
colorPalette="neutral"
|
|
97
|
+
onClick={onClose}
|
|
98
|
+
>
|
|
99
|
+
<TbX boxSize="xs" aria-hidden />
|
|
100
|
+
</IconButton>
|
|
101
|
+
</HStack>
|
|
102
|
+
</HStack>
|
|
103
|
+
);
|
|
104
|
+
}
|