Files
plume/.next/dev/static/chunks/Documents_00 - projet_plumeia_06c48656._.js
2026-02-26 22:39:23 +01:00

1321 lines
97 KiB
JavaScript

(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) <export default as Plus>");
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) <export default as Trash2>");
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) <export default as ArrowRight>");
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) <export default as BookOpen>");
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) <export default as MessageCircle>");
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) <export default as Zap>");
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) <export default as Palette>");
;
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, isDragging, 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 z-10 group
${isDragging ? '' : 'transition-all'}
${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),
onDoubleClick: (e)=>e.stopPropagation(),
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: 120,
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: 125,
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: 133,
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: 145,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 141,
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: 152,
columnNumber: 37
}, ("TURBOPACK compile-time value", void 0)))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 150,
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: 162,
columnNumber: 37
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 161,
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: 169,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 160,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 149,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 123,
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: 182,
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: 192,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 180,
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: 209,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 204,
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: 216,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 211,
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: 223,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 218,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 203,
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: 232,
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: 233,
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: 234,
columnNumber: 54
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 228,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 201,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 122,
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: 243,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 239,
columnNumber: 13
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 103,
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.isDragging === next.isDragging && 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;
}
// Only update mousePos when connecting (drawing a line), not during node drag
if (connectingNodeId) {
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 = (e)=>{
if (rafRef.current) {
cancelAnimationFrame(rafRef.current);
rafRef.current = null;
}
if (isDragging) onUpdate({
...data,
nodes: internalNodesRef.current
});
// Hit-test: if connecting, check if mouse is over any node
if (connectingNodeId && containerRef.current) {
const rect = containerRef.current.getBoundingClientRect();
const scrollLeft = containerRef.current.scrollLeft;
const scrollTop = containerRef.current.scrollTop;
const mx = e.clientX - rect.left + scrollLeft;
const my = e.clientY - rect.top + scrollTop;
const targetNode = internalNodesRef.current.find((n)=>n.id !== connectingNodeId && mx >= n.x && mx <= n.x + CARD_WIDTH && my >= n.y && my <= n.y + CARD_HEIGHT);
if (targetNode) {
const exists = data.connections.some((c)=>c.source === connectingNodeId && c.target === targetNode.id);
if (!exists) {
const newConn = {
id: `conn-${Date.now()}`,
source: connectingNodeId,
target: targetNode.id
};
onUpdate({
...data,
nodes: internalNodesRef.current,
connections: [
...data.connections,
newConn
]
});
}
}
}
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: 616,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0)),
" AJOUTER NŒUD"
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 615,
columnNumber: 21
}, ("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: 618,
columnNumber: 21
}, ("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: 619,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 614,
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 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: 625,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, 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))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 613,
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", {
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: 652,
columnNumber: 29
}, ("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: 656,
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"])("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: 665,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 664,
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"])("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: 668,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 667,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 663,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 642,
columnNumber: 17
}, ("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,
isDragging: isDragging,
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: 674,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0)))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 630,
columnNumber: 13
}, ("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: 700,
columnNumber: 21
}, ("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: 706,
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"])("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: 715,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 703,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 699,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 612,
columnNumber: 9
}, ("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) <export default as ArrowRight>", ((__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) <export default as Palette>", ((__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