correction de l'update du

workflow
This commit is contained in:
2026-02-26 22:39:23 +01:00
parent 56b5615abf
commit 4e1637a792
370 changed files with 19223 additions and 900 deletions

View File

@@ -79,7 +79,7 @@ const renderTextWithLinks = (text, entities, onNavigate)=>{
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].memo(({ node, isSelected, isEditing, activeColorPickerId, entities, savedColors, onMouseDown, onMouseUp, onStartConnection, onUpdate, onSetEditing, onToggleColorPicker, onSaveColor, onNavigateToEntity, onInputFocus, onInputCheckAutocomplete, onKeyDownInInput })=>{
const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].memo(({ node, isSelected, isEditing, isDragging, activeColorPickerId, entities, savedColors, onMouseDown, onMouseUp, onStartConnection, onUpdate, onSetEditing, onToggleColorPicker, onSaveColor, onNavigateToEntity, onInputFocus, onInputCheckAutocomplete, onKeyDownInInput })=>{
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useMemo"])(()=>{
return renderTextWithLinks(node.description, entities, onNavigateToEntity);
@@ -89,7 +89,8 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `absolute flex flex-col rounded-xl shadow-sm border transition-all z-10 group
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: {
@@ -101,13 +102,14 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
},
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
@@ -126,7 +128,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
autoFocus: true
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 122,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "font-bold text-slate-800 cursor-text truncate mr-6 text-sm",
@@ -134,7 +136,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
children: node.title
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 130,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -147,12 +149,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
size: 14
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 142,
lineNumber: 145,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 138,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
@@ -171,12 +173,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
}
}, color, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 149,
lineNumber: 152,
columnNumber: 37
}, ("TURBOPACK compile-time value", void 0)))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 147,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
@@ -193,12 +195,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
})
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 159,
lineNumber: 162,
columnNumber: 37
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 158,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -207,25 +209,25 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
children: "+ SAUVER"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 166,
lineNumber: 169,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 157,
lineNumber: 160,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 146,
lineNumber: 149,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 120,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
@@ -240,7 +242,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
onBlur: ()=>onSetEditing(null)
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 179,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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' : ''}`,
@@ -248,12 +250,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
children: richDescription
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 189,
lineNumber: 192,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 177,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
@@ -278,12 +280,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-slate-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 206,
lineNumber: 209,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 201,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -301,12 +303,12 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-amber-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 213,
lineNumber: 216,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 208,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -324,18 +326,18 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-blue-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 220,
lineNumber: 223,
columnNumber: 33
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 215,
lineNumber: 218,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 200,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -350,7 +352,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-slate-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 229,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], {
@@ -358,7 +360,7 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-amber-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 230,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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$ssr$5d$__$28$ecmascript$29$__$3c$export__default__as__MessageCircle$3e$__["MessageCircle"], {
@@ -366,25 +368,25 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
className: "text-blue-500"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 231,
lineNumber: 234,
columnNumber: 54
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 225,
lineNumber: 228,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 198,
lineNumber: 201,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 119,
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
@@ -394,22 +396,22 @@ const StoryNode = /*#__PURE__*/ __TURBOPACK__imported__module__$5b$project$5d2f$
size: 12
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 240,
lineNumber: 243,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 236,
lineNumber: 239,
columnNumber: 13
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 102,
lineNumber: 103,
columnNumber: 9
}, ("TURBOPACK compile-time value", void 0));
}, (prev, next)=>{
return prev.node === next.node && prev.isSelected === next.isSelected && prev.isEditing === next.isEditing && prev.activeColorPickerId === next.activeColorPickerId && prev.entities === next.entities;
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;
});
const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
const containerRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["useRef"])(null);
@@ -659,12 +661,15 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
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
});
// 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(()=>{
@@ -683,7 +688,7 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
});
}
};
const handleMouseUp = ()=>{
const handleMouseUp = (e)=>{
if (rafRef.current) {
cancelAnimationFrame(rafRef.current);
rafRef.current = null;
@@ -692,6 +697,33 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
...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);
@@ -796,36 +828,36 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
size: 14
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 575,
columnNumber: 17
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: 574,
columnNumber: 13
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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
lineNumber: 619,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 573,
columnNumber: 9
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2",
@@ -838,24 +870,24 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
size: 16
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 584,
columnNumber: 17
lineNumber: 625,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 583,
columnNumber: 13
lineNumber: 624,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 582,
columnNumber: 9
lineNumber: 623,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 572,
columnNumber: 7
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
ref: containerRef,
@@ -890,8 +922,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
markerEnd: "url(#arrowhead)"
}, conn.id, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 611,
columnNumber: 21
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("line", {
@@ -905,8 +937,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
markerEnd: "url(#arrowhead-blue)"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 615,
columnNumber: 17
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("defs", {
children: [
@@ -922,13 +954,13 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
fill: "#cbd5e1"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 624,
columnNumber: 21
lineNumber: 665,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 623,
columnNumber: 17
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("marker", {
id: "arrowhead-blue",
@@ -942,30 +974,31 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
fill: "#6366f1"
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 627,
columnNumber: 21
lineNumber: 668,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 626,
columnNumber: 17
lineNumber: 667,
columnNumber: 25
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 622,
columnNumber: 13
lineNumber: 663,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 601,
columnNumber: 9
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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,
@@ -982,14 +1015,14 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
onKeyDownInInput: handleKeyDownInInput
}, node.id, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 633,
columnNumber: 13
lineNumber: 674,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0)))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 589,
columnNumber: 7
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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",
@@ -1007,8 +1040,8 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 658,
columnNumber: 15
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "divide-y divide-slate-50",
@@ -1018,32 +1051,32 @@ const StoryWorkflow = ({ data, onUpdate, entities, onNavigateToEntity })=>{
children: ent.name
}, ent.id, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 664,
columnNumber: 27
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$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$ssr$2f$react$2d$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$ssr$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
lineNumber: 715,
columnNumber: 29
}, ("TURBOPACK compile-time value", void 0))
}, void 0, false, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 661,
columnNumber: 15
lineNumber: 703,
columnNumber: 21
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 657,
columnNumber: 11
lineNumber: 699,
columnNumber: 17
}, ("TURBOPACK compile-time value", void 0))
]
}, void 0, true, {
fileName: "[project]/Documents/00 - projet/plumeia/src/components/StoryWorkflow.tsx",
lineNumber: 571,
columnNumber: 5
lineNumber: 612,
columnNumber: 9
}, ("TURBOPACK compile-time value", void 0));
};
const __TURBOPACK__default__export__ = StoryWorkflow;

File diff suppressed because one or more lines are too long

View File

@@ -303,12 +303,22 @@ const useProjects = (user)=>{
...data
} : p));
try {
// Persist project fields
const payload = {};
if (data.title !== undefined) payload.title = data.title;
if (data.author !== undefined) payload.author = data.author;
if (data.settings !== undefined) payload.settings = data.settings;
if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
if (Object.keys(payload).length > 0) {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
}
// Persist workflow (nodes + connections) separately
if (data.workflow) {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.syncWorkflow(id, {
nodes: data.workflow.nodes || [],
connections: data.workflow.connections || []
});
}
} catch (err) {
console.error("Failed to update project", err);
}

File diff suppressed because one or more lines are too long

View File

@@ -334,12 +334,22 @@ const useProjects = (user)=>{
...data
} : p));
try {
// Persist project fields
const payload = {};
if (data.title !== undefined) payload.title = data.title;
if (data.author !== undefined) payload.author = data.author;
if (data.settings !== undefined) payload.settings = data.settings;
if (data.styleGuide !== undefined) payload.styleGuide = data.styleGuide;
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
if (Object.keys(payload).length > 0) {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.update(id, payload);
}
// Persist workflow (nodes + connections) separately
if (data.workflow) {
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$00__$2d$__projet$2f$plumeia$2f$src$2f$lib$2f$api$2e$ts__$5b$app$2d$ssr$5d$__$28$ecmascript$29$__["default"].projects.syncWorkflow(id, {
nodes: data.workflow.nodes || [],
connections: data.workflow.connections || []
});
}
} catch (err) {
console.error("Failed to update project", err);
}

File diff suppressed because one or more lines are too long

View File

@@ -76,6 +76,12 @@ const api = {
return api.request(`/projects/${id}`, {
method: 'DELETE'
});
},
async syncWorkflow (id, data) {
return api.request(`/projects/${id}/workflow`, {
method: 'PUT',
body: JSON.stringify(data)
});
}
},
// --- CHAPTERS ---

File diff suppressed because one or more lines are too long