(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([typeof document === "object" ? document.currentScript : undefined, "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "default", ()=>__TURBOPACK__default__export__ ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$types$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/lib/types.ts [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/plus.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/book-open.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/message-circle.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/zap.js [app-client] (ecmascript) "); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$palette$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Palette$3e$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/palette.js [app-client] (ecmascript) "); ; var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(); 'use client'; ; ; ; const CARD_WIDTH = 260; const CARD_HEIGHT = 220; const INITIAL_COLORS = [ '#ffffff', '#dbeafe', '#dcfce7', '#fef9c3', '#fee2e2', '#f3e8ff' ]; const renderTextWithLinks = (text, entities, onNavigate)=>{ if (!text) return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { className: "text-slate-400 italic", children: "Description..." }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 28, columnNumber: 23 }, ("TURBOPACK compile-time value", void 0)); const parts = [ text ]; entities.forEach((entity)=>{ if (!entity.name) return; const regex = new RegExp(`(${entity.name})`, 'gi'); for(let i = 0; i < parts.length; i++){ const part = parts[i]; if (typeof part === 'string') { const split = part.split(regex); if (split.length > 1) { const newParts = split.map((s, idx)=>{ if (s.toLowerCase() === entity.name.toLowerCase()) { return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", { onClick: (e)=>{ e.stopPropagation(); onNavigate(entity.id); }, className: "text-indigo-600 hover:text-indigo-800 underline decoration-indigo-300 hover:decoration-indigo-600 cursor-pointer font-medium bg-indigo-50 px-0.5 rounded transition-all", title: `Voir la fiche de ${entity.name}`, children: s }, `${entity.id}-${idx}`, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 44, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)); } return s; }); parts.splice(i, 1, ...newParts); i += newParts.length - 1; } } } }); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], { children: parts }, void 0, false); }; const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].memo(_s(({ node, isSelected, isEditing, activeColorPickerId, entities, savedColors, onMouseDown, onMouseUp, onStartConnection, onUpdate, onSetEditing, onToggleColorPicker, onSaveColor, onNavigateToEntity, onInputFocus, onInputCheckAutocomplete, onKeyDownInInput })=>{ _s(); const [showTypePicker, setShowTypePicker] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); const richDescription = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({ "StoryNode.useMemo[richDescription]": ()=>{ return renderTextWithLinks(node.description, entities, onNavigateToEntity); } }["StoryNode.useMemo[richDescription]"], [ node.description, entities, onNavigateToEntity ]); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: `absolute flex flex-col rounded-xl shadow-sm border transition-all z-10 group ${isSelected ? 'ring-2 ring-indigo-500 shadow-lg scale-[1.01]' : 'border-slate-200 hover:shadow-md'} `, style: { transform: `translate3d(${node.x}px, ${node.y}px, 0)`, width: CARD_WIDTH, height: CARD_HEIGHT, backgroundColor: node.color || '#ffffff', willChange: 'transform' }, onMouseDown: (e)=>onMouseDown(e, node.id), onMouseUp: (e)=>onMouseUp(e, node.id), onMouseLeave: ()=>setShowTypePicker(false), children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "h-1.5 rounded-t-xl bg-black/5 w-full cursor-grab active:cursor-grabbing" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 117, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 px-4 pb-4 pt-2 flex flex-col overflow-hidden relative", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex justify-between items-start mb-2 relative", children: [ isEditing ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { className: "font-bold text-slate-800 bg-white/50 border-b border-indigo-400 outline-none w-full mr-6 text-sm p-1 rounded", value: node.title, onChange: (e)=>onUpdate(node.id, { title: e.target.value }), onFocus: onInputFocus, autoFocus: true }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 122, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "font-bold text-slate-800 cursor-text truncate mr-6 text-sm", onDoubleClick: ()=>onSetEditing(node.id), children: node.title }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 130, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: (e)=>{ e.stopPropagation(); onToggleColorPicker(node.id); }, className: "p-1 rounded-full hover:bg-black/10 text-slate-400 hover:text-indigo-600 transition-colors absolute right-0 top-0", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$palette$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Palette$3e$__["Palette"], { size: 14 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 142, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 138, columnNumber: 21 }, ("TURBOPACK compile-time value", void 0)), activeColorPickerId === node.id && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute right-[-10px] top-8 bg-white rounded-lg shadow-xl border border-slate-200 p-3 z-50 w-48 animate-in fade-in zoom-in-95 duration-100 cursor-default", onMouseDown: (e)=>e.stopPropagation(), children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "grid grid-cols-4 gap-2 mb-3", children: savedColors.map((color)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>onUpdate(node.id, { color }), className: `w-8 h-8 rounded-full border border-slate-200 shadow-sm transition-transform hover:scale-110 ${node.color === color ? 'ring-2 ring-offset-1 ring-indigo-400' : ''}`, style: { backgroundColor: color } }, color, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 149, columnNumber: 37 }, ("TURBOPACK compile-time value", void 0))) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 147, columnNumber: 29 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-2 pt-2 border-t border-slate-100", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "relative w-8 h-8 rounded-full overflow-hidden border border-slate-300 shadow-inner", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("input", { type: "color", className: "absolute -top-2 -left-2 w-16 h-16 cursor-pointer", value: node.color || '#ffffff', onChange: (e)=>onUpdate(node.id, { color: e.target.value }) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 159, columnNumber: 37 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 158, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: ()=>onSaveColor(node.color || '#ffffff'), className: "text-[10px] font-bold text-indigo-600 hover:text-indigo-800 hover:underline flex-1 text-right", children: "+ SAUVER" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 166, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 157, columnNumber: 29 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 146, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 120, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex-1 overflow-y-auto custom-scrollbar relative mb-4", children: isEditing ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("textarea", { className: `w-full h-full bg-white/70 resize-none outline-none text-xs leading-relaxed p-2 rounded border border-indigo-100 shadow-inner ${node.type === 'dialogue' ? 'font-mono text-slate-700' : 'text-slate-600'}`, placeholder: node.type === 'dialogue' ? "Héros: Salut !\nGuide: ..." : "Résumé de l'intrigue...", value: node.description, onChange: (e)=>onInputCheckAutocomplete(e, node.id, 'description'), onKeyDown: (e)=>onKeyDownInInput(e, node.id), onFocus: onInputFocus, onBlur: ()=>onSetEditing(null) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 179, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: `w-full h-full text-xs text-slate-600 leading-relaxed p-1 cursor-text whitespace-pre-wrap ${node.type === 'dialogue' ? 'font-mono bg-indigo-50/30 rounded pl-2 border-l-2 border-indigo-200' : ''}`, onClick: ()=>onSetEditing(node.id), children: richDescription }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 189, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 177, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute bottom-2 right-2 z-20", children: [ showTypePicker && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "absolute bottom-full mb-2 right-0 bg-white shadow-xl border border-slate-200 rounded-lg p-1 flex gap-1 animate-in zoom-in-95 duration-100 w-max", onMouseDown: (e)=>e.stopPropagation(), children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: (e)=>{ e.stopPropagation(); onUpdate(node.id, { type: 'story' }); setShowTypePicker(false); }, className: `p-1.5 rounded hover:bg-slate-100 ${node.type === 'story' ? 'bg-indigo-50 ring-1 ring-indigo-200' : ''}`, title: "Narration", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], { size: 14, className: "text-slate-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 206, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 201, columnNumber: 29 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: (e)=>{ e.stopPropagation(); onUpdate(node.id, { type: 'action' }); setShowTypePicker(false); }, className: `p-1.5 rounded hover:bg-amber-50 ${node.type === 'action' ? 'bg-amber-50 ring-1 ring-amber-200' : ''}`, title: "Action", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], { size: 14, className: "text-amber-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 213, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 208, columnNumber: 29 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: (e)=>{ e.stopPropagation(); onUpdate(node.id, { type: 'dialogue' }); setShowTypePicker(false); }, className: `p-1.5 rounded hover:bg-blue-50 ${node.type === 'dialogue' ? 'bg-blue-50 ring-1 ring-blue-200' : ''}`, title: "Dialogue", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], { size: 14, className: "text-blue-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 220, columnNumber: 33 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 215, columnNumber: 29 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 200, columnNumber: 25 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { className: "p-1.5 rounded-full bg-white/70 hover:bg-white shadow-sm border border-slate-100 hover:border-indigo-200 transition-all opacity-80 group-hover:opacity-100", onClick: (e)=>{ e.stopPropagation(); setShowTypePicker(!showTypePicker); }, children: [ node.type === 'story' && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], { size: 14, className: "text-slate-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 229, columnNumber: 51 }, ("TURBOPACK compile-time value", void 0)), node.type === 'action' && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], { size: 14, className: "text-amber-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 230, columnNumber: 52 }, ("TURBOPACK compile-time value", void 0)), node.type === 'dialogue' && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$message$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], { size: 14, className: "text-blue-500" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 231, columnNumber: 54 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 225, columnNumber: 21 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 198, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 119, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { className: "absolute -right-3 top-1/2 -translate-y-1/2 w-6 h-6 bg-white border border-slate-300 rounded-full flex items-center justify-center text-slate-400 hover:text-indigo-600 hover:border-indigo-500 shadow-sm opacity-0 group-hover:opacity-100 transition-all z-20", onMouseDown: (e)=>onStartConnection(e, node.id), children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ArrowRight$3e$__["ArrowRight"], { size: 12 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 240, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 236, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 102, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)); }, "8yNvnjGOL794S5OUWPkg1xgktL0="), (prev, next)=>{ return prev.node === next.node && prev.isSelected === next.isSelected && prev.isEditing === next.isEditing && prev.activeColorPickerId === next.activeColorPickerId && prev.entities === next.entities; }); _c = StoryNode; const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{ _s1(); const containerRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); const rafRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null); const [internalNodes, setInternalNodes] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(data.nodes); const internalNodesRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(internalNodes); (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "StoryWorkflow.useEffect": ()=>{ internalNodesRef.current = internalNodes; } }["StoryWorkflow.useEffect"], [ internalNodes ]); (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "StoryWorkflow.useEffect": ()=>{ setInternalNodes(data.nodes); } }["StoryWorkflow.useEffect"], [ data.nodes ]); (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({ "StoryWorkflow.useEffect": ()=>{ return ({ "StoryWorkflow.useEffect": ()=>{ if (rafRef.current) cancelAnimationFrame(rafRef.current); } })["StoryWorkflow.useEffect"]; } }["StoryWorkflow.useEffect"], []); const [activeSuggestion, setActiveSuggestion] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [selectedNodeIds, setSelectedNodeIds] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(new Set()); const [savedColors, setSavedColors] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(INITIAL_COLORS); const [activeColorPickerId, setActiveColorPickerId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [editingNodeId, setEditingNodeId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [history, setHistory] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]); const [isDragging, setIsDragging] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); const [dragStartPositions, setDragStartPositions] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(new Map()); const [dragStartMouse, setDragStartMouse] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({ x: 0, y: 0 }); const [connectingNodeId, setConnectingNodeId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null); const [mousePos, setMousePos] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({ x: 0, y: 0 }); const [isPanning, setIsPanning] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false); const [panStart, setPanStart] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({ x: 0, y: 0 }); const [scrollStart, setScrollStart] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({ x: 0, y: 0 }); const pushHistory = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[pushHistory]": ()=>{ setHistory({ "StoryWorkflow.useCallback[pushHistory]": (prev)=>{ const newHistory = [ ...prev, data ]; if (newHistory.length > 20) return newHistory.slice(newHistory.length - 20); return newHistory; } }["StoryWorkflow.useCallback[pushHistory]"]); } }["StoryWorkflow.useCallback[pushHistory]"], [ data ]); const updateNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[updateNode]": (id, updates)=>{ const currentNodes = internalNodesRef.current; onUpdate({ ...data, nodes: currentNodes.map({ "StoryWorkflow.useCallback[updateNode]": (n)=>n.id === id ? { ...n, ...updates } : n }["StoryWorkflow.useCallback[updateNode]"]) }); } }["StoryWorkflow.useCallback[updateNode]"], [ data, onUpdate ]); const handleInputFocus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleInputFocus]": (e)=>{ e.stopPropagation(); } }["StoryWorkflow.useCallback[handleInputFocus]"], []); const handleInputWithAutocomplete = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleInputWithAutocomplete]": (e, nodeId, field)=>{ const val = e.target.value; updateNode(nodeId, { [field]: val }); const cursor = e.target.selectionStart || 0; const textBeforeCursor = val.slice(0, cursor); const match = textBeforeCursor.match(/([@#^])([^@#^\s]*)$/); if (match) { const trigger = match[1]; const query = match[2].toLowerCase(); const targetType = trigger === '@' ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$types$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EntityType"].CHARACTER : trigger === '#' ? __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$types$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EntityType"].LOCATION : __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$types$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EntityType"].OBJECT; const filtered = entities.filter({ "StoryWorkflow.useCallback[handleInputWithAutocomplete].filtered": (ent)=>ent.type === targetType && ent.name.toLowerCase().includes(query) }["StoryWorkflow.useCallback[handleInputWithAutocomplete].filtered"]); setActiveSuggestion({ active: true, trigger, query, nodeId, field, cursorIndex: cursor, selectedIndex: 0, filteredEntities: filtered }); } else { setActiveSuggestion(null); } } }["StoryWorkflow.useCallback[handleInputWithAutocomplete]"], [ updateNode, entities ]); const insertEntity = (entity)=>{ if (!activeSuggestion) return; const { nodeId, field, trigger, query } = activeSuggestion; const node = internalNodesRef.current.find((n)=>n.id === nodeId); if (!node) return; const currentText = node[field]; const cursor = activeSuggestion.cursorIndex; const insertionLength = trigger.length + query.length; const startIdx = cursor - insertionLength; if (startIdx < 0) return; const before = currentText.slice(0, startIdx); const after = currentText.slice(cursor); const isDialogue = node.type === 'dialogue' && activeSuggestion.trigger === '@'; const suffix = isDialogue ? ": " : " "; updateNode(nodeId, { [field]: before + entity.name + suffix + after }); setActiveSuggestion(null); }; const handleKeyDownInInput = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleKeyDownInInput]": (e, nodeId)=>{ if (activeSuggestion && activeSuggestion.nodeId === nodeId) { if (e.key === 'ArrowDown') { e.preventDefault(); setActiveSuggestion({ "StoryWorkflow.useCallback[handleKeyDownInInput]": (prev)=>prev ? { ...prev, selectedIndex: (prev.selectedIndex + 1) % prev.filteredEntities.length } : null }["StoryWorkflow.useCallback[handleKeyDownInInput]"]); return; } else if (e.key === 'ArrowUp') { e.preventDefault(); setActiveSuggestion({ "StoryWorkflow.useCallback[handleKeyDownInInput]": (prev)=>prev ? { ...prev, selectedIndex: (prev.selectedIndex - 1 + prev.filteredEntities.length) % prev.filteredEntities.length } : null }["StoryWorkflow.useCallback[handleKeyDownInInput]"]); return; } else if (e.key === 'Tab' || e.key === 'Enter') { e.preventDefault(); if (activeSuggestion.filteredEntities.length > 0) { insertEntity(activeSuggestion.filteredEntities[activeSuggestion.selectedIndex]); } else { setActiveSuggestion(null); } return; } else if (e.key === 'Escape') { setActiveSuggestion(null); return; } } } }["StoryWorkflow.useCallback[handleKeyDownInInput]"], [ activeSuggestion, entities, updateNode ]); const handleNodeMouseDown = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleNodeMouseDown]": (e, nodeId)=>{ e.stopPropagation(); setActiveColorPickerId(null); setSelectedNodeIds({ "StoryWorkflow.useCallback[handleNodeMouseDown]": (prevSelected)=>{ const newSelection = new Set(prevSelected); if (e.ctrlKey) { if (newSelection.has(nodeId)) newSelection.delete(nodeId); else newSelection.add(nodeId); } else { if (!newSelection.has(nodeId)) { newSelection.clear(); newSelection.add(nodeId); } } const finalDragIds = e.ctrlKey ? newSelection : newSelection.has(nodeId) ? newSelection : new Set([ nodeId ]); const startPositions = new Map(); internalNodesRef.current.forEach({ "StoryWorkflow.useCallback[handleNodeMouseDown]": (n)=>{ if (finalDragIds.has(n.id)) { startPositions.set(n.id, { x: n.x, y: n.y }); } } }["StoryWorkflow.useCallback[handleNodeMouseDown]"]); setDragStartPositions(startPositions); return newSelection; } }["StoryWorkflow.useCallback[handleNodeMouseDown]"]); setIsDragging(true); setDragStartMouse({ x: e.clientX, y: e.clientY }); pushHistory(); } }["StoryWorkflow.useCallback[handleNodeMouseDown]"], [ pushHistory ]); const startConnection = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[startConnection]": (e, nodeId)=>{ e.stopPropagation(); pushHistory(); setConnectingNodeId(nodeId); } }["StoryWorkflow.useCallback[startConnection]"], [ pushHistory ]); const finishConnection = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[finishConnection]": (e, targetId)=>{ if (connectingNodeId && connectingNodeId !== targetId) { const exists = data.connections.some({ "StoryWorkflow.useCallback[finishConnection].exists": (c)=>c.source === connectingNodeId && c.target === targetId }["StoryWorkflow.useCallback[finishConnection].exists"]); if (!exists) { const newConn = { id: `conn-${Date.now()}`, source: connectingNodeId, target: targetId }; onUpdate({ ...data, nodes: internalNodesRef.current, connections: [ ...data.connections, newConn ] }); } } setConnectingNodeId(null); } }["StoryWorkflow.useCallback[finishConnection]"], [ data, onUpdate, connectingNodeId ]); const handleToggleColorPicker = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleToggleColorPicker]": (id)=>{ setActiveColorPickerId({ "StoryWorkflow.useCallback[handleToggleColorPicker]": (prev)=>prev === id ? null : id }["StoryWorkflow.useCallback[handleToggleColorPicker]"]); } }["StoryWorkflow.useCallback[handleToggleColorPicker]"], []); const handleSaveColor = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({ "StoryWorkflow.useCallback[handleSaveColor]": (color)=>{ setSavedColors({ "StoryWorkflow.useCallback[handleSaveColor]": (prev)=>!prev.includes(color) ? [ ...prev, color ] : prev }["StoryWorkflow.useCallback[handleSaveColor]"]); } }["StoryWorkflow.useCallback[handleSaveColor]"], []); const handleMouseMove = (e)=>{ const rect = containerRef.current?.getBoundingClientRect(); if (!rect) return; const clientX = e.clientX; const clientY = e.clientY; if (isPanning && containerRef.current) { const dx = clientX - panStart.x; const dy = clientY - panStart.y; containerRef.current.scrollLeft = scrollStart.x - dx; containerRef.current.scrollTop = scrollStart.y - dy; return; } const scrollLeft = containerRef.current?.scrollLeft || 0; const scrollTop = containerRef.current?.scrollTop || 0; setMousePos({ x: clientX - rect.left + scrollLeft, y: clientY - rect.top + scrollTop }); if (isDragging) { if (rafRef.current) return; rafRef.current = requestAnimationFrame(()=>{ const dx = clientX - dragStartMouse.x; const dy = clientY - dragStartMouse.y; setInternalNodes((prevNodes)=>prevNodes.map((node)=>{ const startPos = dragStartPositions.get(node.id); if (startPos) return { ...node, x: startPos.x + dx, y: startPos.y + dy }; return node; })); rafRef.current = null; }); } }; const handleMouseUp = ()=>{ if (rafRef.current) { cancelAnimationFrame(rafRef.current); rafRef.current = null; } if (isDragging) onUpdate({ ...data, nodes: internalNodesRef.current }); setIsDragging(false); setIsPanning(false); setConnectingNodeId(null); }; const handleCanvasMouseDown = (e)=>{ if (!e.ctrlKey) setSelectedNodeIds(new Set()); setActiveSuggestion(null); setActiveColorPickerId(null); setEditingNodeId(null); setIsPanning(true); setPanStart({ x: e.clientX, y: e.clientY }); if (containerRef.current) { setScrollStart({ x: containerRef.current.scrollLeft, y: containerRef.current.scrollTop }); } }; const handleCanvasDoubleClick = (e)=>{ e.preventDefault(); const rect = containerRef.current?.getBoundingClientRect(); if (!rect) return; const x = e.clientX - rect.left + (containerRef.current?.scrollLeft || 0) - CARD_WIDTH / 2; const y = e.clientY - rect.top + (containerRef.current?.scrollTop || 0) - CARD_HEIGHT / 2; pushHistory(); const newNode = { id: `node-${Date.now()}`, x, y, title: 'Nouvel événement', description: '', color: INITIAL_COLORS[0], type: 'story' }; onUpdate({ ...data, nodes: [ ...internalNodesRef.current, newNode ] }); setSelectedNodeIds(new Set([ newNode.id ])); setEditingNodeId(newNode.id); }; const handleDeleteSelected = ()=>{ if (selectedNodeIds.size === 0) return; pushHistory(); const newNodes = internalNodes.filter((n)=>!selectedNodeIds.has(n.id)); const newConnections = data.connections.filter((c)=>!selectedNodeIds.has(c.source) && !selectedNodeIds.has(c.target)); onUpdate({ nodes: newNodes, connections: newConnections }); setSelectedNodeIds(new Set()); }; const handleAddNodeCenter = ()=>{ pushHistory(); const scrollLeft = containerRef.current?.scrollLeft || 0; const scrollTop = containerRef.current?.scrollTop || 0; const clientWidth = containerRef.current?.clientWidth || 800; const clientHeight = containerRef.current?.clientHeight || 600; const newNode = { id: `node-${Date.now()}`, x: scrollLeft + clientWidth / 2 - CARD_WIDTH / 2, y: scrollTop + clientHeight / 2 - CARD_HEIGHT / 2, title: 'Nouveau point d\'intrigue', description: '', color: INITIAL_COLORS[0], type: 'story' }; onUpdate({ ...data, nodes: [ ...internalNodesRef.current, newNode ] }); setSelectedNodeIds(new Set([ newNode.id ])); setEditingNodeId(newNode.id); }; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "h-full flex flex-col overflow-hidden bg-[#eef2ff] relative", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "h-12 bg-white border-b border-indigo-100 flex items-center justify-between px-4 z-10 shadow-sm shrink-0", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-2", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: handleAddNodeCenter, className: "flex items-center gap-1.5 px-3 py-1.5 bg-indigo-600 text-white rounded-lg hover:bg-indigo-700 text-xs font-bold transition-all shadow-md shadow-indigo-100", children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], { size: 14 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 575, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)), " AJOUTER NŒUD" ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 574, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "w-px h-6 bg-slate-100 mx-2" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 577, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "text-[10px] uppercase font-bold text-slate-400 tracking-wider", children: selectedNodeIds.size > 0 ? `${selectedNodeIds.size} SÉLECTIONNÉ(S)` : 'Double-cliquez sur le canvas pour créer' }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 578, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 573, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "flex items-center gap-2", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { onClick: handleDeleteSelected, disabled: selectedNodeIds.size === 0, className: "p-2 text-red-500 hover:bg-red-50 rounded-lg disabled:opacity-30 transition-colors", title: "Supprimer", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], { size: 16 }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 584, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 583, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 582, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 572, columnNumber: 7 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { ref: containerRef, className: "flex-1 overflow-auto relative cursor-grab active:cursor-grabbing bg-[#eef2ff]", onMouseDown: handleCanvasMouseDown, onMouseMove: handleMouseMove, onMouseUp: handleMouseUp, onDoubleClick: handleCanvasDoubleClick, style: { backgroundImage: 'radial-gradient(#d1d5db 1px, transparent 1px)', backgroundSize: '24px 24px' }, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", { className: "absolute top-0 left-0 w-[4000px] h-[4000px] pointer-events-none z-0", children: [ data.connections.map((conn)=>{ const source = internalNodes.find((n)=>n.id === conn.source); const target = internalNodes.find((n)=>n.id === conn.target); if (!source || !target) return null; const startX = source.x + CARD_WIDTH / 2; const startY = source.y + CARD_HEIGHT / 2; const endX = target.x + CARD_WIDTH / 2; const endY = target.y + CARD_HEIGHT / 2; return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("line", { x1: startX, y1: startY, x2: endX, y2: endY, stroke: "#cbd5e1", strokeWidth: "2", markerEnd: "url(#arrowhead)" }, conn.id, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 611, columnNumber: 21 }, ("TURBOPACK compile-time value", void 0)); }), connectingNodeId && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("line", { x1: (internalNodes.find((n)=>n.id === connectingNodeId)?.x || 0) + CARD_WIDTH / 2, y1: (internalNodes.find((n)=>n.id === connectingNodeId)?.y || 0) + CARD_HEIGHT / 2, x2: mousePos.x, y2: mousePos.y, stroke: "#6366f1", strokeWidth: "2", strokeDasharray: "5,5", markerEnd: "url(#arrowhead-blue)" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 615, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("defs", { children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("marker", { id: "arrowhead", markerWidth: "10", markerHeight: "7", refX: "28", refY: "3.5", orient: "auto", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { d: "M0,0 L0,7 L10,3.5 Z", fill: "#cbd5e1" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 624, columnNumber: 21 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 623, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("marker", { id: "arrowhead-blue", markerWidth: "10", markerHeight: "7", refX: "10", refY: "3.5", orient: "auto", children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("path", { d: "M0,0 L0,7 L10,3.5 Z", fill: "#6366f1" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 627, columnNumber: 21 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 626, columnNumber: 17 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 622, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 601, columnNumber: 9 }, ("TURBOPACK compile-time value", void 0)), internalNodes.map((node)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(StoryNode, { node: node, isSelected: selectedNodeIds.has(node.id), isEditing: editingNodeId === node.id, activeColorPickerId: activeColorPickerId, entities: entities, savedColors: savedColors, onMouseDown: handleNodeMouseDown, onMouseUp: finishConnection, onStartConnection: startConnection, onUpdate: updateNode, onSetEditing: setEditingNodeId, onToggleColorPicker: handleToggleColorPicker, onSaveColor: handleSaveColor, onNavigateToEntity: onNavigateToEntity, onInputFocus: handleInputFocus, onInputCheckAutocomplete: handleInputWithAutocomplete, onKeyDownInInput: handleKeyDownInInput }, node.id, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 633, columnNumber: 13 }, ("TURBOPACK compile-time value", void 0))) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 589, columnNumber: 7 }, ("TURBOPACK compile-time value", void 0)), activeSuggestion && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "fixed z-50 bg-white rounded-xl shadow-2xl border border-indigo-100 w-64 max-h-48 overflow-y-auto", style: { left: '50%', top: '50%', transform: 'translate(-50%, -50%)' }, children: [ /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "px-3 py-2 bg-indigo-600 text-white text-[10px] font-black uppercase tracking-widest", children: [ "Insérer ", activeSuggestion.trigger === '@' ? 'Personnage' : activeSuggestion.trigger === '#' ? 'Lieu' : 'Objet' ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 658, columnNumber: 15 }, ("TURBOPACK compile-time value", void 0)), /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "divide-y divide-slate-50", children: activeSuggestion.filteredEntities.length > 0 ? activeSuggestion.filteredEntities.map((ent, idx)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", { className: `w-full text-left px-4 py-3 text-xs flex items-center gap-3 hover:bg-indigo-50 transition-colors ${idx === activeSuggestion.selectedIndex ? 'bg-indigo-50 text-indigo-700 font-bold' : 'text-slate-700'}`, onClick: ()=>insertEntity(ent), children: ent.name }, ent.id, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 664, columnNumber: 27 }, ("TURBOPACK compile-time value", void 0))) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", { className: "p-4 text-xs text-slate-400 italic text-center", children: "Aucun résultat" }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 673, columnNumber: 23 }, ("TURBOPACK compile-time value", void 0)) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 661, columnNumber: 15 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 657, columnNumber: 11 }, ("TURBOPACK compile-time value", void 0)) ] }, void 0, true, { fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx", lineNumber: 571, columnNumber: 5 }, ("TURBOPACK compile-time value", void 0)); }; _s1(StoryWorkflow, "GlJ/7gZkBYC3Q3ryQRUN9XEyk6A="); _c1 = StoryWorkflow; const __TURBOPACK__default__export__ = StoryWorkflow; var _c, _c1; __turbopack_context__.k.register(_c, "StoryNode"); __turbopack_context__.k.register(_c1, "StoryWorkflow"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/workflow/page.tsx [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "default", ()=>WorkflowPage ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$StoryWorkflow$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$ProjectProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/src/providers/ProjectProvider.tsx [app-client] (ecmascript)"); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/next/navigation.js [app-client] (ecmascript)"); ; var _s = __turbopack_context__.k.signature(); 'use client'; ; ; ; function WorkflowPage() { _s(); const { project, projectId, updateProject } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$ProjectProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useProjectContext"])(); const router = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"])(); return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$components$2f$StoryWorkflow$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], { data: project.workflow || { nodes: [], connections: [] }, onUpdate: (workflow)=>updateProject({ workflow }), entities: project.entities || [], onNavigateToEntity: ()=>router.push(`/project/${projectId}/world`) }, void 0, false, { fileName: "[project]/Documents/00 - projet/plumeia/src/app/project/[id]/workflow/page.tsx", lineNumber: 12, columnNumber: 9 }, this); } _s(WorkflowPage, "EW3OgC7709EYo06wA7cP5/nAUdg=", false, function() { return [ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$providers$2f$ProjectProvider$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useProjectContext"], __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$navigation$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRouter"] ]; }); _c = WorkflowPage; var _c; __turbopack_context__.k.register(_c, "WorkflowPage"); if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) { __turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$); } }), "[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "__iconNode", ()=>__iconNode, "default", ()=>ArrowRight ]); /** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)"); ; const __iconNode = [ [ "path", { d: "M5 12h14", key: "1ays0h" } ], [ "path", { d: "m12 5 7 7-7 7", key: "xquz4c" } ] ]; const ArrowRight = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("arrow-right", __iconNode); ; //# sourceMappingURL=arrow-right.js.map }), "[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-client] (ecmascript) ", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "ArrowRight", ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"] ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$arrow$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/arrow-right.js [app-client] (ecmascript)"); }), "[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/palette.js [app-client] (ecmascript)", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "__iconNode", ()=>__iconNode, "default", ()=>Palette ]); /** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/createLucideIcon.js [app-client] (ecmascript)"); ; const __iconNode = [ [ "path", { d: "M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z", key: "e79jfc" } ], [ "circle", { cx: "13.5", cy: "6.5", r: ".5", fill: "currentColor", key: "1okk4w" } ], [ "circle", { cx: "17.5", cy: "10.5", r: ".5", fill: "currentColor", key: "f64h9f" } ], [ "circle", { cx: "6.5", cy: "12.5", r: ".5", fill: "currentColor", key: "qy21gx" } ], [ "circle", { cx: "8.5", cy: "7.5", r: ".5", fill: "currentColor", key: "fotxhn" } ] ]; const Palette = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$createLucideIcon$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"])("palette", __iconNode); ; //# sourceMappingURL=palette.js.map }), "[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/palette.js [app-client] (ecmascript) ", ((__turbopack_context__) => { "use strict"; __turbopack_context__.s([ "Palette", ()=>__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$palette$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"] ]); var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$palette$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/00 - projet/plumeia/node_modules/lucide-react/dist/esm/icons/palette.js [app-client] (ecmascript)"); }), ]); //# sourceMappingURL=Documents_00%20-%20projet_plumeia_06c48656._.js.map