CoolFace
Apppublic

admin08077/Githubgemini

sourceHugging Faceotherupdated 10mo agoView on Hugging Face
0likes
LogicFlowBuilder-D5MTdrqs.js.map1 linesDownload Raw Back to assets
1{"version":3,"file":"LogicFlowBuilder-D5MTdrqs.js","sources":["../../components/features/LogicFlowBuilder.tsx"],"sourcesContent":["import React, { useState, useRef, useMemo, useCallback } from 'react';\nimport { ALL_FEATURES } from './index.ts';\nimport { FEATURE_TAXONOMY } from '../../services/taxonomyService.ts';\nimport { generatePipelineCode } from '../../services/aiService.ts';\nimport type { Feature } from '../../types.ts';\nimport { MapIcon, SparklesIcon, XMarkIcon } from '../icons.tsx';\nimport { LoadingSpinner, MarkdownRenderer } from '../shared/index.tsx';\n\ninterface Node {\n    id: number;\n    featureId: string;\n    x: number;\n    y: number;\n}\n\ninterface Link {\n    from: number;\n    to: number;\n}\n\nconst featuresMap = new Map(ALL_FEATURES.map(f => [f.id, f]));\nconst taxonomyMap = new Map(FEATURE_TAXONOMY.map(f => [f.id, f]));\n\nconst FeaturePaletteItem: React.FC<{ feature: Feature, onDragStart: (e: React.DragEvent, featureId: string) => void }> = ({ feature, onDragStart }) => (\n    <div\n        draggable\n        onDragStart={e => onDragStart(e, feature.id)}\n        className=\"p-3 rounded-md bg-gray-50 border border-border flex items-center gap-3 cursor-grab hover:bg-gray-100 transition-colors\"\n    >\n        <div className=\"text-primary flex-shrink-0\">{feature.icon}</div>\n        <div>\n            <h4 className=\"font-bold text-sm text-text-primary\">{feature.name}</h4>\n            <p className=\"text-xs text-text-secondary\">{feature.category}</p>\n        </div>\n    </div>\n);\n\nconst NodeComponent: React.FC<{\n    node: Node;\n    feature: Feature;\n    onMouseDown: (e: React.MouseEvent, id: number) => void;\n    onLinkStart: (e: React.MouseEvent, id: number) => void;\n    onLinkEnd: (e: React.MouseEvent, id: number) => void;\n}> = ({ node, feature, onMouseDown, onLinkStart, onLinkEnd }) => (\n    <div\n        className=\"absolute w-52 bg-surface rounded-lg shadow-md border-2 border-border cursor-grab active:cursor-grabbing flex flex-col\"\n        style={{ left: node.x, top: node.y, transform: 'translate(-50%, -50%)' }}\n        onMouseDown={e => onMouseDown(e, node.id)}\n        onMouseUp={e => onLinkEnd(e, node.id)}\n    >\n        <div className=\"p-2 flex items-center gap-2 border-b border-border\">\n            <div className=\"w-5 h-5 text-primary\">{feature.icon}</div>\n            <span className=\"text-sm font-semibold truncate text-text-primary\">{feature.name}</span>\n        </div>\n        <div className=\"relative p-3 text-xs text-text-secondary min-h-[40px] flex items-center justify-center\">\n            Workflow Node\n            <div\n                onMouseDown={e => onLinkStart(e, node.id)}\n                className=\"absolute right-[-9px] top-1/2 -translate-y-1/2 w-4 h-4 bg-primary rounded-full border-2 border-surface cursor-crosshair hover:scale-125 transition-transform\"\n                title=\"Drag to connect\"\n            />\n        </div>\n    </div>\n);\n\nconst SVGGrid: React.FC = React.memo(() => (\n    <svg width=\"100%\" height=\"100%\" className=\"absolute inset-0\">\n        <defs>\n            <pattern id=\"smallGrid\" width=\"10\" height=\"10\" patternUnits=\"userSpaceOnUse\">\n                <path d=\"M 10 0 L 0 0 0 10\" fill=\"none\" stroke=\"rgba(0, 0, 0, 0.05)\" strokeWidth=\"0.5\"/>\n            </pattern>\n            <pattern id=\"grid\" width=\"50\" height=\"50\" patternUnits=\"userSpaceOnUse\">\n                <rect width=\"50\" height=\"50\" fill=\"url(#smallGrid)\"/>\n                <path d=\"M 50 0 L 0 0 0 50\" fill=\"none\" stroke=\"rgba(0, 0, 0, 0.1)\" strokeWidth=\"1\"/>\n            </pattern>\n        </defs>\n        <rect width=\"100%\" height=\"100%\" fill=\"url(#grid)\" />\n    </svg>\n));\n\nexport const LogicFlowBuilder: React.FC = () => {\n    const [nodes, setNodes] = useState<Node[]>([]);\n    const [links, setLinks] = useState<Link[]>([]);\n    const [draggingNode, setDraggingNode] = useState<{ id: number; offsetX: number; offsetY: number } | null>(null);\n    const [linking, setLinking] = useState<{ from: number; fromPos: { x: number; y: number }; toPos: { x: number; y: number } } | null>(null);\n    const [generatedCode, setGeneratedCode] = useState('');\n    const [isGenerating, setIsGenerating] = useState(false);\n    const canvasRef = useRef<HTMLDivElement>(null);\n    \n    const handleGenerateCode = useCallback(async () => {\n        setIsGenerating(true);\n        setGeneratedCode('');\n        \n        const sortedNodeIds: number[] = [];\n        const inDegree = new Map<number, number>();\n        nodes.forEach(node => inDegree.set(node.id, 0));\n        links.forEach(link => inDegree.set(link.to, (inDegree.get(link.to) || 0) + 1));\n        \n        const queue = nodes.filter(node => inDegree.get(node.id) === 0).map(n => n.id);\n        \n        while(queue.length > 0) {\n            const u = queue.shift()!;\n            sortedNodeIds.push(u);\n            links.filter(l => l.from === u).forEach(l => {\n                inDegree.set(l.to, (inDegree.get(l.to) || 0) - 1);\n                if(inDegree.get(l.to) === 0) queue.push(l.to);\n            })\n        }\n        \n        const flowDescription = sortedNodeIds.map((id, index) => {\n            const node = nodes.find(n => n.id === id)!;\n            const featureInfo = taxonomyMap.get(node.featureId);\n            return `Step ${index + 1}: Execute the '${featureInfo?.name}' tool. Description: ${featureInfo?.description}. Inputs: ${featureInfo?.inputs}.`;\n        }).join('\\n');\n\n        try {\n            const code = await generatePipelineCode(flowDescription);\n            setGeneratedCode(code);\n        } catch (e) {\n            setGeneratedCode(`// Error generating code: ${e instanceof Error ? e.message : 'Unknown error'}`);\n        } finally {\n            setIsGenerating(false);\n        }\n\n    }, [nodes, links]);\n\n    const handleDragStart = (e: React.DragEvent, featureId: string) => {\n        e.dataTransfer.setData('application/json', JSON.stringify({ featureId }));\n    };\n\n    const handleDrop = (e: React.DragEvent) => {\n        e.preventDefault();\n        if (!canvasRef.current) return;\n        const { featureId } = JSON.parse(e.dataTransfer.getData('application/json'));\n        const canvasRect = canvasRef.current.getBoundingClientRect();\n        const newNode: Node = {\n            id: Date.now(),\n            featureId,\n            x: e.clientX - canvasRect.left,\n            y: e.clientY - canvasRect.top,\n        };\n        setNodes(prev => [...prev, newNode]);\n    };\n\n    const handleNodeMouseDown = (e: React.MouseEvent, id: number) => {\n        const node = nodes.find(n => n.id === id);\n        if (!node || (e.target as HTMLElement).title === 'Drag to connect') return;\n        const canvasRect = canvasRef.current!.getBoundingClientRect();\n        setDraggingNode({ id, offsetX: e.clientX - canvasRect.left - node.x, offsetY: e.clientY - canvasRect.top - node.y });\n    };\n\n    const handleCanvasMouseMove = (e: React.MouseEvent) => {\n        if (!canvasRef.current) return;\n        const canvasRect = canvasRef.current.getBoundingClientRect();\n        const mouseX = e.clientX - canvasRect.left;\n        const mouseY = e.clientY - canvasRect.top;\n\n        if (draggingNode) {\n            setNodes(nodes.map(n => n.id === draggingNode.id ? { ...n, x: mouseX - draggingNode.offsetX, y: mouseY - draggingNode.offsetY } : n));\n        }\n        if (linking) {\n            setLinking({ ...linking, toPos: { x: mouseX, y: mouseY } });\n        }\n    };\n\n    const handleCanvasMouseUp = () => {\n        setDraggingNode(null);\n        setLinking(null);\n    };\n\n    const handleLinkStart = (e: React.MouseEvent, id: number) => {\n        e.stopPropagation();\n        const fromNode = nodes.find(n => n.id === id);\n        if (!fromNode) return;\n        setLinking({ from: id, fromPos: { x: fromNode.x, y: fromNode.y }, toPos: { x: fromNode.x, y: fromNode.y } });\n    };\n\n    const handleLinkEnd = (e: React.MouseEvent, id: number) => {\n        e.stopPropagation();\n        if (linking && linking.from !== id) {\n            setLinks(prev => [...prev, { from: linking.from, to: id }]);\n        }\n        setLinking(null);\n    };\n\n    const nodePositions = useMemo(() => new Map(nodes.map(n => [n.id, { x: n.x, y: n.y }])), [nodes]);\n\n    return (\n        <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n            <header className=\"mb-6 flex justify-between items-start\">\n                <div>\n                    <h1 className=\"text-3xl font-bold flex items-center\"><MapIcon /><span className=\"ml-3\">Logic Flow Builder</span></h1>\n                    <p className=\"text-text-secondary mt-1\">Visually build application logic flows and generate pipeline code.</p>\n                </div>\n                <button onClick={handleGenerateCode} disabled={isGenerating || nodes.length === 0} className=\"btn-primary flex items-center gap-2 px-4 py-2\">\n                    <SparklesIcon /> {isGenerating ? 'Generating...' : 'Generate Code'}\n                </button>\n            </header>\n            <div className=\"flex-grow flex gap-6 min-h-0\">\n                <aside className=\"w-72 flex-shrink-0 bg-surface border border-border p-4 rounded-lg flex flex-col\">\n                    <h3 className=\"font-bold mb-3 text-lg\">Features</h3>\n                    <div className=\"flex-grow overflow-y-auto space-y-3 pr-2\">\n                        {ALL_FEATURES.map(feature => <FeaturePaletteItem key={feature.id} feature={feature} onDragStart={handleDragStart} />)}\n                    </div>\n                </aside>\n                <main\n                    ref={canvasRef}\n                    className=\"flex-grow relative bg-background border-2 border-dashed border-border rounded-lg overflow-hidden\"\n                    onDrop={handleDrop}\n                    onDragOver={e => e.preventDefault()}\n                    onMouseMove={handleCanvasMouseMove}\n                    onMouseUp={handleCanvasMouseUp}\n                    onMouseLeave={handleCanvasMouseUp}\n                >\n                    <SVGGrid />\n                    <svg width=\"100%\" height=\"100%\" className=\"absolute inset-0 pointer-events-none\">\n                        {links.map((link, i) => {\n                            const fromNode = nodePositions.get(link.from);\n                            const toNode = nodePositions.get(link.to);\n                            if (!fromNode || !toNode) return null;\n                            return <line key={i} x1={fromNode.x} y1={fromNode.y} x2={toNode.x} y2={toNode.y} stroke=\"var(--color-primary)\" strokeWidth=\"2\" markerEnd=\"url(#arrow)\" />;\n                        })}\n                        {linking && <line x1={linking.fromPos.x} y1={linking.fromPos.y} x2={linking.toPos.x} y2={linking.toPos.y} stroke=\"var(--color-primary)\" strokeWidth=\"2\" strokeDasharray=\"5,5\" />}\n                        <defs><marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\"><path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"var(--color-primary)\" /></marker></defs>\n                    </svg>\n                    {nodes.map(node => {\n                        const feature = featuresMap.get(node.featureId);\n                        return feature ? <NodeComponent key={node.id} node={node} feature={feature} onMouseDown={handleNodeMouseDown} onLinkStart={handleLinkStart} onLinkEnd={handleLinkEnd} /> : null;\n                    })}\n                </main>\n            </div>\n            {(isGenerating || generatedCode) && (\n                <div className=\"fixed inset-0 bg-gray-900/80 backdrop-blur-sm z-50 flex items-center justify-center\" onClick={() => setGeneratedCode('')}>\n                    <div className=\"w-full max-w-3xl h-3/4 bg-surface border border-border rounded-lg shadow-2xl p-6 flex flex-col\" onClick={e => e.stopPropagation()}>\n                        <div className=\"flex justify-between items-center mb-4\">\n                            <h2 className=\"text-xl font-bold\">Generated Pipeline Code</h2>\n                            <button onClick={() => setGeneratedCode('')}><XMarkIcon/></button>\n                        </div>\n                        <div className=\"flex-grow bg-background border border-border rounded-md overflow-auto\">\n                            {isGenerating && !generatedCode ? <div className=\"flex justify-center items-center h-full\"><LoadingSpinner /></div> : <MarkdownRenderer content={'```javascript\\n' + generatedCode + '\\n```'} />}\n                        </div>\n                    </div>\n                </div>\n            )}\n        </div>\n    );\n};"],"names":["featuresMap","ALL_FEATURES","f","taxonomyMap","FEATURE_TAXONOMY","FeaturePaletteItem","feature","onDragStart","jsxs","e","jsx","NodeComponent","node","onMouseDown","onLinkStart","onLinkEnd","SVGGrid","React","LogicFlowBuilder","nodes","setNodes","useState","links","setLinks","draggingNode","setDraggingNode","linking","setLinking","generatedCode","setGeneratedCode","isGenerating","setIsGenerating","canvasRef","useRef","handleGenerateCode","useCallback","sortedNodeIds","inDegree","link","queue","n","u","l","flowDescription","id","index","featureInfo","code","generatePipelineCode","handleDragStart","featureId","handleDrop","canvasRect","newNode","prev","handleNodeMouseDown","handleCanvasMouseMove","mouseX","mouseY","handleCanvasMouseUp","handleLinkStart","fromNode","handleLinkEnd","nodePositions","useMemo","MapIcon","SparklesIcon","i","toNode","XMarkIcon","LoadingSpinner","MarkdownRenderer"],"mappings":"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"}