@imenam/mcp-design 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -11,5 +11,5 @@ Error generating stack: `+e.message+`
|
|
|
11
11
|
`)}function Fe(e,t,n={}){let r=Pe(e,n,t),i=M(Math.max(1,t.width)),a=M(Math.max(1,t.height));return`<svg xmlns="http://www.w3.org/2000/svg" width="${i}" height="${a}" viewBox="${M(t.x)} ${M(t.y)} ${i} ${a}">\n <rect x="${M(t.x)}" y="${M(t.y)}" width="${i}" height="${a}" fill="${pe(e.background)}" />\n`+(r?`${r}\n`:``)+`</svg>`}function Ie(e){let t=e.remarks.length,n=e.remarks.filter(e=>e.processed!==null).length;return{done:n,total:t,status:n===0?`pending`:n===t?`done`:`in_progress`}}function Le(e){return`Retour n°${e}`}function Re(e,t){return t.x>=e.x&&t.y>=e.y&&t.x+t.width<=e.x+e.width&&t.y+t.height<=e.y+e.height}function ze(e,t){let n=te(k(e)),r=b(e),i=[],a=e=>{let o=D(n,e.id);if(o.width<=0&&o.height<=0||!ne(o,t))return;let s={id:e.id,name:e.name,type:e.type};if(Re(t,o)){i.push({...s,partial:!1});return}let c=e.type===`group`?r.get(e.id)??[]:[];c.length>0?c.forEach(a):i.push({...s,partial:!0})};return(r.get(null)??[]).forEach(a),i}function Be(e,t){let n=e.find(e=>e.id===t);return n?[...x(e,t).reverse().map(e=>e.name),n.name]:[]}function Ve(e){let t=[...new Set(e.map(e=>e.designId))];return[...e].sort((e,n)=>t.indexOf(e.designId)-t.indexOf(n.designId)||(e.number??0)-(n.number??0))}var He=` › `;function Ue(e){let t=e=>Math.round(e);return`x ${t(e.x)}, y ${t(e.y)}, ${t(e.width)}×${t(e.height)}`}function We(e){return`${e.id} "${e.name}" (${e.type})`}function Ge(e,t){return e.split(`
|
|
12
12
|
`).map(e=>`${t}${e}`).join(`
|
|
13
13
|
`)}function Ke(e){let t=new Map;for(let n of e.remarks){let e=t.get(n.designId);e?e.push(n):t.set(n.designId,[n])}let n=Ie(e),r=[`Feedback round ${e.number} "${e.title}" — submitted ${e.submittedAt} — ${e.remarks.length} remark(s) on ${t.size} page(s), ${n.done} processed.`,`Coordinates are design pixels in the artboard's space, as in get_design.`],i=0;for(let[e,n]of t){r.push(``,`Page "${n[0].designName}" (${e})`);for(let e of n){let t=e.capture?` — capture: image ${++i}`:``,n=e.target,a;if(n.kind===`page`)a=`- ${e.id} [whole page]`;else if(n.kind===`node`)a=`- ${e.id} [#${e.number} · element] ${We(n.element)} — path: ${n.path.join(He)} — box ${Ue(n.box)}${t}`;else{let r=n.elements.length>0?n.elements.map(We).join(`, `):`no element selected`;a=`- ${e.id} [#${e.number} · area] box ${Ue(n.box)} — elements: ${r}${t}`}if(r.push(a,Ge(e.text,` `)),e.processed){let t=e.processed.note?`: ${e.processed.note}`:``;r.push(` ✓ processed by ${e.processed.by} at ${e.processed.at}${t}`)}}}return r.join(`
|
|
14
|
-
`)}var qe=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Je=(e=>e?qe(e):qe),Ye=e=>e;function Xe(e,t=Ye){let n=_.useSyncExternalStore(e.subscribe,_.useCallback(()=>t(e.getState()),[e,t]),_.useCallback(()=>t(e.getInitialState()),[e,t]));return _.useDebugValue(n),n}var Ze=e=>{let t=Je(e),n=e=>Xe(t,e);return Object.assign(n,t),n},Qe=(e=>e?Ze(e):Ze),$e={rect:{width:200,height:120,fill:`#e8e8e6`,stroke:`#1a1a18`,strokeWidth:1,radius:8},ellipse:{width:160,height:160,fill:`#e8e8e6`,stroke:`#1a1a18`,strokeWidth:1},line:{width:200,height:0,stroke:`#1a1a18`,strokeWidth:2},text:{width:260,height:ve(24),text:`Texte`,color:`#1a1a18`,fontSize:24,fontFamily:`Inter, system-ui, sans-serif`,fontWeight:400,fontStyle:`normal`,textAlign:`left`},icon:{width:24,height:24,fill:`none`,stroke:`#1a1a18`,strokeWidth:2},image:{width:200,height:150,fit:`cover`},group:{width:0,height:0},instance:{width:0,height:0}},et=[`group`,`instance`],tt={rect:`Rectangle`,ellipse:`Ellipse`,line:`Ligne`,text:`Texte`,icon:`Icône`,image:`Image`,group:`Groupe`,instance:`Instance`};function nt(e,t){return`${tt[e]} ${t}`}function rt(e){return tt[e]}function it(e,t,n){if(et.includes(e)||e===`line`)return{width:t,height:n};if(e===`icon`){let e=Math.max(1,Math.min(Math.abs(t),Math.abs(n)));return{width:e,height:e}}return e===`text`?{width:Math.max(20,Math.abs(t)),height:Math.max(16,Math.abs(n))}:{width:Math.max(1,Math.abs(t)),height:Math.max(1,Math.abs(n))}}async function at(e,t){let n=await fetch(`api/${e}`,{...t,headers:t?.body?{"Content-Type":`application/json`}:void 0});if(!n.ok){let e=`HTTP ${n.status}`;try{let t=await n.json();t?.error&&(e=t.error)}catch{}throw Error(e)}return await n.json()}var N={listDesigns:()=>at(`designs`),getDesign:e=>at(`designs/${encodeURIComponent(e)}`),createDesign:e=>at(`designs`,{method:`POST`,body:JSON.stringify(e)}),saveDesign:e=>at(`designs/${encodeURIComponent(e.id)}`,{method:`PUT`,body:JSON.stringify({revision:e.revision,nodes:e.nodes,name:e.name,width:e.width,height:e.height,background:e.background})}),setDesignGroup:(e,t)=>at(`designs/${encodeURIComponent(e)}/group`,{method:`PUT`,body:JSON.stringify({group:t})}),duplicateDesign:(e,t)=>at(`designs/${encodeURIComponent(e)}/duplicate`,{method:`POST`,body:JSON.stringify({name:t})}),deleteDesign:e=>at(`designs/${encodeURIComponent(e)}`,{method:`DELETE`}),listRemarks:()=>at(`remarks`),addRemark:e=>at(`remarks`,{method:`POST`,body:JSON.stringify(e)}),updateRemark:(e,t)=>at(`remarks/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify({text:t})}),deleteRemark:e=>at(`remarks/${encodeURIComponent(e)}`,{method:`DELETE`}),submitFeedback:(e,t)=>at(`feedback`,{method:`POST`,body:JSON.stringify({remarkIds:e,title:t})}),renameRound:(e,t)=>at(`rounds/${e}`,{method:`PUT`,body:JSON.stringify({title:t})}),setRoundsProcessed:(e,t)=>at(`feedback/processed`,{method:`POST`,body:JSON.stringify({round:e,processed:t})}),setRemarkProcessed:(e,t,n)=>at(`rounds/${e}/remarks/${encodeURIComponent(t)}`,{method:`PUT`,body:JSON.stringify({processed:n})}),captureUrl:e=>`api/captures/${encodeURIComponent(e)}`,imageUrl:e=>`api/images/${encodeURIComponent(e)}`},ot=`abcdefghijklmnopqrstuvwxyz0123456789`;function st(){let e=``;for(let t of crypto.getRandomValues(new Uint8Array(8)))e+=ot[t%36];return e}function ct(){return`n_${st()}`}function lt(){return`g_${st()}`}function ut(e,t,n){let r={id:ct(),type:e,name:nt(e,n),parentId:null,x:0,y:0,rotation:0,opacity:1,...$e[e],...t};e===`icon`&&r.icon&&t.name===void 0&&(r.name=r.icon);let i=it(e,r.width,r.height),a={...r,width:i.width,height:i.height};return e===`text`&&t.height===void 0&&(a.height=be(a)),a}function dt(e,t){let n={...e,...t};return e.type!==`text`||t.height!==void 0||!xe(e)?n:{...n,height:be(n)}}var ft=20;function pt(e,t,n=ft){let r=new Set(t);for(let n of t)for(let t of C(e,n))r.add(t);let i=e.filter(e=>r.has(e.id)),a=new Map(i.map(e=>[e.id,e.type===`group`?lt():ct()])),o=new Set(t);return i.map(e=>({...e,id:a.get(e.id),parentId:e.parentId===null?null:a.get(e.parentId)??e.parentId,x:e.x+(o.has(e.id)?n:0),y:e.y+(o.has(e.id)?n:0)}))}function mt(e,t){return ie(e,t)}function ht(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function P(e){return Math.round(e*100)/100}var gt=400,_t=`mcp-design.last-design`;function vt(){try{return localStorage.getItem(_t)}catch{return null}}function yt(e){try{localStorage.setItem(_t,e)}catch{}}function bt(e){return{nodes:structuredClone(e.nodes),name:e.name,width:e.width,height:e.height,background:e.background}}var xt=null,St=null,F=Qe((e,t)=>{function n(){xt&&clearTimeout(xt),e({saveState:`saving`}),xt=setTimeout(()=>{xt=null,r()},gt)}async function r(){let n=t().design;if(n)try{let r=await N.saveDesign(n);e(e=>({saveState:`saved`,designs:r.designs,design:e.design?{...e.design,revision:r.design.revision}:e.design})),St&&clearTimeout(St),St=setTimeout(()=>{t().saveState===`saved`&&e({saveState:`idle`})},1500)}catch(t){e({saveState:`error`,error:t.message})}}function i(r,i){let a=t();if(!a.design)return;let o=bt(a.design),s=r(a.design);e({design:{...s,nodes:Tt(w(s.nodes))},past:i?.history===!1?a.past:[...a.past,o].slice(-100),future:i?.history===!1?a.future:[]}),n()}function a(e,t){return{...t,nodes:structuredClone(e.nodes),name:e.name,width:e.width,height:e.height,background:e.background}}return{connected:!1,designs:[],design:null,loading:!1,error:null,tool:`select`,pendingIcon:`star`,selectedIds:[],editingTextId:null,expandedIds:[],zoom:1,pan:{x:0,y:0},panMode:!1,saveState:`idle`,past:[],future:[],setConnected:t=>e({connected:t}),setError:t=>e({error:t}),setTool:t=>e({tool:t,editingTextId:null}),setPendingIcon:t=>e({pendingIcon:t,tool:`icon`,editingTextId:null}),setZoom:t=>e({zoom:Ct(t)}),setPan:t=>e({pan:t}),zoomAround:(n,r)=>{let i=t(),a=Ct(n),o={x:(r.x-i.pan.x)/i.zoom,y:(r.y-i.pan.y)/i.zoom};e({zoom:a,pan:{x:r.x-o.x*a,y:r.y-o.y*a}})},setPanMode:t=>e({panMode:t}),setSelection:t=>e({selectedIds:t,editingTextId:null}),toggleSelection:t=>e(e=>({selectedIds:e.selectedIds.includes(t)?e.selectedIds.filter(e=>e!==t):[...e.selectedIds,t],editingTextId:null})),setEditingText:t=>e({editingTextId:t}),toggleExpanded:t=>e(e=>({expandedIds:e.expandedIds.includes(t)?e.expandedIds.filter(e=>e!==t):[...e.expandedIds,t]})),refreshDesigns:async()=>{try{e({designs:await N.listDesigns()})}catch(t){e({error:t.message})}},openDesign:async t=>{e({loading:!0,error:null});try{let n=await N.getDesign(t);yt(t),e({design:n,loading:!1,selectedIds:[],editingTextId:null,expandedIds:n.nodes.filter(e=>e.type===`group`).map(e=>e.id),past:[],future:[]})}catch(t){e({loading:!1,error:t.message})}},createDesign:async t=>{try{let n=await N.createDesign(t);return yt(n.design.id),e({designs:n.designs,design:n.design,selectedIds:[],editingTextId:null,expandedIds:[],past:[],future:[]}),n.design.id}catch(t){return e({error:t.message}),null}},setDesignGroup:async(t,n)=>{try{let r=await N.setDesignGroup(t,n);e(e=>({designs:r.designs,design:e.design?.id===t?{...e.design,group:n}:e.design}))}catch(t){e({error:t.message})}},duplicateDesign:async(n,r)=>{try{await t().flushSave();let i=await N.duplicateDesign(n,r);yt(i.design.id),e({designs:i.designs,design:i.design,selectedIds:[],editingTextId:null,expandedIds:i.design.nodes.filter(e=>e.type===`group`).map(e=>e.id),past:[],future:[]})}catch(t){e({error:t.message})}},removeDesign:async t=>{try{let n=await N.deleteDesign(t);e(e=>({designs:n.designs,design:e.design?.id===t?null:e.design,selectedIds:e.design?.id===t?[]:e.selectedIds}))}catch(t){e({error:t.message})}},reloadCurrent:async n=>{let r=t();if(r.design?.id===n&&!(xt||r.saveState===`saving`))try{let t=await N.getDesign(n);e(e=>({design:t,selectedIds:e.selectedIds.filter(e=>t.nodes.some(t=>t.id===e)),expandedIds:[...new Set([...e.expandedIds,...t.nodes.filter(e=>e.type===`group`).map(e=>e.id)])],editingTextId:null}))}catch(t){e({error:t.message})}},addNode:(n,r)=>{let a=t().design;if(!a)return null;let o=ut(n,r,a.nodes.length+1);return i(e=>({...e,nodes:[...e.nodes,o]})),e({selectedIds:[o.id],tool:`select`}),o.id},patchNodes:(e,t,n)=>{if(e.length===0)return;let r=new Set(e);i(e=>({...e,nodes:e.nodes.map(e=>r.has(e.id)?dt(e,t):e)}),n)},replaceNodes:(e,t)=>{i(t=>({...t,nodes:e}),t)},moveSelection:(e,n,r,a)=>{let o=t().design;if(!o)return;let s=new Set(mt(o.nodes,r.map(e=>e.id))),c=new Map(r.map(e=>[e.id,{x:e.x,y:e.y}]));i(t=>({...t,nodes:t.nodes.map(t=>{if(!s.has(t.id))return t;let r=c.get(t.id);return r?{...t,x:r.x+e,y:r.y+n}:t})}),a)},deleteSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=new Set(r);for(let e of r)for(let t of C(n.nodes,e))a.add(t);if(wt(n.nodes,a).length>0){e({error:`Ce groupe est encore reproduit par des instances : détachez-les ou supprimez-les d’abord.`});return}i(e=>({...e,nodes:e.nodes.filter(e=>!a.has(e.id))})),e({selectedIds:[],editingTextId:null})},duplicateSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=mt(n.nodes,r),o=pt(n.nodes,a),s=o.filter(e=>e.parentId===null||!o.some(t=>t.id===e.parentId)).map(e=>e.id);i(e=>({...e,nodes:[...e.nodes,...o]})),e({selectedIds:s})},groupSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=mt(n.nodes,r),o=new Set(a.map(e=>n.nodes.find(t=>t.id===e)?.parentId??null));if(o.size>1){e({error:`Les éléments à grouper doivent appartenir au même groupe.`});return}let s=[...o][0]??null,c=te(k(n.nodes)),l=re(c,a);if(!l)return;let u=E(c,s),d=lt(),f=new Set(a),p={id:d,type:`group`,name:`Groupe ${n.nodes.filter(e=>e.type===`group`).length+1}`,parentId:s,x:l.x-u.x,y:l.y-u.y,width:l.width,height:l.height,rotation:0,opacity:1};i(e=>{let t=e.nodes.map(e=>f.has(e.id)?{...e,parentId:d,x:e.x-p.x,y:e.y-p.y}:e),n=t.filter(e=>f.has(e.id)).at(-1),r=[];for(let e of t)f.has(e.id)?e.id===n.id&&r.push(p,...t.filter(e=>f.has(e.id))):r.push(e);return{...e,nodes:r}}),e(e=>({selectedIds:[d],expandedIds:[...e.expandedIds,d]}))},detachSelected:()=>{let{design:e,selectedIds:n}=t();if(!e)return;let r=e.nodes.filter(e=>n.includes(e.id)&&e.type===`instance`);r.length!==0&&i(e=>{let t=b(e.nodes),n=[];for(let i of e.nodes){if(!r.some(e=>e.id===i.id)){n.push(i);continue}n.push({...i,type:`group`,componentId:void 0});let a=(t.get(i.componentId??``)??[]).map(e=>e.id),o=pt(e.nodes,a,0),s=new Set(o.filter(e=>!o.some(t=>t.id===e.parentId)).map(e=>e.id));for(let e of o)n.push(s.has(e.id)?{...e,parentId:i.id}:e)}return{...e,nodes:n}})},ungroupSelected:()=>{let{design:n,selectedIds:r}=t();if(!n)return;let a=new Set(n.nodes.filter(e=>r.includes(e.id)&&e.type===`group`).map(e=>e.id));if(a.size===0)return;if(wt(n.nodes,a).length>0){e({error:`Ce groupe est encore reproduit par des instances : détachez-les ou supprimez-les d’abord.`});return}let o=[];i(e=>{let t=new Map(e.nodes.map(e=>[e.id,e])),n=e=>{let n=0,r=0,i=e;for(;i!==null&&a.has(i);){let e=t.get(i);n+=e.x,r+=e.y,i=e.parentId}return{parentId:i,dx:n,dy:r}},r=[];for(let t of e.nodes){if(a.has(t.id))continue;let e=n(t.parentId);if(e.parentId===t.parentId){r.push(t);continue}o.push(t.id),r.push({...t,parentId:e.parentId,x:t.x+e.dx,y:t.y+e.dy})}return{...e,nodes:r}}),e({selectedIds:o})},reorderSelected:e=>{let{design:n,selectedIds:r}=t();!n||r.length===0||i(t=>({...t,nodes:ae(t.nodes,r,e)}))},patchArtboard:e=>{i(t=>({...t,...e}))},beginHistory:()=>{let n=t().design;n&&e(e=>({past:[...e.past,bt(n)].slice(-100),future:[]}))},undo:()=>{let r=t();if(!r.design||r.past.length===0)return;let i=r.past[r.past.length-1];e({design:a(i,r.design),past:r.past.slice(0,-1),future:[...r.future,bt(r.design)],editingTextId:null}),n()},redo:()=>{let r=t();if(!r.design||r.future.length===0)return;let i=r.future[r.future.length-1];e({design:a(i,r.design),future:r.future.slice(0,-1),past:[...r.past,bt(r.design)],editingTextId:null}),n()},flushSave:async()=>{xt&&=(clearTimeout(xt),null),await r()}}}),Ct=e=>Math.min(8,Math.max(.05,e));function wt(e,t){return e.filter(e=>e.type===`instance`&&e.componentId!==void 0&&t.has(e.componentId)&&!t.has(e.id))}function Tt(e){if(!e.some(e=>et.includes(e.type)))return e;let t=te(k(e));return e.map(e=>{if(!et.includes(e.type))return e;let n=D(t,e.id);return e.width===n.width&&e.height===n.height?e:{...e,width:n.width,height:n.height}})}function Et(e,t,n,r){if(r)return t;let i=[t,...x(e,t).map(e=>e.id)];return n.find(e=>i.includes(e))??S(e,t)?.id??t}function Dt(e,t,n){let r=[...x(e,t)].reverse().map(e=>e.id);if(r.push(t),n.length===1){let e=r.indexOf(n[0]);if(e>=0)return r[Math.min(e+1,r.length-1)]}return r[0]}var Ot=`mcp-design.remarks-show-sent`;function kt(){try{return localStorage.getItem(Ot)!==`false`}catch{return!0}}function At(e){F.getState().setError(e.message)}var I=Qe((e,t)=>{function n(t){e({remarks:t.remarks,rounds:t.rounds,file:t.file})}return{mode:`edit`,remarks:[],rounds:[],file:``,composer:null,saving:!1,hoveredId:null,focusedId:null,showSent:kt(),finishOpen:!1,roundsOpen:!1,setMode:async n=>{if(n===t().mode)return;let r=F.getState();n===`remarks`&&(r.saveState===`saving`&&await r.flushSave(),r.setSelection([]),r.setTool(`select`)),e({mode:n,composer:null,hoveredId:null,focusedId:null})},refresh:async()=>{try{n(await N.listRemarks())}catch(e){At(e)}},openPageComposer:()=>e({composer:{kind:`page`,text:``}}),openNodeComposer:n=>{let r=t().composer;e({composer:{kind:`node`,nodeId:n,text:r?.text??``,capture:r&&r.kind!==`page`?r.capture:!0}})},openAreaComposer:(n,r)=>{let i=t().composer;e({composer:{kind:`area`,box:n,hits:r,elementIds:r.filter(e=>!e.partial).map(e=>e.id),text:i?.text??``,capture:i&&i.kind!==`page`?i.capture:!0}})},setComposerText:n=>{let r=t().composer;r&&e({composer:{...r,text:n}})},toggleComposerCapture:()=>{let n=t().composer;n&&n.kind!==`page`&&e({composer:{...n,capture:!n.capture}})},toggleAreaElement:n=>{let r=t().composer;if(r?.kind!==`area`)return;let i=r.elementIds.includes(n)?r.elementIds.filter(e=>e!==n):[...r.elementIds,n];e({composer:{...r,elementIds:i}})},closeComposer:()=>e({composer:null}),closeComposerIfEmpty:()=>{t().composer?.text.trim()===``&&e({composer:null})},saveComposer:async()=>{let{composer:r,saving:i}=t(),a=F.getState().design;if(!r||!a||i||r.text.trim()===``)return;let o=r.kind===`page`?{kind:`page`}:r.kind===`node`?{kind:`node`,nodeId:r.nodeId}:{kind:`area`,box:r.box,elementIds:r.hits.filter(e=>r.elementIds.includes(e.id)).map(e=>e.id)};e({saving:!0});try{let t=await N.addRemark({designId:a.id,target:o,text:r.text,capture:r.kind!==`page`&&r.capture});n(t),e(e=>({composer:e.composer===r?null:e.composer,focusedId:t.remark.id}))}catch(e){At(e)}finally{e({saving:!1})}},updateText:async(e,t)=>{try{return n(await N.updateRemark(e,t)),!0}catch(e){return At(e),!1}},remove:async t=>{try{n(await N.deleteRemark(t)),e(e=>({hoveredId:e.hoveredId===t?null:e.hoveredId,focusedId:e.focusedId===t?null:e.focusedId}))}catch(e){At(e)}},submit:async(e,t)=>{try{let r=await N.submitFeedback(e,t);return n(r),r.round}catch(e){return At(e),null}},setHovered:t=>e({hoveredId:t}),setFocused:t=>e({focusedId:t}),setShowSent:t=>{try{localStorage.setItem(Ot,String(t))}catch{}e({showSent:t})},renameRound:async(e,t)=>{try{n(await N.renameRound(e,t))}catch(e){At(e)}},setRemarkProcessed:async(e,t,r)=>{try{n(await N.setRemarkProcessed(e,t,r))}catch(e){At(e)}},setRoundsProcessed:async(e,t)=>{try{n(await N.setRoundsProcessed(e,t))}catch(e){At(e)}},setFinishOpen:t=>e({finishOpen:t}),setRoundsOpen:t=>e({roundsOpen:t,composer:null})}});function jt(e,t){return e.filter(e=>e.status===`draft`&&(t===void 0||e.designId===t))}function Mt(e,t,n,r){if(n)return se(t);let i=[t,...x(e,t).map(e=>e.id)];return se(r!==null&&i.includes(r)?Dt(e,t,[r]):Et(e,t,[],!1))}function Nt(e,t){let n=e.target;if(n.kind===`page`)return null;if(n.kind===`area`)return{box:n.box,missing:!1};let r=t.bounds.get(n.element.id);return r?{box:r,missing:!1}:{box:n.box,missing:!0}}var Pt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),L=o(((e,t)=>{t.exports=Pt()}))();function R({name:e,size:t=14,strokeWidth:n=2}){let r=de(e);if(!r)throw Error(`Unknown icon "${e}".`);return(0,L.jsx)(`svg`,{className:`ui-icon`,width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:n,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:r.map(je).join(``)}})}function Ft(e){let t=I(e=>e.remarks),n=I(e=>e.showSent);return(0,_.useMemo)(()=>t.filter(t=>t.designId===e&&(n||t.status===`draft`)),[t,e,n])}function It(e,t){return e?.kind===`node`?D(t,e.nodeId):e?.kind===`area`?e.box:null}function Lt({designId:e,layout:t,hoverId:n}){let r=Ft(e),i=I(e=>e.composer),a=I(e=>e.hoveredId),o=I(e=>e.focusedId),s=It(i,t),c=i?.kind===`node`?i.nodeId:null;return(0,L.jsxs)(`g`,{className:`remark-shapes`,children:[r.map(e=>{let n=Nt(e,t);if(!n)return null;let r=e.id===a||e.id===o;return e.target.kind===`node`&&!r?null:(0,L.jsx)(`rect`,{className:`remark-frame`,"data-status":e.status,"data-highlighted":r||void 0,x:n.box.x,y:n.box.y,width:n.box.width,height:n.box.height,vectorEffect:`non-scaling-stroke`},e.id)}),n&&n!==c&&(0,L.jsx)(Rt,{className:`remark-hover`,box:D(t,n)}),s&&(0,L.jsx)(Rt,{className:`remark-aim`,box:s})]})}function Rt({className:e,box:t}){return(0,L.jsx)(`rect`,{className:e,x:t.x,y:t.y,width:t.width,height:t.height,vectorEffect:`non-scaling-stroke`})}function zt({design:e,nodes:t,layout:n,zoom:r,hoverId:i}){let a=Ft(e.id),o=I(e=>e.composer),s=I(e=>e.hoveredId),c=I(e=>e.focusedId),l=I(e=>e.setFocused),u=I(e=>e.closeComposer);(0,_.useEffect)(()=>u,[e.id,u]);let d=a.filter(e=>e.target.kind===`page`),f=o?.kind===`node`?o.nodeId:null,p=i&&i!==f?D(n,i):null;return(0,L.jsxs)(L.Fragment,{children:[d.length>0&&(0,L.jsxs)(`button`,{type:`button`,className:`remark-page-chip`,onPointerDown:e=>e.stopPropagation(),onClick:()=>l(d[0].id),children:[(0,L.jsx)(R,{name:`file-text`,size:12}),d.length===1?`1 remarque sur la page`:`${d.length} remarques sur la page`]}),p&&(0,L.jsx)(`div`,{className:`remark-hover-tag`,style:{left:p.x*r,top:p.y*r},children:Be(t,i).join(` › `)}),a.map(e=>{let t=Nt(e,n);if(!t||e.number===null)return null;let i=e.target.kind===`node`?{x:t.box.x+t.box.width,y:t.box.y}:{x:t.box.x,y:t.box.y};return(0,L.jsx)(`button`,{type:`button`,className:`remark-pin`,"data-status":e.status,"data-highlighted":e.id===s||e.id===c||void 0,"data-missing":t.missing||void 0,style:{left:i.x*r,top:i.y*r},title:t.missing?`Élément supprimé depuis la remarque`:e.text,onPointerDown:e=>e.stopPropagation(),onClick:()=>l(e.id),children:e.number},e.id)}),o&&o.kind!==`page`&&(0,L.jsx)(Vt,{composer:o,design:e,layout:n,zoom:r})]})}var Bt=10;function Vt({composer:e,design:t,layout:n,zoom:r}){let i=I(e=>e.saving),a=I(e=>e.setComposerText),o=I(e=>e.toggleComposerCapture),s=I(e=>e.toggleAreaElement),c=I(e=>e.openNodeComposer),l=I(e=>e.closeComposer),u=I(e=>e.saveComposer),d=(0,_.useRef)(null),f=(0,_.useRef)(null),p=It(e,n),m=e.kind===`node`?e.nodeId:null,h=e.kind===`area`?e.box:null;(0,_.useEffect)(()=>{d.current?.focus({preventScroll:!0})},[e.kind,m]),(0,_.useLayoutEffect)(()=>{let e=f.current,t=e?.closest(`.canvas-viewport`);if(!e||!t)return;e.style.top=`${(p.y+p.height)*r+Bt}px`,e.style.transform=``;let n=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=i.top-n.top-(p.height*r+20);i.bottom>n.bottom&&a>n.bottom-i.top&&(e.style.top=`${p.y*r-Bt}px`,e.style.transform=`translateY(-100%)`)});let g=(0,_.useMemo)(()=>h?Fe(t,h,{imageHref:N.imageUrl}):null,[h,t]),v=e.text.trim()!==``&&!i;return(0,L.jsxs)(`div`,{ref:f,className:`remark-composer`,style:{left:p.x*r},onPointerDown:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`remark-composer-head`,children:[(0,L.jsx)(R,{name:e.kind===`node`?`mouse-pointer-click`:`square-dashed-mouse-pointer`}),(0,L.jsx)(`h2`,{children:e.kind===`node`?`Remarque sur un élément`:`Remarque sur une zone`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Annuler (Échap)`,onClick:l,children:(0,L.jsx)(R,{name:`x`})})]}),e.kind===`node`?(0,L.jsxs)(`div`,{className:`remark-composer-section`,children:[(0,L.jsxs)(`div`,{className:`remark-breadcrumb`,children:[[...x(t.nodes,e.nodeId)].reverse().map(e=>(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`button`,{type:`button`,className:`link-button`,onClick:()=>c(e.id),children:e.name}),(0,L.jsx)(`span`,{className:`remark-breadcrumb-sep`,children:`›`})]},e.id)),(0,L.jsx)(`span`,{className:`remark-chip`,children:t.nodes.find(t=>t.id===e.nodeId)?.name})]}),(0,L.jsx)(`p`,{className:`remark-hint`,children:`Cliquez sur un niveau pour viser un parent ; Alt + clic sur la planche vise l’élément exact.`})]}):(0,L.jsxs)(`div`,{className:`remark-composer-section`,children:[(0,L.jsx)(`div`,{className:`remark-preview`,role:`img`,"aria-label":`Aperçu de la zone`,dangerouslySetInnerHTML:{__html:g}}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`x `,Math.round(e.box.x),`, y `,Math.round(e.box.y),` · `,Math.round(e.box.width),` ×`,` `,Math.round(e.box.height),` px`]}),(0,L.jsxs)(`div`,{className:`remark-hits-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Éléments détectés`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e.elementIds.length,` sur `,e.hits.length,` cité`,e.elementIds.length>1?`s`:``]})]}),e.hits.length===0?(0,L.jsx)(`p`,{className:`remark-hint`,children:`Aucun élément dans cette zone.`}):(0,L.jsx)(`ul`,{className:`remark-hits`,children:e.hits.map(t=>(0,L.jsx)(`li`,{children:(0,L.jsxs)(`label`,{"data-off":!e.elementIds.includes(t.id)||void 0,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:e.elementIds.includes(t.id),onChange:()=>s(t.id)}),(0,L.jsx)(`span`,{className:`remark-hit-name`,children:t.name}),(0,L.jsxs)(`span`,{className:`remark-hit-kind`,children:[t.type,t.partial?` · en partie`:``]})]})},t.id))})]}),(0,L.jsx)(`textarea`,{ref:d,className:`remark-textarea`,rows:3,placeholder:`Ce que l'agent doit revoir…`,value:e.text,onChange:e=>a(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&l(),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&u()}}),(0,L.jsxs)(`label`,{className:`remark-check`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:e.capture,onChange:o}),e.kind===`node`?`Joindre une capture de l'élément`:`Joindre une capture de la zone`]}),(0,L.jsxs)(`div`,{className:`remark-composer-foot`,children:[(0,L.jsx)(`span`,{className:`remark-hint`,children:`Ctrl + Entrée · Échap`}),(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:l,children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:!v,onClick:()=>void u(),children:i?`Enregistrement…`:`Enregistrer`})]})]})}var Ht=[{id:`nw`,cursor:`nwse-resize`,fx:0,fy:0},{id:`n`,cursor:`ns-resize`,fx:.5,fy:0},{id:`ne`,cursor:`nesw-resize`,fx:1,fy:0},{id:`e`,cursor:`ew-resize`,fx:1,fy:.5},{id:`se`,cursor:`nwse-resize`,fx:1,fy:1},{id:`s`,cursor:`ns-resize`,fx:.5,fy:1},{id:`sw`,cursor:`nesw-resize`,fx:0,fy:1},{id:`w`,cursor:`ew-resize`,fx:0,fy:.5}];function Ut(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y)}}function Wt(e,t,n){let r=Math.max(0,Math.round(e.x)),i=Math.max(0,Math.round(e.y));return{x:r,y:i,width:Math.max(0,Math.min(t,Math.round(e.x+e.width))-r),height:Math.max(0,Math.min(n,Math.round(e.y+e.height))-i)}}var Gt=4,Kt=400,qt=6,Jt=4;function Yt(e,t,n){return e!==null&&e.id===t&&n.timeStamp-e.time<Kt&&Math.abs(n.clientX-e.x)<qt&&Math.abs(n.clientY-e.y)<qt}function Xt(e,t,n,r){if(e.type===`line`)return t===`start`?{x:P(e.x+n),y:P(e.y+r),width:P(e.width-n),height:P(e.height-r)}:{width:P(e.width+n),height:P(e.height+r)};let i=y(e),{x:a,y:o,width:s,height:c}=i;t.includes(`w`)&&(a=i.x+n,s=i.width-n),t.includes(`e`)&&(s=i.width+n),t.includes(`n`)&&(o=i.y+r,c=i.height-r),t.includes(`s`)&&(c=i.height+r);let l=e.type===`text`?20:4;if(s<l&&(t.includes(`w`)&&(a=i.x+i.width-l),s=l),c<l&&(t.includes(`n`)&&(o=i.y+i.height-l),c=l),e.type===`icon`){let e=Math.max(l,Math.min(s,c));t.includes(`w`)&&(a=i.x+i.width-e),t.includes(`n`)&&(o=i.y+i.height-e),s=e,c=e}return{x:P(a),y:P(o),width:P(s),height:P(c)}}var Zt={imageHref:N.imageUrl};function Qt(){let e=F(e=>e.design),t=F(e=>e.tool),n=F(e=>e.zoom),r=F(e=>e.pan),i=F(e=>e.panMode),a=F(e=>e.selectedIds),o=F(e=>e.editingTextId),s=I(e=>e.mode===`remarks`),c=I(e=>e.composer?.kind===`node`?e.composer.nodeId:null),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=(0,_.useRef)(null),p=(0,_.useRef)({kind:`none`}),m=(0,_.useRef)(null),[h,g]=(0,_.useState)(0),[v,y]=(0,_.useState)(null),x=(0,_.useMemo)(()=>k(e?.nodes??[]),[e]),S=(0,_.useMemo)(()=>te(x),[x]),C=(0,_.useMemo)(()=>b(x),[x]),w=(0,_.useCallback)(e=>{let t=d.current?.getBoundingClientRect();return t?{x:(e.clientX-t.left-r.x)/n,y:(e.clientY-t.top-r.y)/n}:{x:0,y:0}},[r.x,r.y,n]);(0,_.useEffect)(()=>{let e=d.current;if(!e)return;let t=t=>{t.preventDefault();let n=F.getState(),r=e.getBoundingClientRect();if(t.ctrlKey||t.metaKey){n.zoomAround(n.zoom*Math.exp(-t.deltaY*.0015),{x:t.clientX-r.left,y:t.clientY-r.top});return}n.setPan({x:n.pan.x-t.deltaX,y:n.pan.y-t.deltaY})};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let ee=(0,_.useRef)(null);if((0,_.useLayoutEffect)(()=>{let t=d.current;if(!e||!t||ee.current===e.id)return;ee.current=e.id;let n=t.getBoundingClientRect(),r=F.getState();r.setPan({x:Math.max(32,(n.width-e.width*r.zoom)/2),y:Math.max(32,(n.height-e.height*r.zoom)/2)})},[e]),(0,_.useEffect)(()=>{if(p.current.kind===`none`)return;let e=e=>{let t=p.current,n=F.getState();if(t.kind===`pan`){n.setPan({x:t.panX+(e.clientX-t.clientX),y:t.panY+(e.clientY-t.clientY)});return}let r=w(e);if(t.kind===`create`)t.point=r,y({kind:`create`,box:Ut(t.origin,r)});else if(t.kind===`marquee`)t.point=r,y({kind:`marquee`,box:Ut(t.origin,r)});else if(t.kind===`remark`){if(!t.moved){if(!(Math.abs(e.clientX-t.screen.x)>=Jt||Math.abs(e.clientY-t.screen.y)>=Jt))return;t.moved=!0}t.point=r;let i=n.design;i&&y({kind:`area`,box:Wt(Ut(t.origin,r),i.width,i.height)})}else if(t.kind===`move`){if(!t.moved){if(!(Math.abs(e.clientX-t.screen.x)>=Jt||Math.abs(e.clientY-t.screen.y)>=Jt))return;t.moved=!0,n.beginHistory()}n.moveSelection(P(r.x-t.origin.x),P(r.y-t.origin.y),t.startNodes,{history:!1})}else if(t.kind===`resize`){let e=r.x-t.origin.x,i=r.y-t.origin.y;n.patchNodes([t.startNode.id],Xt(t.startNode,t.handle,e,i),{history:!1})}},t=()=>{let e=p.current,t=F.getState();if(e.kind===`create`){let n=e.point.x-e.origin.x,r=e.point.y-e.origin.y,i=Math.abs(n)<4&&Math.abs(r)<4;if(e.type===`line`)t.addNode(`line`,{x:P(e.origin.x),y:P(e.origin.y),...i?{}:{width:P(n),height:P(r)}});else{let n=e.type===`icon`?{icon:t.pendingIcon}:{};if(i)t.addNode(e.type,{...n,x:P(e.origin.x),y:P(e.origin.y)});else{let r=Ut(e.origin,e.point);t.addNode(e.type,{...n,x:P(r.x),y:P(r.y),width:P(r.width),height:P(r.height)})}}}else if(e.kind===`marquee`){let n=Ut(e.origin,e.point),r=(t.design?.nodes??[]).filter(e=>e.parentId===null).filter(e=>ht(D(S,e.id),n));t.setSelection(r.map(e=>e.id))}else if(e.kind===`remark`&&t.design){let n=I.getState();if(e.moved){let r=Wt(Ut(e.origin,e.point),t.design.width,t.design.height);r.width>=Gt&&r.height>=Gt&&n.openAreaComposer(r,ze(t.design.nodes,r))}else if(e.nodeId){let t=n.composer?.kind===`node`?n.composer.nodeId:null;n.openNodeComposer(Mt(x,e.nodeId,e.alt,t))}else n.closeComposerIfEmpty()}p.current={kind:`none`},y(null)};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[h,w,S,x]),!e)return null;let T=s?null:re(S,a),E=a.length===1?x.find(e=>e.id===a[0]):void 0,ne=!s&&E&&E.type!==`group`?E:void 0,ie=o?x.find(e=>e.id===o):void 0,ae=e=>{p.current=e,g(e=>e+1)},oe=e=>{ae({kind:`pan`,clientX:e.clientX,clientY:e.clientY,panX:r.x,panY:r.y}),e.preventDefault()},O=e=>{if(i||e.button===1){oe(e);return}if(e.button!==0)return;let n=w(e);if(s){let t={x:e.clientX,y:e.clientY};ae({kind:`remark`,origin:n,point:n,screen:t,nodeId:null,alt:!1,moved:!1})}else t===`select`?(m.current=null,F.getState().setSelection([]),ae({kind:`marquee`,origin:n,point:n})):ae({kind:`create`,type:t,origin:n,point:n});e.preventDefault()},ce=(e,n)=>{if(i||e.button===1){oe(e);return}if(e.button!==0)return;if(s){e.stopPropagation();let t=w(e),r={x:e.clientX,y:e.clientY};ae({kind:`remark`,origin:t,point:t,screen:r,nodeId:n.id,alt:e.altKey,moved:!1});return}if(t!==`select`)return;e.stopPropagation();let r=F.getState(),a=Yt(m.current,n.id,e);m.current={id:n.id,time:e.timeStamp,x:e.clientX,y:e.clientY};let o=se(e.altKey?n.id:a?Dt(x,n.id,r.selectedIds):Et(x,n.id,r.selectedIds,!1));if(e.shiftKey){r.toggleSelection(o);return}if(a&&o===n.id&&n.type===`text`){r.setSelection([n.id]),r.setEditingText(n.id);return}let c=r.selectedIds.includes(o);c||r.setSelection([o]);let l=c?r.selectedIds:[o],u=x.filter(e=>l.includes(e.id));ae({kind:`move`,origin:w(e),screen:{x:e.clientX,y:e.clientY},moved:!1,startNodes:structuredClone(u)})},le=(e,t)=>{e.button!==0||!ne||(e.stopPropagation(),F.getState().beginHistory(),ae({kind:`resize`,handle:t,origin:w(e),startNode:structuredClone(ne)}))},ue=e=>{let t=F.getState();ie&&t.patchNodes([ie.id],{text:e}),t.setEditingText(null)},de=e=>e.map(e=>{if(e.type===`group`){let t=D(S,e.id),n=S.origin.get(e.id)??{x:0,y:0},r={cx:t.x+t.width/2-n.x,cy:t.y+t.height/2-n.y};return(0,L.jsx)(`g`,{className:`canvas-group`,transform:Ce(e,r),opacity:e.opacity>=1?void 0:e.opacity,children:de(C.get(e.id)??[])},e.id)}return(0,L.jsx)(`g`,{className:`canvas-node`,"data-node-id":e.id,"data-hidden":e.id===o||void 0,onPointerDown:t=>ce(t,e),dangerouslySetInnerHTML:{__html:Me(e,Zt)}},e.id)});return(0,L.jsx)(`div`,{ref:d,className:`canvas-viewport`,"data-pan":i||void 0,onScroll:e=>{e.currentTarget.scrollTop=0,e.currentTarget.scrollLeft=0},onPointerDown:e=>{i||e.button===1?oe(e):e.button===0&&s?I.getState().closeComposerIfEmpty():e.button===0&&F.getState().setSelection([])},children:(0,L.jsxs)(`div`,{className:`canvas-stage`,style:{width:e.width*n,height:e.height*n,transform:`translate(${r.x}px, ${r.y}px)`},children:[(0,L.jsx)(`div`,{ref:f,className:`canvas-surface`,"data-tool":t,"data-mode":s?`remarks`:void 0,style:{width:e.width,height:e.height,background:e.background,transform:`scale(${n})`},onPointerDown:O,onPointerMove:e=>{if(!s||p.current.kind!==`none`)return;let t=e.target.closest(`[data-node-id]`)?.getAttribute(`data-node-id`)??null,n=t===null?null:Mt(x,t,e.altKey,c);n!==l&&u(n)},onPointerLeave:()=>u(null),children:(0,L.jsxs)(`svg`,{className:`canvas-svg`,width:e.width,height:e.height,viewBox:`0 0 ${e.width} ${e.height}`,children:[de(C.get(null)??[]),T&&(0,L.jsx)(`rect`,{className:`selection-frame`,x:T.x,y:T.y,width:T.width,height:T.height,vectorEffect:`non-scaling-stroke`}),s&&(0,L.jsx)(Lt,{designId:e.id,layout:S,hoverId:l}),v&&(0,L.jsx)(`rect`,{className:v.kind===`marquee`?`marquee`:v.kind===`area`?`remark-area-draft`:`creation-preview`,x:v.box.x,y:v.box.y,width:v.box.width,height:v.box.height,vectorEffect:`non-scaling-stroke`})]})}),!i&&ne&&(0,L.jsx)($t,{node:ne,layout:S,zoom:n,onStart:le}),s&&(0,L.jsx)(zt,{design:e,nodes:x,layout:S,zoom:n,hoverId:l}),!s&&ie?.type===`text`&&(0,L.jsx)(tn,{node:ie,box:D(S,ie.id),zoom:n,onCommit:ue})]})})}function $t({node:e,layout:t,zoom:n,onStart:r}){let i=D(t,e.id);if(e.type===`line`){let i=E(t,e.parentId);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(en,{cursor:`move`,left:(i.x+e.x)*n,top:(i.y+e.y)*n,onPointerDown:e=>r(e,`start`)}),(0,L.jsx)(en,{cursor:`move`,left:(i.x+e.x+e.width)*n,top:(i.y+e.y+e.height)*n,onPointerDown:e=>r(e,`end`)})]})}return(0,L.jsx)(L.Fragment,{children:Ht.map(e=>(0,L.jsx)(en,{cursor:e.cursor,left:(i.x+i.width*e.fx)*n,top:(i.y+i.height*e.fy)*n,onPointerDown:t=>r(t,e.id)},e.id))})}function en({left:e,top:t,cursor:n,onPointerDown:r}){return(0,L.jsx)(`div`,{className:`handle`,style:{left:e,top:t,cursor:n},onPointerDown:r})}function tn({node:e,box:t,zoom:n,onCommit:r}){let[i,a]=(0,_.useState)(e.text??``),o=(0,_.useRef)(null),s=ye(e);return(0,_.useEffect)(()=>{o.current?.focus(),o.current?.select()},[]),(0,L.jsx)(`textarea`,{ref:o,className:`text-editor`,value:i,onPointerDown:e=>e.stopPropagation(),onChange:e=>a(e.target.value),onBlur:()=>r(i),onKeyDown:e=>{e.stopPropagation(),(e.key===`Escape`||e.key===`Enter`&&(e.metaKey||e.ctrlKey))&&r(i)},style:{left:t.x*n,top:(t.y+s.blockOffset)*n,width:t.width*n,minHeight:s.blockHeight*n,fontSize:s.fontSize*n,lineHeight:`${s.lineStep*n}px`,fontFamily:e.fontFamily,fontWeight:e.fontWeight,fontStyle:e.fontStyle,textAlign:e.textAlign,color:e.color}})}function nn(e,t){return{name:e,path:t,children:[],designs:[],total:0}}function rn(e){let t=nn(``,``);for(let n of e){let e=(n.group??``).split(`/`).filter(e=>e.trim()!==``),r=t;for(let t of e){let e=r.path===``?t:`${r.path}/${t}`,n=r.children.find(t=>t.path===e);n||(n=nn(t,e),r.children.push(n)),r=n}r.designs.push(n)}let n=e=>(e.children.sort((e,t)=>an(e.name,t.name)),e.designs.sort((e,t)=>an(e.name,t.name)),e.total=e.designs.length+e.children.reduce((e,t)=>e+n(t),0),e.total);return n(t),t}function an(e,t){return e.localeCompare(t,void 0,{sensitivity:`base`,numeric:!0})}function on(e){if(e.designs.length>0)return e.designs[0];for(let t of e.children){let e=on(t);if(e)return e}return null}function sn(e,t){if(e.path===t)return e;for(let n of e.children)if(t===n.path||t.startsWith(`${n.path}/`))return sn(n,t);return null}function cn(e,t){let n=e.children.map(e=>cn(e,t)).filter(e=>e.total>0),r=e.designs.filter(t);return{...e,children:n,designs:r,total:r.length+n.reduce((e,t)=>e+t.total,0)}}function ln(e,t){let n=e.children.map(e=>t(e.name)?e:ln(e,t)).filter(e=>e.total>0),r=e.designs.filter(e=>t(e.name));return{...e,children:n,designs:r,total:r.length+n.reduce((e,t)=>e+t.total,0)}}function un(e){return e.children.flatMap(e=>[e.path,...un(e)])}function dn(e){return[...e.designs,...e.children.flatMap(dn)]}function fn(e){let t=e.split(/[\s_-]+/).filter(e=>/[\p{L}\p{N}]/u.test(e));return(t.length>=2?t[0][0]+t[1][0]:(t[0]??`?`).slice(0,2)).toUpperCase()}function pn(e){let t=new Set;for(let n of e){let e=(n.group??``).split(`/`).filter(e=>e.trim()!==``);for(let n=1;n<=e.length;n++)t.add(e.slice(0,n).join(`/`))}return[...t].sort()}var mn=[{label:`Desktop 1440 × 900`,width:1440,height:900},{label:`Mobile 375 × 812`,width:375,height:812},{label:`Carré 1080 × 1080`,width:1080,height:1080}],hn=`mcp-design.collapsed-groups`,gn=`mcp-design.sidebar-scope`,_n=[`#1b4dd6`,`#0f766e`,`#c2410c`,`#7c3aed`,`#db2777`,`#475569`,`#a16207`,`#15803d`];function vn(e,t,n){try{let r=localStorage.getItem(e);return r===null?n:t(JSON.parse(r))}catch{return n}}function yn(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function bn(e,t){return`${e} ${t}${e>1?`s`:``}`}function xn(e){return e.normalize(`NFD`).replace(/\p{Diacritic}/gu,``).toLowerCase()}function Sn(e){let t=new Date(e),n=(Date.now()-t.getTime())/1e3;if(n<60)return`à l'instant`;if(n<3600)return`il y a ${Math.floor(n/60)} min`;if(n<86400)return`il y a ${Math.floor(n/3600)} h`;if(n<2592e3)return`il y a ${Math.floor(n/86400)} j`;let r=t.getFullYear()===new Date().getFullYear();return t.toLocaleDateString(`fr`,{day:`numeric`,month:`short`,year:r?void 0:`numeric`})}function Cn(e){let t=0;for(let n of e)t=t*31+n.charCodeAt(0)|0;return _n[Math.abs(t)%_n.length]}function wn(e){let t=dn(e),n=t.filter(e=>e.pendingChanges>0).length;return`${bn(t.length,`page`)} · ${n} à synchroniser`}function Tn(e,t,n){(0,_.useEffect)(()=>{if(!e)return;let r=e=>{t.current?.contains(e.target)||n()},i=e=>{e.key===`Escape`&&n()};return document.addEventListener(`mousedown`,r),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`keydown`,i)}},[e,t,n])}function En(){let e=F(e=>e.designs),t=F(e=>e.createDesign),n=F(e=>e.setDesignGroup),r=I(e=>e.remarks),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(()=>vn(hn,e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],[])),[m,h]=(0,_.useState)(()=>vn(gn,e=>typeof e==`string`?e:null,null)),[g,v]=(0,_.useState)(``),[y,b]=(0,_.useState)(`all`),[x,S]=(0,_.useState)(null),C=(0,_.useMemo)(()=>rn(e),[e]),w=(0,_.useMemo)(()=>pn(e),[e]),ee=(0,_.useMemo)(()=>m===null?null:sn(C,m),[C,m]),T=ee??C,te=ee?.path??null,E=(0,_.useMemo)(()=>{let e=new Map;for(let t of jt(r))e.set(t.designId,(e.get(t.designId)??0)+1);return e},[r]),D=(0,_.useMemo)(()=>{let e=xn(g.trim());return e===``?T:ln(T,t=>xn(t).includes(e))},[T,g]),ne=(0,_.useMemo)(()=>dn(D),[D]),re=ne.filter(e=>e.pendingChanges>0).length,ie=ne.filter(e=>E.has(e.id)).length,ae=(0,_.useMemo)(()=>y===`pending`?cn(D,e=>e.pendingChanges>0):y===`remarks`?cn(D,e=>E.has(e.id)):D,[D,y,E]),oe=g.trim()!==``||y!==`all`,se=e=>{h(e),yn(gn,e)},O=e=>{p(t=>{let n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return yn(hn,n),n})},k=(0,_.useMemo)(()=>un(T),[T]),ce=k.length>0&&k.every(e=>f.includes(e)),le=()=>{p(e=>{let t=ce?e.filter(e=>!k.includes(e)):[...new Set([...e,...k])];return yn(hn,t),t})},ue=()=>{i||l(te??``),a(e=>!e)},de=async e=>{e.preventDefault();let n=o.trim();n&&(await t({name:n,group:c.trim()||null,...mn[u]}),s(``),a(!1))},A=t=>r=>{if(!r.dataTransfer.types.includes(`text/design-id`))return;r.preventDefault(),r.stopPropagation(),S(null);let i=r.dataTransfer.getData(`text/design-id`);if(!i)return;let a=e.find(e=>e.id===i);!a||(a.group??null)===t||n(i,t)},j=e=>t=>{t.dataTransfer.types.includes(`text/design-id`)&&(t.preventDefault(),t.stopPropagation(),t.dataTransfer.dropEffect=`move`,S(e??``))},fe=e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||S(null)},pe=[{id:`all`,label:`Toutes`,count:ne.length,title:`Toutes les pages`},{id:`pending`,label:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`pending-dot`}),`À synchroniser`]}),count:re,title:`Pages modifiées depuis leur dernière récupération par l'agent`},{id:`remarks`,label:(0,L.jsx)(R,{name:`message-square`,size:12,strokeWidth:2.5}),count:ie,title:`Pages avec des remarques non transmises`}];return(0,L.jsxs)(`aside`,{className:`sidebar`,children:[(0,L.jsx)(`datalist`,{id:`design-groups`,children:w.map(e=>(0,L.jsx)(`option`,{value:e},e))}),(0,L.jsxs)(`div`,{className:`sidebar-top`,children:[(0,L.jsx)(Dn,{tree:C,current:ee,onChange:se}),(0,L.jsxs)(`div`,{className:`sidebar-search-row`,children:[(0,L.jsxs)(`label`,{className:`sidebar-search`,children:[(0,L.jsx)(R,{name:`search`,size:15}),(0,L.jsx)(`input`,{type:`search`,placeholder:`Rechercher page ou dossier`,value:g,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Escape`&&v(``)}})]}),(0,L.jsx)(`button`,{type:`button`,className:`collapse-all-button`,disabled:oe||k.length===0,title:ce?`Tout déplier`:`Tout replier`,"aria-label":ce?`Tout déplier`:`Tout replier`,onClick:le,children:(0,L.jsx)(R,{name:ce?`chevrons-up-down`:`chevrons-down-up`,size:16})})]}),(0,L.jsx)(`div`,{className:`sidebar-filters`,role:`radiogroup`,"aria-label":`Filtrer les pages`,children:pe.map(e=>(0,L.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":y===e.id,className:`filter-chip`,"data-kind":e.id,"data-active":y===e.id||void 0,title:e.title,onClick:()=>b(e.id),children:[e.label,(0,L.jsx)(`span`,{className:`filter-chip-count`,children:e.count})]},e.id))})]}),(0,L.jsxs)(`div`,{className:`design-tree`,"data-drop":x===(te??``)||void 0,onDragOver:j(te),onDragLeave:fe,onDrop:A(te),children:[(0,L.jsx)(kn,{branch:ae,rootLabel:ee?null:`Hors groupe`,collapsed:f,forceOpen:oe,dropTarget:x,draftCounts:E,onToggle:O,onDragOverGroup:j,onDragLeaveGroup:fe,onDropGroup:A}),e.length===0?(0,L.jsxs)(`p`,{className:`empty-hint`,children:[`Aucune page. Créez-en une ici, ou demandez à l'agent d'en générer avec l'outil `,(0,L.jsx)(`code`,{children:`create_design`}),`.`]}):ae.total===0&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Aucune page ne correspond.`})]}),(0,L.jsxs)(`div`,{className:`sidebar-foot`,children:[i&&(0,L.jsxs)(`form`,{className:`create-form`,onSubmit:de,children:[(0,L.jsx)(`input`,{autoFocus:!0,placeholder:`Nom de la page`,value:o,onChange:e=>s(e.target.value)}),(0,L.jsx)(`input`,{list:`design-groups`,placeholder:`Groupe (optionnel, ex. Marketing/Landing)`,value:c,onChange:e=>l(e.target.value)}),(0,L.jsx)(`select`,{value:u,onChange:e=>d(Number(e.target.value)),children:mn.map((e,t)=>(0,L.jsx)(`option`,{value:t,children:e.label},e.label))}),(0,L.jsx)(`button`,{type:`submit`,className:`primary-button`,disabled:o.trim()===``,children:`Créer`})]}),(0,L.jsx)(`button`,{type:`button`,className:`new-page-button`,"data-open":i||void 0,onClick:ue,children:i?`Annuler`:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(R,{name:`plus`,size:16,strokeWidth:2.25}),`Nouvelle page`]})})]})]})}function Dn({tree:e,current:t,onChange:n}){let[r,i]=(0,_.useState)(!1),a=(0,_.useRef)(null);Tn(r,a,(0,_.useCallback)(()=>i(!1),[]));let o=e=>{n(e),i(!1)};return(0,L.jsxs)(`div`,{className:`scope-picker`,ref:a,children:[(0,L.jsxs)(`button`,{type:`button`,className:`scope-button`,"aria-haspopup":`listbox`,"aria-expanded":r,onClick:()=>i(e=>!e),children:[(0,L.jsx)(On,{branch:t}),(0,L.jsxs)(`span`,{className:`scope-text`,children:[(0,L.jsx)(`span`,{className:`scope-name`,children:t?.name??`Tous les groupes`}),(0,L.jsx)(`span`,{className:`scope-summary`,children:wn(t??e)})]}),(0,L.jsx)(R,{name:`chevrons-up-down`,size:16})]}),r&&(0,L.jsx)(`ul`,{className:`scope-menu`,role:`listbox`,children:[null,...e.children].map(n=>{let r=(n?.path??null)===(t?.path??null);return(0,L.jsx)(`li`,{children:(0,L.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r,className:`scope-option`,onClick:()=>o(n?.path??null),children:[(0,L.jsx)(On,{branch:n,small:!0}),(0,L.jsx)(`span`,{className:`scope-option-name`,children:n?.name??`Tous les groupes`}),(0,L.jsx)(`span`,{className:`scope-option-count`,children:(n??e).total}),r&&(0,L.jsx)(R,{name:`check`,size:14,strokeWidth:2.5})]})},n?.path??``)})})]})}function On({branch:e,small:t}){return(0,L.jsx)(`span`,{className:`group-avatar`,"data-small":t||void 0,style:{background:e?Cn(e.name):`var(--ink)`},"aria-hidden":`true`,children:e?fn(e.name):(0,L.jsx)(R,{name:`layout-grid`,size:t?12:16})})}function kn({branch:e,rootLabel:t=null,collapsed:n,forceOpen:r,dropTarget:i,draftCounts:a,onToggle:o,onDragOverGroup:s,onDragLeaveGroup:c,onDropGroup:l}){return(0,L.jsxs)(L.Fragment,{children:[e.children.map(e=>{let t=!r&&n.includes(e.path);return(0,L.jsxs)(`div`,{className:`design-group`,"data-drop":i===e.path||void 0,onDragOver:s(e.path),onDragLeave:c,onDrop:l(e.path),children:[(0,L.jsxs)(`button`,{type:`button`,className:`design-group-header`,"aria-expanded":!t,onClick:()=>o(e.path),children:[(0,L.jsx)(R,{name:t?`chevron-right`:`chevron-down`,size:14,strokeWidth:2.25}),(0,L.jsx)(R,{name:t?`folder`:`folder-open`,size:16,strokeWidth:1.75}),(0,L.jsx)(`span`,{className:`design-group-name`,children:e.name}),(0,L.jsx)(`span`,{className:`design-group-count`,children:e.total})]}),!t&&(0,L.jsx)(`div`,{className:`design-group-body`,children:(0,L.jsx)(kn,{branch:e,collapsed:n,forceOpen:r,dropTarget:i,draftCounts:a,onToggle:o,onDragOverGroup:s,onDragLeaveGroup:c,onDropGroup:l})})]},e.path)}),e.designs.length>0&&(0,L.jsxs)(L.Fragment,{children:[t&&e.children.length>0&&(0,L.jsx)(`p`,{className:`design-tree-label`,children:t}),(0,L.jsx)(`ul`,{className:`design-list`,children:e.designs.map(e=>(0,L.jsx)(jn,{entry:e,drafts:a.get(e.id)??0},e.id))})]})]})}function An({width:e,height:t}){let n={width:36,height:26},r=e/t,i=r>n.width/n.height?{width:n.width,height:Math.max(6,Math.round(n.width/r))}:{width:Math.max(6,Math.round(n.height*r)),height:n.height};return(0,L.jsx)(`span`,{className:`design-thumb`,"aria-hidden":`true`,children:(0,L.jsx)(`span`,{className:`design-thumb-page`,style:i})})}function jn({entry:e,drafts:t}){let n=F(t=>t.design?.id===e.id),r=F(e=>e.openDesign),i=F(e=>e.removeDesign),a=F(e=>e.duplicateDesign),o=F(e=>e.setDesignGroup),[s,c]=(0,_.useState)(`closed`),[l,u]=(0,_.useState)(``),d=(0,_.useRef)(null),f=(0,_.useCallback)(()=>c(`closed`),[]);return Tn(s!==`closed`,d,f),(0,L.jsxs)(`li`,{ref:d,className:`design-card`,"data-active":n||void 0,"data-menu":s!==`closed`||void 0,children:[(0,L.jsxs)(`button`,{type:`button`,className:`design-card-main`,draggable:!0,onDragStart:t=>{t.dataTransfer.setData(`text/design-id`,e.id),t.dataTransfer.effectAllowed=`move`},title:e.name,onClick:()=>void r(e.id),children:[(0,L.jsx)(An,{width:e.width,height:e.height}),(0,L.jsxs)(`span`,{className:`design-card-text`,children:[(0,L.jsx)(`span`,{className:`design-card-name`,children:e.name}),(0,L.jsxs)(`span`,{className:`design-card-meta`,children:[e.width,` × `,e.height,` · `,Sn(e.updatedAt)]})]})]}),(0,L.jsxs)(`span`,{className:`design-card-status`,children:[t>0&&(0,L.jsxs)(`span`,{className:`remark-badge`,title:`${bn(t,`remarque`)} non transmise${t>1?`s`:``}`,children:[(0,L.jsx)(R,{name:`message-square`,size:10,strokeWidth:2.5}),t]}),e.pendingChanges>0&&(0,L.jsx)(`span`,{className:`pending-dot`,title:`${bn(e.pendingChanges,`modification`)} à synchroniser`,"aria-label":`${bn(e.pendingChanges,`modification`)} à synchroniser`})]}),(0,L.jsx)(`button`,{type:`button`,className:`design-card-more`,title:`Plus d'actions`,"aria-haspopup":`menu`,"aria-expanded":s!==`closed`,onClick:()=>c(e=>e===`closed`?`actions`:`closed`),children:(0,L.jsx)(R,{name:`ellipsis`,size:16})}),s===`actions`&&(0,L.jsxs)(`div`,{className:`card-menu`,role:`menu`,children:[(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{u(e.group??``),c(`move`)},children:[(0,L.jsx)(R,{name:`folder-input`,size:16,strokeWidth:1.75}),`Déplacer vers…`]}),(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{c(`closed`),a(e.id,`${e.name} (copie)`)},children:[(0,L.jsx)(R,{name:`copy`,size:16,strokeWidth:1.75}),`Dupliquer`]}),(0,L.jsx)(`hr`,{}),(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-danger":!0,onClick:()=>{c(`closed`),confirm(`Supprimer définitivement « ${e.name} » ?`)&&i(e.id)},children:[(0,L.jsx)(R,{name:`trash-2`,size:16,strokeWidth:1.75}),`Supprimer`]})]}),s===`move`&&(0,L.jsxs)(`form`,{className:`card-menu card-move`,onSubmit:t=>{t.preventDefault();let n=l.trim()||null;c(`closed`),n!==(e.group??null)&&o(e.id,n)},children:[(0,L.jsx)(`label`,{htmlFor:`move-${e.id}`,children:`Déplacer vers le groupe`}),(0,L.jsx)(`input`,{id:`move-${e.id}`,autoFocus:!0,list:`design-groups`,placeholder:`Vide : hors groupe`,value:l,onChange:e=>u(e.target.value)}),(0,L.jsxs)(`div`,{className:`card-move-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:f,children:`Annuler`}),(0,L.jsx)(`button`,{type:`submit`,className:`primary-button`,children:`Déplacer`})]})]})]})}var Mn=`modulepreload`,Nn=function(e,t){return new URL(e,t).href},Pn={},Fn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Nn(t,n),t=s(t),t in Pn)return;Pn[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Mn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},In=120;function Ln({name:e}){let t=(0,_.useMemo)(()=>(de(e)??[]).map(je).join(``),[e]);return(0,L.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,dangerouslySetInnerHTML:{__html:t}})}function Rn({current:e,onPick:t,onClose:n}){let[r,i]=(0,_.useState)(``),[a,o]=(0,_.useState)(null),s=(0,_.useRef)(null),c=(0,_.useRef)(null);(0,_.useEffect)(()=>{s.current?.focus();let e=!1;return Fn(()=>import(`./search-DHQx5ZT0.js`).then(t=>{e||o(()=>t.searchIcons)}),[],import.meta.url),()=>{e=!0}},[]),(0,_.useEffect)(()=>{let e=e=>{c.current?.contains(e.target)||n()},t=e=>{e.key===`Escape`&&(e.stopPropagation(),n())};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t,!0),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t,!0)}},[n]);let l=(0,_.useMemo)(()=>{let e=r.trim();return e===``?fe.slice(0,In):a?a(e,In).map(e=>e.name):A().filter(t=>t.includes(e.toLowerCase())).slice(0,In)},[r,a]);return(0,L.jsxs)(`div`,{className:`icon-picker`,ref:c,children:[(0,L.jsx)(`input`,{ref:s,type:`search`,className:`icon-picker-search`,placeholder:`Chercher une icône (en anglais)…`,value:r,onChange:e=>i(e.target.value)}),l.length===0?(0,L.jsxs)(`p`,{className:`empty-hint`,children:[`Aucune icône pour « `,r,` ». Essayez un terme anglais plus simple.`]}):(0,L.jsx)(`div`,{className:`icon-picker-grid`,children:l.map(n=>(0,L.jsxs)(`button`,{type:`button`,className:`icon-picker-cell`,"data-active":n===e||void 0,title:n,onClick:()=>t(n),children:[(0,L.jsx)(Ln,{name:n}),(0,L.jsx)(`span`,{children:n})]},n))})]})}var zn=[300,400,500,600,700,800],Bn=[{value:`left`,glyph:`⇤`,label:`Aligner à gauche`},{value:`center`,glyph:`↔`,label:`Centrer`},{value:`right`,glyph:`⇥`,label:`Aligner à droite`}],Vn=[{value:`cover`,label:`Couvrir`,title:`Remplit la boîte, rogne le débordement`},{value:`contain`,label:`Contenir`,title:`Montre toute l'image dans la boîte`},{value:`fill`,label:`Étirer`,title:`Étire l'image aux dimensions de la boîte`}];function Hn({label:e,value:t,step:n=1,min:r,max:i,onChange:a}){return(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:e}),(0,L.jsx)(`input`,{type:`number`,step:n,min:r,max:i,value:t===void 0?``:P(t),onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&a(t)}})]})}function Un({label:e,value:t,onChange:n}){let r=t??`#000000`;return(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:e}),(0,L.jsxs)(`span`,{className:`color-input`,children:[(0,L.jsx)(`input`,{type:`color`,value:/^#[0-9a-f]{6}$/i.test(r)?r:`#000000`,onChange:e=>n(e.target.value)}),(0,L.jsx)(`input`,{type:`text`,value:r,onChange:e=>n(e.target.value)})]})]})}function Wn(){let[e,t]=(0,_.useState)(!1),n=F(e=>e.design),r=F(e=>e.selectedIds),i=F(e=>e.patchNodes),a=F(e=>e.patchArtboard),o=F(e=>e.deleteSelected),s=F(e=>e.duplicateSelected),c=F(e=>e.reorderSelected),l=F(e=>e.groupSelected),u=F(e=>e.ungroupSelected),d=F(e=>e.detachSelected),f=F(e=>e.setSelection);if(!n)return null;let p=n.nodes.filter(e=>r.includes(e.id)),m=e=>i(r,e);if(p.length===0)return(0,L.jsxs)(`aside`,{className:`inspector`,children:[(0,L.jsx)(`h2`,{children:`Planche`}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Nom`}),(0,L.jsx)(`input`,{value:n.name,onChange:e=>a({name:e.target.value})})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Largeur`,value:n.width,min:1,onChange:e=>a({width:Math.max(1,e)})}),(0,L.jsx)(Hn,{label:`Hauteur`,value:n.height,min:1,onChange:e=>a({height:Math.max(1,e)})})]}),(0,L.jsx)(Un,{label:`Fond`,value:n.background,onChange:e=>a({background:e})}),(0,L.jsx)(`p`,{className:`empty-hint`,children:`Sélectionnez un élément pour modifier ses propriétés.`})]});let h=p.every(e=>e.type===p[0].type)?p[0].type:null,g=p[0],v=p.length>1;return(0,L.jsxs)(`aside`,{className:`inspector`,children:[(0,L.jsxs)(`h2`,{children:[v?`${p.length} éléments`:g.name,h&&(0,L.jsx)(`span`,{className:`inspector-type`,children:rt(h)})]}),!v&&(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Nom du calque`}),(0,L.jsx)(`input`,{value:g.name,onChange:e=>{let t=e.target.value;t.trim()!==``&&m({name:t})}})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`X`,value:g.x,onChange:e=>m({x:e})}),(0,L.jsx)(Hn,{label:`Y`,value:g.y,onChange:e=>m({y:e})})]}),h===`group`||h===`instance`?(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`L`}),(0,L.jsx)(`input`,{value:Math.round(g.width),readOnly:!0,title:`Déduit du contenu du groupe`})]}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`H`}),(0,L.jsx)(`input`,{value:Math.round(g.height),readOnly:!0,title:`Déduit du contenu du groupe`})]})]}):h===`icon`?(0,L.jsx)(`div`,{className:`field-row`,children:(0,L.jsx)(Hn,{label:`Taille`,value:g.width,min:1,onChange:e=>m({width:Math.max(1,e),height:Math.max(1,e)})})}):(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`L`,value:g.width,onChange:e=>m({width:e})}),(0,L.jsx)(Hn,{label:`H`,value:g.height,onChange:e=>m({height:e})})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Rotation`,value:g.rotation,onChange:e=>m({rotation:e})}),(0,L.jsx)(Hn,{label:`Opacité`,value:g.opacity,step:.05,min:0,max:1,onChange:e=>m({opacity:Math.min(1,Math.max(0,e))})})]}),h===`icon`&&(0,L.jsxs)(L.Fragment,{children:[!v&&(0,L.jsxs)(`div`,{className:`field icon-field`,children:[(0,L.jsx)(`span`,{children:`Icône`}),(0,L.jsxs)(`div`,{className:`tool-popover-anchor`,children:[(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,onClick:()=>t(e=>!e),children:g.icon??`Choisir…`}),e&&(0,L.jsx)(Rn,{current:g.icon,onPick:e=>{m(g.name===g.icon?{icon:e,name:e}:{icon:e}),t(!1)},onClose:()=>t(!1)})]})]}),(0,L.jsx)(Un,{label:`Couleur`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Épaisseur (/24)`,value:g.strokeWidth??2,step:.25,min:.25,max:4,onChange:e=>m({strokeWidth:Math.min(4,Math.max(.25,e))})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Remplissage`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,"data-active":(g.fill??`none`)!==`none`||void 0,onClick:()=>m({fill:(g.fill??`none`)===`none`?g.stroke??`#1a1a18`:`none`}),children:(g.fill??`none`)===`none`?`Aucun`:`Plein`})]})]})]}),h===`instance`&&!v&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Composant`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,title:`Sélectionner le groupe reproduit`,onClick:()=>g.componentId&&f([g.componentId]),children:n.nodes.find(e=>e.id===g.componentId)?.name??`?`})]}),(0,L.jsx)(`p`,{className:`empty-hint`,children:`Modifiez ce groupe pour mettre à jour toutes ses instances d'un coup. Pour faire diverger cette copie seulement, détachez-la.`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,onClick:d,children:`Détacher`})]}),h===`image`&&(0,L.jsxs)(`div`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Cadrage`}),(0,L.jsx)(`div`,{className:`segmented`,children:Vn.map(e=>(0,L.jsx)(`button`,{type:`button`,title:e.title,"data-active":(g.fit??`cover`)===e.value||void 0,onClick:()=>m({fit:e.value}),children:e.label},e.value))})]}),(h===`rect`||h===`ellipse`)&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Un,{label:`Remplissage`,value:g.fill,onChange:e=>m({fill:e})}),(0,L.jsx)(Un,{label:`Contour`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Épaisseur`,value:g.strokeWidth,min:0,onChange:e=>m({strokeWidth:Math.max(0,e)})}),h===`rect`&&(0,L.jsx)(Hn,{label:`Arrondi`,value:g.radius,min:0,onChange:e=>m({radius:Math.max(0,e)})})]})]}),h===`line`&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Un,{label:`Couleur`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsx)(Hn,{label:`Épaisseur`,value:g.strokeWidth,min:0,onChange:e=>m({strokeWidth:Math.max(0,e)})})]}),h===`text`&&(0,L.jsxs)(L.Fragment,{children:[!v&&(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Contenu`}),(0,L.jsx)(`textarea`,{rows:3,value:g.text??``,onChange:e=>m({text:e.target.value})})]}),(0,L.jsx)(Un,{label:`Couleur`,value:g.color,onChange:e=>m({color:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Taille`,value:g.fontSize,min:1,onChange:e=>m({fontSize:Math.max(1,e)})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Graisse`}),(0,L.jsx)(`select`,{value:g.fontWeight??400,onChange:e=>m({fontWeight:Number(e.target.value)}),children:zn.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))})]})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Interligne (px)`,value:g.lineHeight??ve(g.fontSize??24),step:1,min:4,onChange:e=>m({lineHeight:Math.max(4,e)})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Style`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,"data-active":g.fontStyle===`italic`||void 0,onClick:()=>m({fontStyle:g.fontStyle===`italic`?`normal`:`italic`}),children:`Italique`})]})]}),(0,L.jsxs)(`div`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Alignement`}),(0,L.jsx)(`div`,{className:`segmented`,children:Bn.map(e=>(0,L.jsx)(`button`,{type:`button`,title:e.label,"data-active":(g.textAlign??`left`)===e.value||void 0,onClick:()=>m({textAlign:e.value}),children:e.glyph},e.value))})]})]}),(0,L.jsxs)(`div`,{className:`inspector-actions`,children:[h===`group`?(0,L.jsx)(`button`,{type:`button`,onClick:u,title:`Dissoudre le groupe (Ctrl+Maj+G)`,children:`Dissoudre`}):(0,L.jsx)(`button`,{type:`button`,onClick:l,title:`Grouper la sélection (Ctrl+G)`,children:`Grouper`}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>c(`front`),title:`Mettre au premier plan`,children:`Devant`}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>c(`back`),title:`Mettre à l'arrière-plan`,children:`Derrière`}),(0,L.jsx)(`button`,{type:`button`,onClick:s,title:`Dupliquer (Ctrl+D)`,children:`Dupliquer`}),(0,L.jsx)(`button`,{type:`button`,className:`danger`,onClick:o,title:`Supprimer (Suppr)`,children:`Supprimer`})]})]})}function Gn(){let e=F(e=>e.design),t=F(e=>e.selectedIds),n=F(e=>e.expandedIds),r=F(e=>e.setSelection),i=F(e=>e.toggleSelection),a=F(e=>e.toggleExpanded),o=F(e=>e.reorderSelected),s=F(e=>e.groupSelected),c=F(e=>e.ungroupSelected);if(!e)return null;let l=b(e.nodes),u=e.nodes.some(e=>t.includes(e.id)&&e.type===`group`),d=new Map(e.nodes.map(e=>[e.id,e])),f=(e,o)=>[...l.get(e)??[]].reverse().flatMap(e=>{let s=e.type===`group`,c=n.includes(e.id),u=l.get(e.id)?.length??0,p=(0,L.jsx)(`li`,{children:(0,L.jsxs)(`div`,{className:`layer-row`,style:{paddingLeft:o*14},children:[s?(0,L.jsx)(`button`,{type:`button`,className:`layer-twisty`,"aria-label":c?`Replier le groupe`:`Déplier le groupe`,onClick:()=>a(e.id),children:c?`▾`:`▸`}):(0,L.jsx)(`span`,{className:`layer-twisty`}),(0,L.jsxs)(`button`,{type:`button`,className:`layer-item`,"data-active":t.includes(e.id)||void 0,"data-group":s||void 0,onClick:t=>t.shiftKey?i(e.id):r([e.id]),children:[(0,L.jsx)(`span`,{className:`layer-kind`,children:rt(e.type)}),(0,L.jsx)(`span`,{className:`layer-name`,children:e.name}),s&&(0,L.jsx)(`span`,{className:`layer-count`,children:u}),e.type===`instance`&&(0,L.jsxs)(`span`,{className:`layer-count`,title:`Instance liée à ce groupe`,children:[`◇ `,d.get(e.componentId??``)?.name??`?`]})]})]})},e.id);return s&&c?[p,...f(e.id,o+1)]:[p]});return(0,L.jsxs)(`section`,{className:`layers`,children:[(0,L.jsxs)(`div`,{className:`layers-header`,children:[(0,L.jsx)(`h2`,{children:`Calques`}),(0,L.jsxs)(`div`,{className:`layers-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Grouper la sélection (Ctrl+G)`,disabled:t.length===0,onClick:s,children:`⧉`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Dissoudre le groupe (Ctrl+Maj+G)`,disabled:!u,onClick:c,children:`⧅`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Monter d'un cran`,disabled:t.length===0,onClick:()=>o(`forward`),children:`↑`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Descendre d'un cran`,disabled:t.length===0,onClick:()=>o(`backward`),children:`↓`})]})]}),(0,L.jsx)(`ul`,{children:f(null,0)}),e.nodes.length===0&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Aucun élément sur cette planche.`})]})}var Kn={min:180,max:520};function qn({side:e,width:t,onResize:n,onCommit:r}){let i=(0,_.useRef)({x:0,width:0}),a=(0,_.useRef)(t),o=e=>Math.min(Kn.max,Math.max(Kn.min,Math.round(e))),s=(0,_.useCallback)(s=>{if(s.button!==0)return;let c=s.currentTarget;i.current={x:s.clientX,width:t},a.current=t,c.setPointerCapture(s.pointerId);let l=t=>{let r=t.clientX-i.current.x,s=o(i.current.width+(e===`left`?r:-r));a.current=s,n(s)},u=()=>{c.removeEventListener(`pointermove`,l),c.removeEventListener(`pointerup`,u),c.removeEventListener(`pointercancel`,u),r?.(a.current)};c.addEventListener(`pointermove`,l),c.addEventListener(`pointerup`,u),c.addEventListener(`pointercancel`,u),s.preventDefault()},[r,n,e,t]);return(0,L.jsx)(`div`,{className:`panel-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":e===`left`?`Redimensionner la liste des pages`:`Redimensionner le panneau de propriétés`,onPointerDown:s,onDoubleClick:()=>{let t=e===`left`?232:268;n(t),r?.(t)}})}var Jn={pending:`À traiter`,in_progress:`En cours`,done:`Traité`};function Yn(e){return new Date(e).toLocaleString(`fr-FR`,{dateStyle:`medium`,timeStyle:`short`})}function Xn(){let e=I(e=>e.rounds),t=I(e=>e.setRoundsOpen),n=I(e=>e.setRoundsProcessed),r=[...e].reverse(),i=e.find(e=>Ie(e).status!==`done`),[a,o]=(0,_.useState)(()=>(i??e.at(-1))?.number??null),s=e.find(e=>e.number===a)??null,c=e.filter(e=>Ie(e).status!==`done`).length;return(0,L.jsxs)(`div`,{className:`feedback-page`,children:[(0,L.jsxs)(`header`,{className:`feedback-page-head`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>t(!1),children:`← Revenir au canevas`}),(0,L.jsx)(`h1`,{children:`Retours`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e.length,` retour`,e.length>1?`s`:``,` · `,c,` à traiter ou en cours`]}),c>0&&(0,L.jsxs)(`button`,{type:`button`,className:`ghost-button feedback-page-all`,onClick:()=>{confirm(`Marquer comme traitées toutes les remarques des ${c} retour(s) en attente ?`)&&n(null,!0)},children:[(0,L.jsx)(R,{name:`check-check`,size:13}),`Tout marquer comme traité`]})]}),e.length===0?(0,L.jsx)(`p`,{className:`feedback-empty`,children:`Aucun retour pour l’instant. Passez en mode Remarques, commentez la planche, puis cliquez sur « Terminer les retours ».`}):(0,L.jsxs)(`div`,{className:`feedback-page-body`,children:[(0,L.jsx)(`ul`,{className:`round-list`,children:r.map(e=>(0,L.jsx)(`li`,{children:(0,L.jsx)(Qn,{round:e,active:e.number===a,onSelect:()=>o(e.number)})},e.number))}),s&&(0,L.jsx)($n,{round:s},s.number)]})]})}function Zn({round:e}){let t=Ie(e);return(0,L.jsxs)(`div`,{className:`round-progress`,children:[(0,L.jsx)(`span`,{className:`round-status`,"data-status":t.status,children:Jn[t.status]}),(0,L.jsx)(`span`,{className:`round-bar`,children:(0,L.jsx)(`span`,{style:{width:`${t.done/Math.max(1,t.total)*100}%`}})}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[t.done,`/`,t.total]})]})}function Qn({round:e,active:t,onSelect:n}){return(0,L.jsxs)(`button`,{type:`button`,className:`round-row`,"data-active":t||void 0,onClick:n,children:[(0,L.jsx)(`span`,{className:`round-row-title`,children:e.title}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[`n°`,e.number,` · `,Yn(e.submittedAt),` · `,e.remarks.length,` remarque`,e.remarks.length>1?`s`:``]}),(0,L.jsx)(Zn,{round:e})]})}function $n({round:e}){let t=I(e=>e.renameRound),n=I(e=>e.setRoundsProcessed),r=I(e=>e.setRoundsOpen),i=I(e=>e.setMode),a=F(e=>e.openDesign),o=F(e=>e.designs),[s,c]=(0,_.useState)(e.title),l=new Map;for(let t of e.remarks)l.set(t.designId,[...l.get(t.designId)??[],t]);let u=()=>{let n=s.trim();n===``?c(e.title):n!==e.title&&t(e.number,n)},d=async e=>{await a(e),await i(`remarks`),r(!1)};return(0,L.jsxs)(`section`,{className:`round-detail`,children:[(0,L.jsx)(`input`,{className:`round-title-input`,"aria-label":`Nom du retour`,value:s,maxLength:120,onChange:e=>c(e.target.value),onBlur:u,onKeyDown:t=>{t.key===`Enter`&&t.currentTarget.blur(),t.key===`Escape`&&(t.stopPropagation(),c(e.title))}}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`Retour n°`,e.number,` · transmis le `,Yn(e.submittedAt),` · `,e.remarks.length,` remarque`,e.remarks.length>1?`s`:``,` sur `,l.size,` page`,l.size>1?`s`:``]}),(0,L.jsxs)(`div`,{className:`round-detail-progress`,children:[(0,L.jsx)(Zn,{round:e}),Ie(e).status===`done`?(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>void n(e.number,!1),children:`Tout rouvrir`}):(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,onClick:()=>void n(e.number,!0),children:[(0,L.jsx)(R,{name:`check-check`,size:13}),`Tout marquer comme traité`]})]}),[...l].map(([t,n])=>{let r=o.some(e=>e.id===t);return(0,L.jsxs)(`div`,{className:`round-page`,children:[(0,L.jsxs)(`div`,{className:`round-page-head`,children:[(0,L.jsx)(`h2`,{children:n[0].designName}),r?(0,L.jsx)(`button`,{type:`button`,className:`link-button`,onClick:()=>void d(t),children:`Ouvrir la page`}):(0,L.jsx)(`span`,{className:`remark-hint`,children:`page supprimée`})]}),(0,L.jsx)(`ul`,{className:`round-remarks`,children:n.map(t=>(0,L.jsx)(tr,{round:e.number,remark:t},t.id))})]},t)})]})}function er(e){let t=e.target;if(t.kind===`page`)return`Page entière`;if(t.kind===`node`)return t.path.join(He);let n=t.elements.map(e=>e.name).join(`, `);return`Zone ${Math.round(t.box.width)} × ${Math.round(t.box.height)} px${n?` · ${n}`:``}`}function tr({round:e,remark:t}){let n=I(e=>e.setRemarkProcessed),r=t.processed;return(0,L.jsxs)(`li`,{className:`round-remark`,"data-processed":r!==null||void 0,children:[(0,L.jsx)(`label`,{className:`round-remark-check`,title:r?`Rouvrir cette remarque`:`Marquer comme traitée`,children:(0,L.jsx)(`input`,{type:`checkbox`,checked:r!==null,onChange:r=>void n(e,t.id,r.target.checked)})}),(0,L.jsxs)(`div`,{className:`round-remark-body`,children:[(0,L.jsxs)(`div`,{className:`round-remark-head`,children:[(0,L.jsx)(`span`,{className:`kind-pill`,"data-kind":t.target.kind,children:t.number===null?`Page`:`${t.number} · ${t.target.kind===`node`?`Élément`:`Zone`}`}),(0,L.jsx)(`span`,{className:`round-remark-target`,children:er(t)})]}),(0,L.jsx)(`p`,{className:`remark-text`,children:t.text}),(0,L.jsx)(`p`,{className:`round-remark-state`,children:r?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(R,{name:`circle-check`,size:13}),`Traitée par `,r.by===`agent`?`l’agent`:`vous`,` le `,Yn(r.at),r.note&&(0,L.jsxs)(`span`,{className:`round-remark-note`,children:[` — `,r.note]})]}):`À traiter`})]}),t.capture&&(0,L.jsx)(`a`,{className:`round-remark-capture`,href:N.captureUrl(t.capture),target:`_blank`,rel:`noreferrer`,children:(0,L.jsx)(`img`,{src:N.captureUrl(t.capture),alt:`Capture`})})]})}function nr(e){return e.target.kind===`page`?`Page`:`${e.number} · ${e.target.kind===`node`?`Élément`:`Zone`}`}function rr(e,t){if(e.target.kind===`node`)return`${t} · ${e.target.element.id}`;if(e.target.kind===`area`){let n=e.target.elements.length;return`${t} · ${n} élément${n>1?`s`:``}`}return t}function ir(){let e=F(e=>e.design),t=F(e=>e.designs),n=I(e=>e.remarks),r=I(e=>e.rounds),i=I(e=>e.file),a=I(e=>e.submit),o=I(e=>e.setFinishOpen),s=e?jt(n,e.id):[],[c,l]=(0,_.useState)(s.length>0?`page`:`all`),[u,d]=(0,_.useState)([]),[f,p]=(0,_.useState)(()=>Le(r.length+1)),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(null),y=(0,_.useMemo)(()=>new Map(t.map(e=>[e.id,e.name])),[t]),b=jt(n),x=Ve(c===`page`?s:b),S=x.filter(e=>!u.includes(e.id)),C=new Set(b.map(e=>e.designId)).size,w=S.map(e=>({id:e.id,designId:e.designId,designName:y.get(e.designId)??e.designId,number:e.number,target:e.target,text:e.text,capture:e.capture,processed:null})),ee=Ke({number:r.length+1,title:f.trim()||Le(r.length+1),submittedAt:new Date().toISOString(),remarks:w}),T=()=>o(!1),te=async()=>{h(!0);let e=await a(S.map(e=>e.id),f);h(!1),e&&v(e)};return(0,L.jsx)(`div`,{className:`dialog-backdrop`,onPointerDown:T,children:(0,L.jsxs)(`div`,{className:`dialog`,role:`dialog`,"aria-modal":`true`,onPointerDown:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`dialog-head`,children:[(0,L.jsx)(`h2`,{children:`Terminer les retours`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Fermer`,onClick:T,children:(0,L.jsx)(R,{name:`x`,size:16})})]}),g?(0,L.jsxs)(`div`,{className:`dialog-done`,children:[(0,L.jsx)(R,{name:`circle-check`,size:28}),(0,L.jsxs)(`p`,{children:[(0,L.jsxs)(`strong`,{children:[`« `,g.title,` » enregistré`]}),` — retour n°`,g.number,`, `,g.remarks.length,` remarque`,g.remarks.length>1?`s`:``,`.`]}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`Dites à l’agent que vous avez terminé : il lira ce retour avec l’outil `,(0,L.jsx)(`code`,{children:`get_feedback`}),`. Les remarques restent visibles, marquées transmises ; la page « Retours » suit leur traitement.`]}),(0,L.jsx)(`div`,{className:`dialog-foot`,children:(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,onClick:T,children:`Fermer`})})]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`p`,{className:`dialog-intro`,children:`Les remarques cochées sont réunies dans un retour que l’agent lira quand vous lui direz que vous avez terminé.`}),(0,L.jsxs)(`label`,{className:`round-title-field`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Nom du retour`}),(0,L.jsx)(`input`,{autoFocus:!0,value:f,maxLength:120,placeholder:Le(r.length+1),onChange:e=>p(e.target.value)})]}),(0,L.jsx)(`span`,{className:`section-label`,children:`Périmètre`}),(0,L.jsxs)(`div`,{className:`scope-choice`,children:[(0,L.jsxs)(`button`,{type:`button`,"data-active":c===`page`||void 0,disabled:!e,onClick:()=>l(`page`),children:[(0,L.jsx)(R,{name:c===`page`?`circle-dot`:`circle`,size:16}),(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`strong`,{children:`Cette page`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e?.name,` · `,s.length,` remarque`,s.length>1?`s`:``]})]})]}),(0,L.jsxs)(`button`,{type:`button`,"data-active":c===`all`||void 0,onClick:()=>l(`all`),children:[(0,L.jsx)(R,{name:c===`all`?`circle-dot`:`circle`,size:16}),(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`strong`,{children:`Toutes les pages`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[C,` page`,C>1?`s`:``,` · `,b.length,` remarque`,b.length>1?`s`:``]})]})]})]}),(0,L.jsxs)(`div`,{className:`dialog-row-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Remarques à transmettre`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[S.length,` sur `,x.length,` sélectionnée`,S.length>1?`s`:``]})]}),(0,L.jsxs)(`ul`,{className:`finish-list`,children:[x.map(e=>{let t=!u.includes(e.id);return(0,L.jsx)(`li`,{children:(0,L.jsxs)(`label`,{"data-off":!t||void 0,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>d(n=>t?[...n,e.id]:n.filter(t=>t!==e.id))}),(0,L.jsx)(`span`,{className:`kind-pill`,"data-kind":e.target.kind,children:nr(e)}),(0,L.jsx)(`span`,{className:`finish-text`,children:e.text.split(`
|
|
15
|
-
`)[0]}),e.capture&&(0,L.jsx)(R,{name:`image`,size:13}),(0,L.jsx)(`span`,{className:`finish-where`,children:rr(e,y.get(e.designId)??e.designId)})]})},e.id)}),x.length===0&&(0,L.jsx)(`li`,{className:`empty-hint`,children:`Aucune remarque en attente sur cette page.`})]}),(0,L.jsxs)(`div`,{className:`dialog-row-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Ce que l’agent recevra`}),(0,L.jsx)(`span`,{className:`remark-hint finish-file`,title:i,children:i})]}),(0,L.jsx)(`pre`,{className:`finish-preview`,children:ee}),(0,L.jsxs)(`div`,{className:`dialog-foot`,children:[(0,L.jsxs)(`span`,{className:`remark-hint`,children:[(0,L.jsx)(R,{name:`info`,size:13}),` L’agent lit ce retour avec l’outil `,(0,L.jsx)(`code`,{children:`get_feedback`}),`.`]}),(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:T,children:`Retour`}),(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,disabled:S.length===0||f.trim()===``||m,onClick:()=>void te(),children:[(0,L.jsx)(R,{name:`save`}),m?`Enregistrement…`:`Enregistrer le retour`]})]})]})]})})}function ar(){let e=F(e=>e.design),t=I(e=>e.remarks),n=I(e=>e.showSent),r=I(e=>e.setShowSent),i=I(e=>e.composer),a=I(e=>e.openPageComposer),o=I(e=>e.setFinishOpen);if(!e)return null;let s=t.filter(t=>t.designId===e.id),c=s.filter(e=>n||e.status===`draft`),l=c.filter(e=>e.target.kind===`page`),u=c.filter(e=>e.target.kind!==`page`).sort((e,t)=>(e.number??0)-(t.number??0)),d=jt(t,e.id).length,f=jt(t).length,p=s.length-d,m=s.some(e=>e.status===`draft`&&e.target.kind===`page`);return(0,L.jsxs)(`section`,{className:`remarks-panel`,children:[(0,L.jsxs)(`div`,{className:`remarks-header`,children:[(0,L.jsx)(`h2`,{children:`Remarques`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[d,` non transmise`,d>1?`s`:``]})]}),(0,L.jsxs)(`div`,{className:`remarks-body`,children:[i?.kind===`page`?(0,L.jsx)(or,{}):!m&&(0,L.jsxs)(`button`,{type:`button`,className:`remark-add-page`,onClick:a,children:[(0,L.jsx)(R,{name:`file-plus`}),`Remarque sur toute la page`]}),p>0&&(0,L.jsxs)(`label`,{className:`remark-check`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:n,onChange:e=>r(e.target.checked)}),`Afficher les remarques transmises (`,p,`)`]}),l.length>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Page`}),l.map(e=>(0,L.jsx)(cr,{remark:e},e.id))]}),u.length>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Éléments et zones`}),u.map(e=>(0,L.jsx)(cr,{remark:e},e.id))]}),c.length===0&&i?.kind!==`page`&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Cliquez sur un élément de la planche pour le commenter, ou glissez pour entourer une zone.`})]}),(0,L.jsxs)(`div`,{className:`remarks-footer`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,disabled:f===0,onClick:()=>o(!0),children:[(0,L.jsx)(R,{name:`send`}),`Terminer les retours (`,f,`)`]}),(0,L.jsx)(`span`,{className:`remark-hint`,children:`Les remarques sont enregistrées au fil de l’eau.`})]})]})}function or(){let e=I(e=>e.composer),t=I(e=>e.saving),n=I(e=>e.setComposerText),r=I(e=>e.closeComposer),i=I(e=>e.saveComposer);return e?.kind===`page`?(0,L.jsxs)(`div`,{className:`remark-card`,"data-editing":!0,children:[(0,L.jsx)(`div`,{className:`remark-card-head`,children:(0,L.jsxs)(`span`,{className:`remark-chip`,children:[(0,L.jsx)(R,{name:`file-text`,size:12}),`Page entière`]})}),(0,L.jsx)(`textarea`,{autoFocus:!0,className:`remark-textarea`,rows:3,placeholder:`Une remarque générale sur cette page…`,value:e.text,onChange:e=>n(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&r(),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&i()}}),(0,L.jsxs)(`div`,{className:`remark-card-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:r,children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:e.text.trim()===``||t,onClick:()=>void i(),children:`Enregistrer`})]})]}):null}function sr(e,t){let n=e.target;return n.kind===`page`?`Page entière`:n.kind===`node`?`${n.path.join(He)}${t?` · élément supprimé`:``}`:`Zone · ${Math.round(n.box.width)} × ${Math.round(n.box.height)} px`}function cr({remark:e}){let t=F(e=>e.design),n=I(e=>e.hoveredId),r=I(e=>e.focusedId),i=I(e=>e.setHovered),a=I(e=>e.setFocused),o=I(e=>e.updateText),s=I(e=>e.remove),c=I(t=>t.rounds.find(t=>t.number===e.round)),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=e.id===r;(0,_.useEffect)(()=>{f&&d.current?.scrollIntoView({block:`nearest`,behavior:`smooth`})},[f]);let p=e.target,m=p.kind===`node`&&!t?.nodes.some(e=>e.id===p.element.id),h=e.status===`sent`,g=c?.remarks.find(t=>t.id===e.id)?.processed??null,v=async()=>{l!==null&&l.trim()!==``&&await o(e.id,l)&&u(null)};return(0,L.jsxs)(`div`,{ref:d,className:`remark-card`,"data-status":e.status,"data-highlighted":e.id===n||f||void 0,onMouseEnter:()=>i(e.id),onMouseLeave:()=>i(null),onClick:()=>a(e.id),children:[(0,L.jsxs)(`div`,{className:`remark-card-head`,children:[e.number===null?(0,L.jsxs)(`span`,{className:`remark-chip`,children:[(0,L.jsx)(R,{name:`file-text`,size:12}),`Page entière`]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`remark-number`,"data-status":e.status,children:e.number}),(0,L.jsxs)(`span`,{className:`remark-target`,title:sr(e,m),children:[(0,L.jsx)(R,{name:p.kind===`node`?`mouse-pointer-click`:`square-dashed-mouse-pointer`,size:12}),(0,L.jsx)(`span`,{children:sr(e,m)})]})]}),!h&&l===null&&(0,L.jsxs)(`span`,{className:`remark-card-tools`,children:[(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Modifier`,onClick:t=>{t.stopPropagation(),u(e.text)},children:(0,L.jsx)(R,{name:`pencil`})}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Supprimer`,onClick:t=>{t.stopPropagation(),confirm(`Supprimer cette remarque ?`)&&s(e.id)},children:(0,L.jsx)(R,{name:`trash-2`})})]}),h&&(0,L.jsx)(`span`,{className:`remark-card-tools`,children:(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Retirer de la liste (le retour transmis reste inchangé)`,onClick:t=>{t.stopPropagation(),confirm(`Retirer cette remarque de la liste ? Le retour déjà transmis à l’agent ne change pas.`)&&s(e.id)},children:(0,L.jsx)(R,{name:`trash-2`})})})]}),h&&(0,L.jsxs)(`span`,{className:`remark-status`,"data-processed":g!==null||void 0,children:[g?`Traitée`:`Transmise`,` · `,c?.title]}),p.kind===`area`&&(0,L.jsxs)(`div`,{className:`remark-area-info`,children:[e.capture&&(0,L.jsx)(`img`,{src:N.captureUrl(e.capture),alt:`Capture de la zone`}),(0,L.jsx)(`span`,{className:`remark-hint`,children:p.elements.length===0?`Aucun élément cité`:`${p.elements.length} élément${p.elements.length>1?`s`:``} : ${p.elements.map(e=>e.name).join(`, `)}`})]}),l===null?(0,L.jsx)(`p`,{className:`remark-text`,children:e.text}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`textarea`,{autoFocus:!0,className:`remark-textarea`,rows:3,value:l,onClick:e=>e.stopPropagation(),onChange:e=>u(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&u(null),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&v()}}),(0,L.jsxs)(`div`,{className:`remark-card-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>u(null),children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:l.trim()===``,onClick:()=>void v(),children:`Enregistrer`})]})]})]})}var lr=[.25,.5,.75,1,1.5,2,3];function ur({leftVisible:e,rightVisible:t,onToggleLeft:n,onToggleRight:r}){let i=F(e=>e.zoom),a=F(e=>e.setZoom),o=F(e=>e.undo),s=F(e=>e.redo),c=F(e=>e.past.length>0),l=F(e=>e.future.length>0),u=F(e=>e.saveState),d=F(e=>e.connected),f=F(e=>e.design),p=I(e=>e.mode),m=I(e=>e.setMode),h=I(e=>f?jt(e.remarks,f.id).length:0),g=p===`remarks`,_=I(e=>e.rounds.filter(e=>Ie(e).status!==`done`).length),v=I(e=>e.setRoundsOpen),y={idle:`À jour`,saving:`Enregistrement…`,saved:`Enregistré`,error:`Échec de la sauvegarde`}[u];return(0,L.jsxs)(`header`,{className:`toolbar`,children:[(0,L.jsxs)(`div`,{className:`tool-row`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e||void 0,onClick:n,title:e?`Masquer la liste des pages`:`Afficher la liste des pages`,"aria-label":e?`Masquer la liste des pages`:`Afficher la liste des pages`,"aria-pressed":e,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`◧`})}),(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":t||void 0,onClick:r,title:t?`Masquer le panneau de propriétés`:`Afficher le panneau de propriétés`,"aria-label":t?`Masquer le panneau de propriétés`:`Afficher le panneau de propriétés`,"aria-pressed":t,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`◨`})})]}),(0,L.jsxs)(`div`,{className:`tool-row`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,onClick:o,disabled:!c||g,title:`Annuler (Ctrl+Z)`,"aria-label":`Annuler (Ctrl+Z)`,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`↶`})}),(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,onClick:s,disabled:!l||g,title:`Rétablir (Ctrl+Y)`,"aria-label":`Rétablir (Ctrl+Y)`,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`↷`})})]}),(0,L.jsxs)(`label`,{className:`zoom-control`,children:[`Zoom`,(0,L.jsxs)(`select`,{value:lr.includes(i)?i:``,onChange:e=>a(Number(e.target.value)),children:[!lr.includes(i)&&(0,L.jsxs)(`option`,{value:``,children:[Math.round(i*100),` %`]}),lr.map(e=>(0,L.jsxs)(`option`,{value:e,children:[Math.round(e*100),` %`]},e))]})]}),(0,L.jsxs)(`div`,{className:`mode-switch`,role:`group`,"aria-label":`Mode du canvas`,children:[(0,L.jsxs)(`button`,{type:`button`,"data-active":!g||void 0,disabled:!f,onClick:()=>void m(`edit`),title:`Éditer le design (M)`,children:[(0,L.jsx)(R,{name:`pen-tool`}),`Édition`]}),(0,L.jsxs)(`button`,{type:`button`,"data-active":g||void 0,"data-mode":`remarks`,disabled:!f,onClick:()=>void m(`remarks`),title:`Rédiger des remarques pour l'agent (M)`,children:[(0,L.jsx)(R,{name:`message-square`}),`Remarques`,h>0&&(0,L.jsx)(`span`,{className:`mode-count`,children:h})]})]}),(0,L.jsxs)(`button`,{type:`button`,className:`rounds-button`,onClick:()=>v(!0),title:`Retours transmis à l'agent et leur traitement`,children:[(0,L.jsx)(R,{name:`list-checks`}),`Retours`,_>0&&(0,L.jsx)(`span`,{className:`rounds-count`,children:_})]}),(0,L.jsxs)(`div`,{className:`toolbar-status`,children:[f&&(0,L.jsx)(`span`,{className:`status-name`,children:f.name}),(0,L.jsx)(`span`,{className:`status-chip`,"data-state":u,children:y}),(0,L.jsx)(`span`,{className:`status-chip`,"data-state":d?`saved`:`error`,children:d?`Connecté`:`Déconnecté`})]})]})}function dr(e,t=!0){let[n,r]=(0,_.useState)(()=>{try{let n=localStorage.getItem(e);return n===null?t:n===`1`}catch{return t}});return[n,(0,_.useCallback)(()=>{r(t=>{let n=!t;try{localStorage.setItem(e,n?`1`:`0`)}catch{}return n})},[e])]}var fr=[{id:`select`,label:`Sélection`,shortcut:`V`,glyph:`↖`},{id:`rect`,label:`Rectangle`,shortcut:`R`,glyph:`▭`},{id:`ellipse`,label:`Ellipse`,shortcut:`O`,glyph:`◯`},{id:`line`,label:`Ligne`,shortcut:`L`,glyph:`╱`},{id:`text`,label:`Texte`,shortcut:`T`,glyph:`T`}],pr={id:`icon`,label:`Icône`,shortcut:`I`,glyph:`☆`};function mr(){let e=F(e=>e.tool),t=F(e=>e.setTool),n=F(e=>e.pendingIcon),r=F(e=>e.setPendingIcon),[i,a]=dr(`mcp-design.tool-palette-expanded`,!1),[o,s]=(0,_.useState)(!1),c=e===pr.id?pr:fr.find(t=>t.id===e)??fr[0];return i?(0,L.jsxs)(`div`,{className:`tool-palette`,children:[(0,L.jsxs)(`div`,{className:`tool-grid`,children:[fr.map(n=>(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e===n.id||void 0,title:`${n.label} (${n.shortcut})`,"aria-label":`${n.label} (${n.shortcut})`,"aria-pressed":e===n.id,onClick:()=>t(n.id),children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:n.glyph})},n.id)),(0,L.jsxs)(`div`,{className:`tool-popover-anchor`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e===pr.id||void 0,title:`Icône — ${n} (I)`,"aria-label":`Icône — ${n} (I)`,"aria-pressed":e===pr.id,onClick:()=>s(e=>!e),children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:pr.glyph})}),o&&(0,L.jsx)(Rn,{current:n,onPick:e=>{r(e),s(!1)},onClose:()=>s(!1)})]})]}),(0,L.jsx)(`button`,{type:`button`,className:`tool-palette-collapse`,title:`Replier les outils`,"aria-label":`Replier les outils`,"aria-expanded":!0,onClick:()=>{s(!1),a()},children:`⌄`})]}):(0,L.jsx)(`div`,{className:`tool-palette`,"data-collapsed":!0,children:(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,title:`Outils — actif : ${c.label} (${c.shortcut})`,"aria-label":`Afficher les outils — actif : ${c.label} (${c.shortcut})`,"aria-expanded":!1,onClick:a,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:c.glyph})})})}var hr=`[mcp-design]`;function gr(e){return e===EventSource.CONNECTING?`CONNECTING`:e===EventSource.OPEN?`OPEN`:e===EventSource.CLOSED?`CLOSED`:`UNKNOWN(${e})`}function _r(){(0,_.useEffect)(()=>{let e=`api/events`,t=new EventSource(e),n=0;return t.onopen=()=>{F.getState().setConnected(!0),F.getState().refreshDesigns(),I.getState().refresh()},t.onerror=()=>{let r=t.readyState,i=gr(r),a=r===EventSource.CONNECTING?`Browser is reconnecting (server unreachable, proxy timeout, or network issue)`:r===EventSource.CLOSED?`Connection permanently closed (HTTP error, server stopped, or proxy reset)`:`Stream was OPEN when error fired: transient glitch or browser quirk`;console.error(`${hr} SSE onerror — readyState=${i} (${r}). ${a}`),F.getState().setConnected(!1);let o=Date.now();o-n<8e3||(n=o,fetch(`api/client-diagnostics`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({mcp:`mcp-design`,kind:`EventSource_error`,sseUrl:e,readyState:r,readyStateLabel:i,hint:a,time:new Date().toISOString()})}).catch(()=>{console.warn(`${hr} Could not POST client-diagnostics (server probably down)`)}))},t.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}let n=F.getState();t.type===`INITIAL_STATE`||t.type===`DESIGNS_UPDATED`?n.refreshDesigns():t.type===`DESIGN_UPDATED`?(n.refreshDesigns(),t.data?.designId&&n.reloadCurrent(t.data.designId)):t.type===`REMARKS_UPDATED`&&I.getState().refresh()},()=>t.close()},[])}function vr(e,t){let[n,r]=(0,_.useState)(()=>{try{let n=Number(localStorage.getItem(e));return Number.isFinite(n)&&n>0?n:t}catch{return t}});return[n,r,(0,_.useCallback)(t=>{try{localStorage.setItem(e,String(t))}catch{}},[e])]}var yr={v:`select`,r:`rect`,o:`ellipse`,l:`line`,t:`text`,i:`icon`};function br(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.tagName===`SELECT`||e.isContentEditable:!1}function xr(){(0,_.useEffect)(()=>{let e=e=>{if(br(e.target))return;if(e.code===`Space`&&!e.repeat){e.preventDefault(),F.getState().setPanMode(!0);return}if(e.code===`Space`){e.preventDefault();return}let t=I.getState();if(t.roundsOpen){e.key===`Escape`&&t.setRoundsOpen(!1);return}let n=F.getState();if(!n.design)return;let r=e.ctrlKey||e.metaKey;if(!r&&!e.altKey&&e.key.toLowerCase()===`m`){t.setMode(t.mode===`remarks`?`edit`:`remarks`);return}if(t.mode===`remarks`){if(e.key!==`Escape`)return;t.finishOpen?t.setFinishOpen(!1):t.composer?t.closeComposer():t.setMode(`edit`);return}if(r&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?n.redo():n.undo();return}if(r&&e.key.toLowerCase()===`y`){e.preventDefault(),n.redo();return}if(r&&e.key.toLowerCase()===`g`){e.preventDefault(),e.shiftKey?n.ungroupSelected():n.groupSelected();return}if(r&&e.key.toLowerCase()===`d`){e.preventDefault(),n.duplicateSelected();return}if(r&&e.key.toLowerCase()===`a`){e.preventDefault(),n.setSelection(n.design.nodes.map(e=>e.id));return}if(r)return;if(e.key===`Delete`||e.key===`Backspace`){e.preventDefault(),n.deleteSelected();return}if(e.key===`Escape`){n.setSelection([]),n.setTool(`select`);return}if(e.key.startsWith(`Arrow`)&&n.selectedIds.length>0){e.preventDefault();let t=e.shiftKey?10:1,r=e.key===`ArrowRight`?t:e.key===`ArrowLeft`?-t:0,i=e.key===`ArrowDown`?t:e.key===`ArrowUp`?-t:0,a=n.design.nodes.filter(e=>n.selectedIds.includes(e.id));n.moveSelection(r,i,a);return}let i=yr[e.key.toLowerCase()];i&&n.setTool(i)},t=e=>{e.code===`Space`&&F.getState().setPanMode(!1)},n=()=>F.getState().setPanMode(!1);return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,t),window.addEventListener(`blur`,n),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t),window.removeEventListener(`blur`,n)}},[])}function Sr(){_r(),xr();let e=F(e=>e.design),t=F(e=>e.designs),n=F(e=>e.loading),r=F(e=>e.error),i=F(e=>e.openDesign),a=F(e=>e.setError),o=F(e=>e.flushSave),s=I(e=>e.mode===`remarks`),c=I(e=>e.finishOpen),l=I(e=>e.roundsOpen),u=I(e=>e.composer!==null),[d,f,p]=vr(`mcp-design.sidebar-width`,280),[m,h,g]=vr(`mcp-design.rail-width`,268),[v,y]=dr(`mcp-design.sidebar-visible`),[b,x]=dr(`mcp-design.rail-visible`);(0,_.useEffect)(()=>{if(e||t.length===0||n)return;let r=vt(),a=t.find(e=>e.id===r)??on(rn(t));a&&i(a.id)},[e,t,n,i]),(0,_.useEffect)(()=>{let e=()=>void o();return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[o]);let S=[v?`${d}px`:null,v?`5px`:null,`minmax(0, 1fr)`,b?`5px`:null,b?`${m}px`:null].filter(Boolean).join(` `);return(0,L.jsxs)(`div`,{className:`app`,style:{gridTemplateColumns:S},children:[v&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(En,{}),(0,L.jsx)(qn,{side:`left`,width:d,onResize:f,onCommit:p})]}),(0,L.jsxs)(`main`,{className:`workspace`,children:[(0,L.jsx)(ur,{leftVisible:v,rightVisible:b,onToggleLeft:y,onToggleRight:x}),e?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Qt,{}),!s&&(0,L.jsx)(mr,{}),s&&!u&&(0,L.jsx)(`div`,{className:`remark-help`,children:`Clic : remarque sur un élément · Glisser : remarque sur une zone · Alt + clic : élément exact · Échap : quitter`})]}):(0,L.jsx)(`div`,{className:`workspace-empty`,children:(0,L.jsx)(`p`,{children:`Sélectionnez un design à gauche, ou créez-en un nouveau.`})})]}),b&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(qn,{side:`right`,width:m,onResize:h,onCommit:g}),(0,L.jsx)(`div`,{className:`right-rail`,children:s?(0,L.jsx)(ar,{}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Wn,{}),(0,L.jsx)(Gn,{})]})})]}),l&&(0,L.jsx)(Xn,{}),c&&(0,L.jsx)(ir,{}),r&&(0,L.jsxs)(`div`,{className:`error-toast`,role:`alert`,children:[(0,L.jsx)(`span`,{children:r}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>a(null),children:`✕`})]})]})}(0,v.createRoot)(document.getElementById(`root`)).render((0,L.jsx)(_.StrictMode,{children:(0,L.jsx)(Sr,{})}));export{A as t};
|
|
14
|
+
`)}var qe=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},Je=(e=>e?qe(e):qe),Ye=e=>e;function Xe(e,t=Ye){let n=_.useSyncExternalStore(e.subscribe,_.useCallback(()=>t(e.getState()),[e,t]),_.useCallback(()=>t(e.getInitialState()),[e,t]));return _.useDebugValue(n),n}var Ze=e=>{let t=Je(e),n=e=>Xe(t,e);return Object.assign(n,t),n},Qe=(e=>e?Ze(e):Ze),$e={rect:{width:200,height:120,fill:`#e8e8e6`,stroke:`#1a1a18`,strokeWidth:1,radius:8},ellipse:{width:160,height:160,fill:`#e8e8e6`,stroke:`#1a1a18`,strokeWidth:1},line:{width:200,height:0,stroke:`#1a1a18`,strokeWidth:2},text:{width:260,height:ve(24),text:`Texte`,color:`#1a1a18`,fontSize:24,fontFamily:`Inter, system-ui, sans-serif`,fontWeight:400,fontStyle:`normal`,textAlign:`left`},icon:{width:24,height:24,fill:`none`,stroke:`#1a1a18`,strokeWidth:2},image:{width:200,height:150,fit:`cover`},group:{width:0,height:0},instance:{width:0,height:0}},et=[`group`,`instance`],tt={rect:`Rectangle`,ellipse:`Ellipse`,line:`Ligne`,text:`Texte`,icon:`Icône`,image:`Image`,group:`Groupe`,instance:`Instance`};function nt(e,t){return`${tt[e]} ${t}`}function rt(e){return tt[e]}function it(e,t,n){if(et.includes(e)||e===`line`)return{width:t,height:n};if(e===`icon`){let e=Math.max(1,Math.min(Math.abs(t),Math.abs(n)));return{width:e,height:e}}return e===`text`?{width:Math.max(20,Math.abs(t)),height:Math.max(16,Math.abs(n))}:{width:Math.max(1,Math.abs(t)),height:Math.max(1,Math.abs(n))}}async function at(e,t){let n=await fetch(`api/${e}`,{...t,headers:t?.body?{"Content-Type":`application/json`}:void 0});if(!n.ok){let e=`HTTP ${n.status}`;try{let t=await n.json();t?.error&&(e=t.error)}catch{}throw Error(e)}return await n.json()}var N={listDesigns:()=>at(`designs`),getDesign:e=>at(`designs/${encodeURIComponent(e)}`),createDesign:e=>at(`designs`,{method:`POST`,body:JSON.stringify(e)}),saveDesign:e=>at(`designs/${encodeURIComponent(e.id)}`,{method:`PUT`,body:JSON.stringify({revision:e.revision,nodes:e.nodes,name:e.name,width:e.width,height:e.height,background:e.background})}),setDesignGroup:(e,t)=>at(`designs/${encodeURIComponent(e)}/group`,{method:`PUT`,body:JSON.stringify({group:t})}),duplicateDesign:(e,t)=>at(`designs/${encodeURIComponent(e)}/duplicate`,{method:`POST`,body:JSON.stringify({name:t})}),deleteDesign:e=>at(`designs/${encodeURIComponent(e)}`,{method:`DELETE`}),listRemarks:()=>at(`remarks`),addRemark:e=>at(`remarks`,{method:`POST`,body:JSON.stringify(e)}),updateRemark:(e,t)=>at(`remarks/${encodeURIComponent(e)}`,{method:`PUT`,body:JSON.stringify({text:t})}),deleteRemark:e=>at(`remarks/${encodeURIComponent(e)}`,{method:`DELETE`}),submitFeedback:(e,t)=>at(`feedback`,{method:`POST`,body:JSON.stringify({remarkIds:e,title:t})}),renameRound:(e,t)=>at(`rounds/${e}`,{method:`PUT`,body:JSON.stringify({title:t})}),setRoundsProcessed:(e,t)=>at(`feedback/processed`,{method:`POST`,body:JSON.stringify({round:e,processed:t})}),setRemarkProcessed:(e,t,n)=>at(`rounds/${e}/remarks/${encodeURIComponent(t)}`,{method:`PUT`,body:JSON.stringify({processed:n})}),captureUrl:e=>`api/captures/${encodeURIComponent(e)}`,imageUrl:e=>`api/images/${encodeURIComponent(e)}`},ot=`abcdefghijklmnopqrstuvwxyz0123456789`;function st(){let e=``;for(let t of crypto.getRandomValues(new Uint8Array(8)))e+=ot[t%36];return e}function ct(){return`n_${st()}`}function lt(){return`g_${st()}`}function ut(e,t,n){let r={id:ct(),type:e,name:nt(e,n),parentId:null,x:0,y:0,rotation:0,opacity:1,...$e[e],...t};e===`icon`&&r.icon&&t.name===void 0&&(r.name=r.icon);let i=it(e,r.width,r.height),a={...r,width:i.width,height:i.height};return e===`text`&&t.height===void 0&&(a.height=be(a)),a}function dt(e,t){let n={...e,...t};return e.type!==`text`||t.height!==void 0||!xe(e)?n:{...n,height:be(n)}}var ft=20;function pt(e,t,n=ft){let r=new Set(t);for(let n of t)for(let t of C(e,n))r.add(t);let i=e.filter(e=>r.has(e.id)),a=new Map(i.map(e=>[e.id,e.type===`group`?lt():ct()])),o=new Set(t);return i.map(e=>({...e,id:a.get(e.id),parentId:e.parentId===null?null:a.get(e.parentId)??e.parentId,x:e.x+(o.has(e.id)?n:0),y:e.y+(o.has(e.id)?n:0)}))}function mt(e,t){return ie(e,t)}function ht(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function P(e){return Math.round(e*100)/100}var gt=400,_t=`mcp-design.last-design`;function vt(){try{return localStorage.getItem(_t)}catch{return null}}function yt(e){try{localStorage.setItem(_t,e)}catch{}}function bt(e){return{nodes:structuredClone(e.nodes),name:e.name,width:e.width,height:e.height,background:e.background}}var xt=null,St=null,F=Qe((e,t)=>{function n(){xt&&clearTimeout(xt),e({saveState:`saving`}),xt=setTimeout(()=>{xt=null,r()},gt)}async function r(){let n=t().design;if(n)try{let r=await N.saveDesign(n);e(e=>({saveState:`saved`,designs:r.designs,design:e.design?{...e.design,revision:r.design.revision}:e.design})),St&&clearTimeout(St),St=setTimeout(()=>{t().saveState===`saved`&&e({saveState:`idle`})},1500)}catch(t){e({saveState:`error`,error:t.message})}}function i(r,i){let a=t();if(!a.design)return;let o=bt(a.design),s=r(a.design);e({design:{...s,nodes:Tt(w(s.nodes))},past:i?.history===!1?a.past:[...a.past,o].slice(-100),future:i?.history===!1?a.future:[]}),n()}function a(e,t){return{...t,nodes:structuredClone(e.nodes),name:e.name,width:e.width,height:e.height,background:e.background}}return{designs:[],design:null,loading:!1,error:null,tool:`select`,pendingIcon:`star`,selectedIds:[],editingTextId:null,expandedIds:[],zoom:1,pan:{x:0,y:0},panMode:!1,saveState:`idle`,past:[],future:[],setError:t=>e({error:t}),setTool:t=>e({tool:t,editingTextId:null}),setPendingIcon:t=>e({pendingIcon:t,tool:`icon`,editingTextId:null}),setZoom:t=>e({zoom:Ct(t)}),setPan:t=>e({pan:t}),zoomAround:(n,r)=>{let i=t(),a=Ct(n),o={x:(r.x-i.pan.x)/i.zoom,y:(r.y-i.pan.y)/i.zoom};e({zoom:a,pan:{x:r.x-o.x*a,y:r.y-o.y*a}})},setPanMode:t=>e({panMode:t}),setSelection:t=>e({selectedIds:t,editingTextId:null}),toggleSelection:t=>e(e=>({selectedIds:e.selectedIds.includes(t)?e.selectedIds.filter(e=>e!==t):[...e.selectedIds,t],editingTextId:null})),setEditingText:t=>e({editingTextId:t}),toggleExpanded:t=>e(e=>({expandedIds:e.expandedIds.includes(t)?e.expandedIds.filter(e=>e!==t):[...e.expandedIds,t]})),refreshDesigns:async()=>{try{e({designs:await N.listDesigns()})}catch(t){e({error:t.message})}},openDesign:async t=>{e({loading:!0,error:null});try{let n=await N.getDesign(t);yt(t),e({design:n,loading:!1,selectedIds:[],editingTextId:null,expandedIds:n.nodes.filter(e=>e.type===`group`).map(e=>e.id),past:[],future:[]})}catch(t){e({loading:!1,error:t.message})}},createDesign:async t=>{try{let n=await N.createDesign(t);return yt(n.design.id),e({designs:n.designs,design:n.design,selectedIds:[],editingTextId:null,expandedIds:[],past:[],future:[]}),n.design.id}catch(t){return e({error:t.message}),null}},setDesignGroup:async(t,n)=>{try{let r=await N.setDesignGroup(t,n);e(e=>({designs:r.designs,design:e.design?.id===t?{...e.design,group:n}:e.design}))}catch(t){e({error:t.message})}},duplicateDesign:async(n,r)=>{try{await t().flushSave();let i=await N.duplicateDesign(n,r);yt(i.design.id),e({designs:i.designs,design:i.design,selectedIds:[],editingTextId:null,expandedIds:i.design.nodes.filter(e=>e.type===`group`).map(e=>e.id),past:[],future:[]})}catch(t){e({error:t.message})}},removeDesign:async t=>{try{let n=await N.deleteDesign(t);e(e=>({designs:n.designs,design:e.design?.id===t?null:e.design,selectedIds:e.design?.id===t?[]:e.selectedIds}))}catch(t){e({error:t.message})}},reloadCurrent:async n=>{let r=t();if(r.design?.id===n&&!(xt||r.saveState===`saving`))try{let t=await N.getDesign(n);e(e=>({design:t,selectedIds:e.selectedIds.filter(e=>t.nodes.some(t=>t.id===e)),expandedIds:[...new Set([...e.expandedIds,...t.nodes.filter(e=>e.type===`group`).map(e=>e.id)])],editingTextId:null}))}catch(t){e({error:t.message})}},addNode:(n,r)=>{let a=t().design;if(!a)return null;let o=ut(n,r,a.nodes.length+1);return i(e=>({...e,nodes:[...e.nodes,o]})),e({selectedIds:[o.id],tool:`select`}),o.id},patchNodes:(e,t,n)=>{if(e.length===0)return;let r=new Set(e);i(e=>({...e,nodes:e.nodes.map(e=>r.has(e.id)?dt(e,t):e)}),n)},replaceNodes:(e,t)=>{i(t=>({...t,nodes:e}),t)},moveSelection:(e,n,r,a)=>{let o=t().design;if(!o)return;let s=new Set(mt(o.nodes,r.map(e=>e.id))),c=new Map(r.map(e=>[e.id,{x:e.x,y:e.y}]));i(t=>({...t,nodes:t.nodes.map(t=>{if(!s.has(t.id))return t;let r=c.get(t.id);return r?{...t,x:r.x+e,y:r.y+n}:t})}),a)},deleteSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=new Set(r);for(let e of r)for(let t of C(n.nodes,e))a.add(t);if(wt(n.nodes,a).length>0){e({error:`Ce groupe est encore reproduit par des instances : détachez-les ou supprimez-les d’abord.`});return}i(e=>({...e,nodes:e.nodes.filter(e=>!a.has(e.id))})),e({selectedIds:[],editingTextId:null})},duplicateSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=mt(n.nodes,r),o=pt(n.nodes,a),s=o.filter(e=>e.parentId===null||!o.some(t=>t.id===e.parentId)).map(e=>e.id);i(e=>({...e,nodes:[...e.nodes,...o]})),e({selectedIds:s})},groupSelected:()=>{let{design:n,selectedIds:r}=t();if(!n||r.length===0)return;let a=mt(n.nodes,r),o=new Set(a.map(e=>n.nodes.find(t=>t.id===e)?.parentId??null));if(o.size>1){e({error:`Les éléments à grouper doivent appartenir au même groupe.`});return}let s=[...o][0]??null,c=te(k(n.nodes)),l=re(c,a);if(!l)return;let u=E(c,s),d=lt(),f=new Set(a),p={id:d,type:`group`,name:`Groupe ${n.nodes.filter(e=>e.type===`group`).length+1}`,parentId:s,x:l.x-u.x,y:l.y-u.y,width:l.width,height:l.height,rotation:0,opacity:1};i(e=>{let t=e.nodes.map(e=>f.has(e.id)?{...e,parentId:d,x:e.x-p.x,y:e.y-p.y}:e),n=t.filter(e=>f.has(e.id)).at(-1),r=[];for(let e of t)f.has(e.id)?e.id===n.id&&r.push(p,...t.filter(e=>f.has(e.id))):r.push(e);return{...e,nodes:r}}),e(e=>({selectedIds:[d],expandedIds:[...e.expandedIds,d]}))},detachSelected:()=>{let{design:e,selectedIds:n}=t();if(!e)return;let r=e.nodes.filter(e=>n.includes(e.id)&&e.type===`instance`);r.length!==0&&i(e=>{let t=b(e.nodes),n=[];for(let i of e.nodes){if(!r.some(e=>e.id===i.id)){n.push(i);continue}n.push({...i,type:`group`,componentId:void 0});let a=(t.get(i.componentId??``)??[]).map(e=>e.id),o=pt(e.nodes,a,0),s=new Set(o.filter(e=>!o.some(t=>t.id===e.parentId)).map(e=>e.id));for(let e of o)n.push(s.has(e.id)?{...e,parentId:i.id}:e)}return{...e,nodes:n}})},ungroupSelected:()=>{let{design:n,selectedIds:r}=t();if(!n)return;let a=new Set(n.nodes.filter(e=>r.includes(e.id)&&e.type===`group`).map(e=>e.id));if(a.size===0)return;if(wt(n.nodes,a).length>0){e({error:`Ce groupe est encore reproduit par des instances : détachez-les ou supprimez-les d’abord.`});return}let o=[];i(e=>{let t=new Map(e.nodes.map(e=>[e.id,e])),n=e=>{let n=0,r=0,i=e;for(;i!==null&&a.has(i);){let e=t.get(i);n+=e.x,r+=e.y,i=e.parentId}return{parentId:i,dx:n,dy:r}},r=[];for(let t of e.nodes){if(a.has(t.id))continue;let e=n(t.parentId);if(e.parentId===t.parentId){r.push(t);continue}o.push(t.id),r.push({...t,parentId:e.parentId,x:t.x+e.dx,y:t.y+e.dy})}return{...e,nodes:r}}),e({selectedIds:o})},reorderSelected:e=>{let{design:n,selectedIds:r}=t();!n||r.length===0||i(t=>({...t,nodes:ae(t.nodes,r,e)}))},patchArtboard:e=>{i(t=>({...t,...e}))},beginHistory:()=>{let n=t().design;n&&e(e=>({past:[...e.past,bt(n)].slice(-100),future:[]}))},undo:()=>{let r=t();if(!r.design||r.past.length===0)return;let i=r.past[r.past.length-1];e({design:a(i,r.design),past:r.past.slice(0,-1),future:[...r.future,bt(r.design)],editingTextId:null}),n()},redo:()=>{let r=t();if(!r.design||r.future.length===0)return;let i=r.future[r.future.length-1];e({design:a(i,r.design),future:r.future.slice(0,-1),past:[...r.past,bt(r.design)],editingTextId:null}),n()},flushSave:async()=>{xt&&=(clearTimeout(xt),null),await r()}}}),Ct=e=>Math.min(8,Math.max(.05,e));function wt(e,t){return e.filter(e=>e.type===`instance`&&e.componentId!==void 0&&t.has(e.componentId)&&!t.has(e.id))}function Tt(e){if(!e.some(e=>et.includes(e.type)))return e;let t=te(k(e));return e.map(e=>{if(!et.includes(e.type))return e;let n=D(t,e.id);return e.width===n.width&&e.height===n.height?e:{...e,width:n.width,height:n.height}})}function Et(e,t,n,r){if(r)return t;let i=[t,...x(e,t).map(e=>e.id)];return n.find(e=>i.includes(e))??S(e,t)?.id??t}function Dt(e,t,n){let r=[...x(e,t)].reverse().map(e=>e.id);if(r.push(t),n.length===1){let e=r.indexOf(n[0]);if(e>=0)return r[Math.min(e+1,r.length-1)]}return r[0]}var Ot=`mcp-design.remarks-show-sent`;function kt(){try{return localStorage.getItem(Ot)!==`false`}catch{return!0}}function At(e){F.getState().setError(e.message)}var I=Qe((e,t)=>{function n(t){e({remarks:t.remarks,rounds:t.rounds,file:t.file})}return{mode:`edit`,remarks:[],rounds:[],file:``,composer:null,saving:!1,hoveredId:null,focusedId:null,showSent:kt(),finishOpen:!1,roundsOpen:!1,setMode:async n=>{if(n===t().mode)return;let r=F.getState();n===`remarks`&&(r.saveState===`saving`&&await r.flushSave(),r.setSelection([]),r.setTool(`select`)),e({mode:n,composer:null,hoveredId:null,focusedId:null})},refresh:async()=>{try{n(await N.listRemarks())}catch(e){At(e)}},openPageComposer:()=>e({composer:{kind:`page`,text:``}}),openNodeComposer:n=>{let r=t().composer;e({composer:{kind:`node`,nodeId:n,text:r?.text??``,capture:r&&r.kind!==`page`?r.capture:!0}})},openAreaComposer:(n,r)=>{let i=t().composer;e({composer:{kind:`area`,box:n,hits:r,elementIds:r.filter(e=>!e.partial).map(e=>e.id),text:i?.text??``,capture:i&&i.kind!==`page`?i.capture:!0}})},setComposerText:n=>{let r=t().composer;r&&e({composer:{...r,text:n}})},toggleComposerCapture:()=>{let n=t().composer;n&&n.kind!==`page`&&e({composer:{...n,capture:!n.capture}})},toggleAreaElement:n=>{let r=t().composer;if(r?.kind!==`area`)return;let i=r.elementIds.includes(n)?r.elementIds.filter(e=>e!==n):[...r.elementIds,n];e({composer:{...r,elementIds:i}})},closeComposer:()=>e({composer:null}),closeComposerIfEmpty:()=>{t().composer?.text.trim()===``&&e({composer:null})},saveComposer:async()=>{let{composer:r,saving:i}=t(),a=F.getState().design;if(!r||!a||i||r.text.trim()===``)return;let o=r.kind===`page`?{kind:`page`}:r.kind===`node`?{kind:`node`,nodeId:r.nodeId}:{kind:`area`,box:r.box,elementIds:r.hits.filter(e=>r.elementIds.includes(e.id)).map(e=>e.id)};e({saving:!0});try{let t=await N.addRemark({designId:a.id,target:o,text:r.text,capture:r.kind!==`page`&&r.capture});n(t),e(e=>({composer:e.composer===r?null:e.composer,focusedId:t.remark.id}))}catch(e){At(e)}finally{e({saving:!1})}},updateText:async(e,t)=>{try{return n(await N.updateRemark(e,t)),!0}catch(e){return At(e),!1}},remove:async t=>{try{n(await N.deleteRemark(t)),e(e=>({hoveredId:e.hoveredId===t?null:e.hoveredId,focusedId:e.focusedId===t?null:e.focusedId}))}catch(e){At(e)}},submit:async(e,t)=>{try{let r=await N.submitFeedback(e,t);return n(r),r.round}catch(e){return At(e),null}},setHovered:t=>e({hoveredId:t}),setFocused:t=>e({focusedId:t}),setShowSent:t=>{try{localStorage.setItem(Ot,String(t))}catch{}e({showSent:t})},renameRound:async(e,t)=>{try{n(await N.renameRound(e,t))}catch(e){At(e)}},setRemarkProcessed:async(e,t,r)=>{try{n(await N.setRemarkProcessed(e,t,r))}catch(e){At(e)}},setRoundsProcessed:async(e,t)=>{try{n(await N.setRoundsProcessed(e,t))}catch(e){At(e)}},setFinishOpen:t=>e({finishOpen:t}),setRoundsOpen:t=>e({roundsOpen:t,composer:null})}});function jt(e,t){return e.filter(e=>e.status===`draft`&&(t===void 0||e.designId===t))}function Mt(e,t,n,r){if(n)return se(t);let i=[t,...x(e,t).map(e=>e.id)];return se(r!==null&&i.includes(r)?Dt(e,t,[r]):Et(e,t,[],!1))}function Nt(e,t){let n=e.target;if(n.kind===`page`)return null;if(n.kind===`area`)return{box:n.box,missing:!1};let r=t.bounds.get(n.element.id);return r?{box:r,missing:!1}:{box:n.box,missing:!0}}var Pt=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),L=o(((e,t)=>{t.exports=Pt()}))();function R({name:e,size:t=14,strokeWidth:n=2}){let r=de(e);if(!r)throw Error(`Unknown icon "${e}".`);return(0,L.jsx)(`svg`,{className:`ui-icon`,width:t,height:t,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:n,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,dangerouslySetInnerHTML:{__html:r.map(je).join(``)}})}function Ft(e){let t=I(e=>e.remarks),n=I(e=>e.showSent);return(0,_.useMemo)(()=>t.filter(t=>t.designId===e&&(n||t.status===`draft`)),[t,e,n])}function It(e,t){return e?.kind===`node`?D(t,e.nodeId):e?.kind===`area`?e.box:null}function Lt({designId:e,layout:t,hoverId:n}){let r=Ft(e),i=I(e=>e.composer),a=I(e=>e.hoveredId),o=I(e=>e.focusedId),s=It(i,t),c=i?.kind===`node`?i.nodeId:null;return(0,L.jsxs)(`g`,{className:`remark-shapes`,children:[r.map(e=>{let n=Nt(e,t);if(!n)return null;let r=e.id===a||e.id===o;return e.target.kind===`node`&&!r?null:(0,L.jsx)(`rect`,{className:`remark-frame`,"data-status":e.status,"data-highlighted":r||void 0,x:n.box.x,y:n.box.y,width:n.box.width,height:n.box.height,vectorEffect:`non-scaling-stroke`},e.id)}),n&&n!==c&&(0,L.jsx)(Rt,{className:`remark-hover`,box:D(t,n)}),s&&(0,L.jsx)(Rt,{className:`remark-aim`,box:s})]})}function Rt({className:e,box:t}){return(0,L.jsx)(`rect`,{className:e,x:t.x,y:t.y,width:t.width,height:t.height,vectorEffect:`non-scaling-stroke`})}function zt({design:e,nodes:t,layout:n,zoom:r,hoverId:i}){let a=Ft(e.id),o=I(e=>e.composer),s=I(e=>e.hoveredId),c=I(e=>e.focusedId),l=I(e=>e.setFocused),u=I(e=>e.closeComposer);(0,_.useEffect)(()=>u,[e.id,u]);let d=a.filter(e=>e.target.kind===`page`),f=o?.kind===`node`?o.nodeId:null,p=i&&i!==f?D(n,i):null;return(0,L.jsxs)(L.Fragment,{children:[d.length>0&&(0,L.jsxs)(`button`,{type:`button`,className:`remark-page-chip`,onPointerDown:e=>e.stopPropagation(),onClick:()=>l(d[0].id),children:[(0,L.jsx)(R,{name:`file-text`,size:12}),d.length===1?`1 remarque sur la page`:`${d.length} remarques sur la page`]}),p&&(0,L.jsx)(`div`,{className:`remark-hover-tag`,style:{left:p.x*r,top:p.y*r},children:Be(t,i).join(` › `)}),a.map(e=>{let t=Nt(e,n);if(!t||e.number===null)return null;let i=e.target.kind===`node`?{x:t.box.x+t.box.width,y:t.box.y}:{x:t.box.x,y:t.box.y};return(0,L.jsx)(`button`,{type:`button`,className:`remark-pin`,"data-status":e.status,"data-highlighted":e.id===s||e.id===c||void 0,"data-missing":t.missing||void 0,style:{left:i.x*r,top:i.y*r},title:t.missing?`Élément supprimé depuis la remarque`:e.text,onPointerDown:e=>e.stopPropagation(),onClick:()=>l(e.id),children:e.number},e.id)}),o&&o.kind!==`page`&&(0,L.jsx)(Vt,{composer:o,design:e,layout:n,zoom:r})]})}var Bt=10;function Vt({composer:e,design:t,layout:n,zoom:r}){let i=I(e=>e.saving),a=I(e=>e.setComposerText),o=I(e=>e.toggleComposerCapture),s=I(e=>e.toggleAreaElement),c=I(e=>e.openNodeComposer),l=I(e=>e.closeComposer),u=I(e=>e.saveComposer),d=(0,_.useRef)(null),f=(0,_.useRef)(null),p=It(e,n),m=e.kind===`node`?e.nodeId:null,h=e.kind===`area`?e.box:null;(0,_.useEffect)(()=>{d.current?.focus({preventScroll:!0})},[e.kind,m]),(0,_.useLayoutEffect)(()=>{let e=f.current,t=e?.closest(`.canvas-viewport`);if(!e||!t)return;e.style.top=`${(p.y+p.height)*r+Bt}px`,e.style.transform=``;let n=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=i.top-n.top-(p.height*r+20);i.bottom>n.bottom&&a>n.bottom-i.top&&(e.style.top=`${p.y*r-Bt}px`,e.style.transform=`translateY(-100%)`)});let g=(0,_.useMemo)(()=>h?Fe(t,h,{imageHref:N.imageUrl}):null,[h,t]),v=e.text.trim()!==``&&!i;return(0,L.jsxs)(`div`,{ref:f,className:`remark-composer`,style:{left:p.x*r},onPointerDown:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`remark-composer-head`,children:[(0,L.jsx)(R,{name:e.kind===`node`?`mouse-pointer-click`:`square-dashed-mouse-pointer`}),(0,L.jsx)(`h2`,{children:e.kind===`node`?`Remarque sur un élément`:`Remarque sur une zone`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Annuler (Échap)`,onClick:l,children:(0,L.jsx)(R,{name:`x`})})]}),e.kind===`node`?(0,L.jsxs)(`div`,{className:`remark-composer-section`,children:[(0,L.jsxs)(`div`,{className:`remark-breadcrumb`,children:[[...x(t.nodes,e.nodeId)].reverse().map(e=>(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`button`,{type:`button`,className:`link-button`,onClick:()=>c(e.id),children:e.name}),(0,L.jsx)(`span`,{className:`remark-breadcrumb-sep`,children:`›`})]},e.id)),(0,L.jsx)(`span`,{className:`remark-chip`,children:t.nodes.find(t=>t.id===e.nodeId)?.name})]}),(0,L.jsx)(`p`,{className:`remark-hint`,children:`Cliquez sur un niveau pour viser un parent ; Alt + clic sur la planche vise l’élément exact.`})]}):(0,L.jsxs)(`div`,{className:`remark-composer-section`,children:[(0,L.jsx)(`div`,{className:`remark-preview`,role:`img`,"aria-label":`Aperçu de la zone`,dangerouslySetInnerHTML:{__html:g}}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`x `,Math.round(e.box.x),`, y `,Math.round(e.box.y),` · `,Math.round(e.box.width),` ×`,` `,Math.round(e.box.height),` px`]}),(0,L.jsxs)(`div`,{className:`remark-hits-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Éléments détectés`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e.elementIds.length,` sur `,e.hits.length,` cité`,e.elementIds.length>1?`s`:``]})]}),e.hits.length===0?(0,L.jsx)(`p`,{className:`remark-hint`,children:`Aucun élément dans cette zone.`}):(0,L.jsx)(`ul`,{className:`remark-hits`,children:e.hits.map(t=>(0,L.jsx)(`li`,{children:(0,L.jsxs)(`label`,{"data-off":!e.elementIds.includes(t.id)||void 0,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:e.elementIds.includes(t.id),onChange:()=>s(t.id)}),(0,L.jsx)(`span`,{className:`remark-hit-name`,children:t.name}),(0,L.jsxs)(`span`,{className:`remark-hit-kind`,children:[t.type,t.partial?` · en partie`:``]})]})},t.id))})]}),(0,L.jsx)(`textarea`,{ref:d,className:`remark-textarea`,rows:3,placeholder:`Ce que l'agent doit revoir…`,value:e.text,onChange:e=>a(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&l(),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&u()}}),(0,L.jsxs)(`label`,{className:`remark-check`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:e.capture,onChange:o}),e.kind===`node`?`Joindre une capture de l'élément`:`Joindre une capture de la zone`]}),(0,L.jsxs)(`div`,{className:`remark-composer-foot`,children:[(0,L.jsx)(`span`,{className:`remark-hint`,children:`Ctrl + Entrée · Échap`}),(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:l,children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:!v,onClick:()=>void u(),children:i?`Enregistrement…`:`Enregistrer`})]})]})}var Ht=[{id:`nw`,cursor:`nwse-resize`,fx:0,fy:0},{id:`n`,cursor:`ns-resize`,fx:.5,fy:0},{id:`ne`,cursor:`nesw-resize`,fx:1,fy:0},{id:`e`,cursor:`ew-resize`,fx:1,fy:.5},{id:`se`,cursor:`nwse-resize`,fx:1,fy:1},{id:`s`,cursor:`ns-resize`,fx:.5,fy:1},{id:`sw`,cursor:`nesw-resize`,fx:0,fy:1},{id:`w`,cursor:`ew-resize`,fx:0,fy:.5}];function Ut(e,t){return{x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),width:Math.abs(t.x-e.x),height:Math.abs(t.y-e.y)}}function Wt(e,t,n){let r=Math.max(0,Math.round(e.x)),i=Math.max(0,Math.round(e.y));return{x:r,y:i,width:Math.max(0,Math.min(t,Math.round(e.x+e.width))-r),height:Math.max(0,Math.min(n,Math.round(e.y+e.height))-i)}}var Gt=4,Kt=400,qt=6,Jt=4;function Yt(e,t,n){return e!==null&&e.id===t&&n.timeStamp-e.time<Kt&&Math.abs(n.clientX-e.x)<qt&&Math.abs(n.clientY-e.y)<qt}function Xt(e,t,n,r){if(e.type===`line`)return t===`start`?{x:P(e.x+n),y:P(e.y+r),width:P(e.width-n),height:P(e.height-r)}:{width:P(e.width+n),height:P(e.height+r)};let i=y(e),{x:a,y:o,width:s,height:c}=i;t.includes(`w`)&&(a=i.x+n,s=i.width-n),t.includes(`e`)&&(s=i.width+n),t.includes(`n`)&&(o=i.y+r,c=i.height-r),t.includes(`s`)&&(c=i.height+r);let l=e.type===`text`?20:4;if(s<l&&(t.includes(`w`)&&(a=i.x+i.width-l),s=l),c<l&&(t.includes(`n`)&&(o=i.y+i.height-l),c=l),e.type===`icon`){let e=Math.max(l,Math.min(s,c));t.includes(`w`)&&(a=i.x+i.width-e),t.includes(`n`)&&(o=i.y+i.height-e),s=e,c=e}return{x:P(a),y:P(o),width:P(s),height:P(c)}}var Zt={imageHref:N.imageUrl};function Qt(){let e=F(e=>e.design),t=F(e=>e.tool),n=F(e=>e.zoom),r=F(e=>e.pan),i=F(e=>e.panMode),a=F(e=>e.selectedIds),o=F(e=>e.editingTextId),s=I(e=>e.mode===`remarks`),c=I(e=>e.composer?.kind===`node`?e.composer.nodeId:null),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=(0,_.useRef)(null),p=(0,_.useRef)({kind:`none`}),m=(0,_.useRef)(null),[h,g]=(0,_.useState)(0),[v,y]=(0,_.useState)(null),x=(0,_.useMemo)(()=>k(e?.nodes??[]),[e]),S=(0,_.useMemo)(()=>te(x),[x]),C=(0,_.useMemo)(()=>b(x),[x]),w=(0,_.useCallback)(e=>{let t=d.current?.getBoundingClientRect();return t?{x:(e.clientX-t.left-r.x)/n,y:(e.clientY-t.top-r.y)/n}:{x:0,y:0}},[r.x,r.y,n]);(0,_.useEffect)(()=>{let e=d.current;if(!e)return;let t=t=>{t.preventDefault();let n=F.getState(),r=e.getBoundingClientRect();if(t.ctrlKey||t.metaKey){n.zoomAround(n.zoom*Math.exp(-t.deltaY*.0015),{x:t.clientX-r.left,y:t.clientY-r.top});return}n.setPan({x:n.pan.x-t.deltaX,y:n.pan.y-t.deltaY})};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[]);let ee=(0,_.useRef)(null);if((0,_.useLayoutEffect)(()=>{let t=d.current;if(!e||!t||ee.current===e.id)return;ee.current=e.id;let n=t.getBoundingClientRect(),r=F.getState();r.setPan({x:Math.max(32,(n.width-e.width*r.zoom)/2),y:Math.max(32,(n.height-e.height*r.zoom)/2)})},[e]),(0,_.useEffect)(()=>{if(p.current.kind===`none`)return;let e=e=>{let t=p.current,n=F.getState();if(t.kind===`pan`){n.setPan({x:t.panX+(e.clientX-t.clientX),y:t.panY+(e.clientY-t.clientY)});return}let r=w(e);if(t.kind===`create`)t.point=r,y({kind:`create`,box:Ut(t.origin,r)});else if(t.kind===`marquee`)t.point=r,y({kind:`marquee`,box:Ut(t.origin,r)});else if(t.kind===`remark`){if(!t.moved){if(!(Math.abs(e.clientX-t.screen.x)>=Jt||Math.abs(e.clientY-t.screen.y)>=Jt))return;t.moved=!0}t.point=r;let i=n.design;i&&y({kind:`area`,box:Wt(Ut(t.origin,r),i.width,i.height)})}else if(t.kind===`move`){if(!t.moved){if(!(Math.abs(e.clientX-t.screen.x)>=Jt||Math.abs(e.clientY-t.screen.y)>=Jt))return;t.moved=!0,n.beginHistory()}n.moveSelection(P(r.x-t.origin.x),P(r.y-t.origin.y),t.startNodes,{history:!1})}else if(t.kind===`resize`){let e=r.x-t.origin.x,i=r.y-t.origin.y;n.patchNodes([t.startNode.id],Xt(t.startNode,t.handle,e,i),{history:!1})}},t=()=>{let e=p.current,t=F.getState();if(e.kind===`create`){let n=e.point.x-e.origin.x,r=e.point.y-e.origin.y,i=Math.abs(n)<4&&Math.abs(r)<4;if(e.type===`line`)t.addNode(`line`,{x:P(e.origin.x),y:P(e.origin.y),...i?{}:{width:P(n),height:P(r)}});else{let n=e.type===`icon`?{icon:t.pendingIcon}:{};if(i)t.addNode(e.type,{...n,x:P(e.origin.x),y:P(e.origin.y)});else{let r=Ut(e.origin,e.point);t.addNode(e.type,{...n,x:P(r.x),y:P(r.y),width:P(r.width),height:P(r.height)})}}}else if(e.kind===`marquee`){let n=Ut(e.origin,e.point),r=(t.design?.nodes??[]).filter(e=>e.parentId===null).filter(e=>ht(D(S,e.id),n));t.setSelection(r.map(e=>e.id))}else if(e.kind===`remark`&&t.design){let n=I.getState();if(e.moved){let r=Wt(Ut(e.origin,e.point),t.design.width,t.design.height);r.width>=Gt&&r.height>=Gt&&n.openAreaComposer(r,ze(t.design.nodes,r))}else if(e.nodeId){let t=n.composer?.kind===`node`?n.composer.nodeId:null;n.openNodeComposer(Mt(x,e.nodeId,e.alt,t))}else n.closeComposerIfEmpty()}p.current={kind:`none`},y(null)};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,t),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,t)}},[h,w,S,x]),!e)return null;let T=s?null:re(S,a),E=a.length===1?x.find(e=>e.id===a[0]):void 0,ne=!s&&E&&E.type!==`group`?E:void 0,ie=o?x.find(e=>e.id===o):void 0,ae=e=>{p.current=e,g(e=>e+1)},oe=e=>{ae({kind:`pan`,clientX:e.clientX,clientY:e.clientY,panX:r.x,panY:r.y}),e.preventDefault()},O=e=>{if(i||e.button===1){oe(e);return}if(e.button!==0)return;let n=w(e);if(s){let t={x:e.clientX,y:e.clientY};ae({kind:`remark`,origin:n,point:n,screen:t,nodeId:null,alt:!1,moved:!1})}else t===`select`?(m.current=null,F.getState().setSelection([]),ae({kind:`marquee`,origin:n,point:n})):ae({kind:`create`,type:t,origin:n,point:n});e.preventDefault()},ce=(e,n)=>{if(i||e.button===1){oe(e);return}if(e.button!==0)return;if(s){e.stopPropagation();let t=w(e),r={x:e.clientX,y:e.clientY};ae({kind:`remark`,origin:t,point:t,screen:r,nodeId:n.id,alt:e.altKey,moved:!1});return}if(t!==`select`)return;e.stopPropagation();let r=F.getState(),a=Yt(m.current,n.id,e);m.current={id:n.id,time:e.timeStamp,x:e.clientX,y:e.clientY};let o=se(e.altKey?n.id:a?Dt(x,n.id,r.selectedIds):Et(x,n.id,r.selectedIds,!1));if(e.shiftKey){r.toggleSelection(o);return}if(a&&o===n.id&&n.type===`text`){r.setSelection([n.id]),r.setEditingText(n.id);return}let c=r.selectedIds.includes(o);c||r.setSelection([o]);let l=c?r.selectedIds:[o],u=x.filter(e=>l.includes(e.id));ae({kind:`move`,origin:w(e),screen:{x:e.clientX,y:e.clientY},moved:!1,startNodes:structuredClone(u)})},le=(e,t)=>{e.button!==0||!ne||(e.stopPropagation(),F.getState().beginHistory(),ae({kind:`resize`,handle:t,origin:w(e),startNode:structuredClone(ne)}))},ue=e=>{let t=F.getState();ie&&t.patchNodes([ie.id],{text:e}),t.setEditingText(null)},de=e=>e.map(e=>{if(e.type===`group`){let t=D(S,e.id),n=S.origin.get(e.id)??{x:0,y:0},r={cx:t.x+t.width/2-n.x,cy:t.y+t.height/2-n.y};return(0,L.jsx)(`g`,{className:`canvas-group`,transform:Ce(e,r),opacity:e.opacity>=1?void 0:e.opacity,children:de(C.get(e.id)??[])},e.id)}return(0,L.jsx)(`g`,{className:`canvas-node`,"data-node-id":e.id,"data-hidden":e.id===o||void 0,onPointerDown:t=>ce(t,e),dangerouslySetInnerHTML:{__html:Me(e,Zt)}},e.id)});return(0,L.jsx)(`div`,{ref:d,className:`canvas-viewport`,"data-pan":i||void 0,onScroll:e=>{e.currentTarget.scrollTop=0,e.currentTarget.scrollLeft=0},onPointerDown:e=>{i||e.button===1?oe(e):e.button===0&&s?I.getState().closeComposerIfEmpty():e.button===0&&F.getState().setSelection([])},children:(0,L.jsxs)(`div`,{className:`canvas-stage`,style:{width:e.width*n,height:e.height*n,transform:`translate(${r.x}px, ${r.y}px)`},children:[(0,L.jsx)(`div`,{ref:f,className:`canvas-surface`,"data-tool":t,"data-mode":s?`remarks`:void 0,style:{width:e.width,height:e.height,background:e.background,transform:`scale(${n})`},onPointerDown:O,onPointerMove:e=>{if(!s||p.current.kind!==`none`)return;let t=e.target.closest(`[data-node-id]`)?.getAttribute(`data-node-id`)??null,n=t===null?null:Mt(x,t,e.altKey,c);n!==l&&u(n)},onPointerLeave:()=>u(null),children:(0,L.jsxs)(`svg`,{className:`canvas-svg`,width:e.width,height:e.height,viewBox:`0 0 ${e.width} ${e.height}`,children:[de(C.get(null)??[]),T&&(0,L.jsx)(`rect`,{className:`selection-frame`,x:T.x,y:T.y,width:T.width,height:T.height,vectorEffect:`non-scaling-stroke`}),s&&(0,L.jsx)(Lt,{designId:e.id,layout:S,hoverId:l}),v&&(0,L.jsx)(`rect`,{className:v.kind===`marquee`?`marquee`:v.kind===`area`?`remark-area-draft`:`creation-preview`,x:v.box.x,y:v.box.y,width:v.box.width,height:v.box.height,vectorEffect:`non-scaling-stroke`})]})}),!i&&ne&&(0,L.jsx)($t,{node:ne,layout:S,zoom:n,onStart:le}),s&&(0,L.jsx)(zt,{design:e,nodes:x,layout:S,zoom:n,hoverId:l}),!s&&ie?.type===`text`&&(0,L.jsx)(tn,{node:ie,box:D(S,ie.id),zoom:n,onCommit:ue})]})})}function $t({node:e,layout:t,zoom:n,onStart:r}){let i=D(t,e.id);if(e.type===`line`){let i=E(t,e.parentId);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(en,{cursor:`move`,left:(i.x+e.x)*n,top:(i.y+e.y)*n,onPointerDown:e=>r(e,`start`)}),(0,L.jsx)(en,{cursor:`move`,left:(i.x+e.x+e.width)*n,top:(i.y+e.y+e.height)*n,onPointerDown:e=>r(e,`end`)})]})}return(0,L.jsx)(L.Fragment,{children:Ht.map(e=>(0,L.jsx)(en,{cursor:e.cursor,left:(i.x+i.width*e.fx)*n,top:(i.y+i.height*e.fy)*n,onPointerDown:t=>r(t,e.id)},e.id))})}function en({left:e,top:t,cursor:n,onPointerDown:r}){return(0,L.jsx)(`div`,{className:`handle`,style:{left:e,top:t,cursor:n},onPointerDown:r})}function tn({node:e,box:t,zoom:n,onCommit:r}){let[i,a]=(0,_.useState)(e.text??``),o=(0,_.useRef)(null),s=ye(e);return(0,_.useEffect)(()=>{o.current?.focus(),o.current?.select()},[]),(0,L.jsx)(`textarea`,{ref:o,className:`text-editor`,value:i,onPointerDown:e=>e.stopPropagation(),onChange:e=>a(e.target.value),onBlur:()=>r(i),onKeyDown:e=>{e.stopPropagation(),(e.key===`Escape`||e.key===`Enter`&&(e.metaKey||e.ctrlKey))&&r(i)},style:{left:t.x*n,top:(t.y+s.blockOffset)*n,width:t.width*n,minHeight:s.blockHeight*n,fontSize:s.fontSize*n,lineHeight:`${s.lineStep*n}px`,fontFamily:e.fontFamily,fontWeight:e.fontWeight,fontStyle:e.fontStyle,textAlign:e.textAlign,color:e.color}})}function nn(e,t){return{name:e,path:t,children:[],designs:[],total:0}}function rn(e){let t=nn(``,``);for(let n of e){let e=(n.group??``).split(`/`).filter(e=>e.trim()!==``),r=t;for(let t of e){let e=r.path===``?t:`${r.path}/${t}`,n=r.children.find(t=>t.path===e);n||(n=nn(t,e),r.children.push(n)),r=n}r.designs.push(n)}let n=e=>(e.children.sort((e,t)=>an(e.name,t.name)),e.designs.sort((e,t)=>an(e.name,t.name)),e.total=e.designs.length+e.children.reduce((e,t)=>e+n(t),0),e.total);return n(t),t}function an(e,t){return e.localeCompare(t,void 0,{sensitivity:`base`,numeric:!0})}function on(e){if(e.designs.length>0)return e.designs[0];for(let t of e.children){let e=on(t);if(e)return e}return null}function sn(e,t){if(e.path===t)return e;for(let n of e.children)if(t===n.path||t.startsWith(`${n.path}/`))return sn(n,t);return null}function cn(e,t){let n=e.children.map(e=>cn(e,t)).filter(e=>e.total>0),r=e.designs.filter(t);return{...e,children:n,designs:r,total:r.length+n.reduce((e,t)=>e+t.total,0)}}function ln(e,t){let n=e.children.map(e=>t(e.name)?e:ln(e,t)).filter(e=>e.total>0),r=e.designs.filter(e=>t(e.name));return{...e,children:n,designs:r,total:r.length+n.reduce((e,t)=>e+t.total,0)}}function un(e){return e.children.flatMap(e=>[e.path,...un(e)])}function dn(e){return[...e.designs,...e.children.flatMap(dn)]}function fn(e){let t=e.split(/[\s_-]+/).filter(e=>/[\p{L}\p{N}]/u.test(e));return(t.length>=2?t[0][0]+t[1][0]:(t[0]??`?`).slice(0,2)).toUpperCase()}function pn(e){let t=new Set;for(let n of e){let e=(n.group??``).split(`/`).filter(e=>e.trim()!==``);for(let n=1;n<=e.length;n++)t.add(e.slice(0,n).join(`/`))}return[...t].sort()}var mn=[{label:`Desktop 1440 × 900`,width:1440,height:900},{label:`Mobile 375 × 812`,width:375,height:812},{label:`Carré 1080 × 1080`,width:1080,height:1080}],hn=`mcp-design.collapsed-groups`,gn=`mcp-design.sidebar-scope`,_n=[`#1b4dd6`,`#0f766e`,`#c2410c`,`#7c3aed`,`#db2777`,`#475569`,`#a16207`,`#15803d`];function vn(e,t,n){try{let r=localStorage.getItem(e);return r===null?n:t(JSON.parse(r))}catch{return n}}function yn(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch{}}function bn(e,t){return`${e} ${t}${e>1?`s`:``}`}function xn(e){return e.normalize(`NFD`).replace(/\p{Diacritic}/gu,``).toLowerCase()}function Sn(e){let t=new Date(e),n=(Date.now()-t.getTime())/1e3;if(n<60)return`à l'instant`;if(n<3600)return`il y a ${Math.floor(n/60)} min`;if(n<86400)return`il y a ${Math.floor(n/3600)} h`;if(n<2592e3)return`il y a ${Math.floor(n/86400)} j`;let r=t.getFullYear()===new Date().getFullYear();return t.toLocaleDateString(`fr`,{day:`numeric`,month:`short`,year:r?void 0:`numeric`})}function Cn(e){let t=0;for(let n of e)t=t*31+n.charCodeAt(0)|0;return _n[Math.abs(t)%_n.length]}function wn(e){let t=dn(e),n=t.filter(e=>e.pendingChanges>0).length;return`${bn(t.length,`page`)} · ${n} à synchroniser`}function Tn(e,t,n){(0,_.useEffect)(()=>{if(!e)return;let r=e=>{t.current?.contains(e.target)||n()},i=e=>{e.key===`Escape`&&n()};return document.addEventListener(`mousedown`,r),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`mousedown`,r),document.removeEventListener(`keydown`,i)}},[e,t,n])}function En(){let e=F(e=>e.designs),t=F(e=>e.createDesign),n=F(e=>e.setDesignGroup),r=I(e=>e.remarks),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(``),[c,l]=(0,_.useState)(``),[u,d]=(0,_.useState)(0),[f,p]=(0,_.useState)(()=>vn(hn,e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],[])),[m,h]=(0,_.useState)(()=>vn(gn,e=>typeof e==`string`?e:null,null)),[g,v]=(0,_.useState)(``),[y,b]=(0,_.useState)(`all`),[x,S]=(0,_.useState)(null),C=(0,_.useMemo)(()=>rn(e),[e]),w=(0,_.useMemo)(()=>pn(e),[e]),ee=(0,_.useMemo)(()=>m===null?null:sn(C,m),[C,m]),T=ee??C,te=ee?.path??null,E=(0,_.useMemo)(()=>{let e=new Map;for(let t of jt(r))e.set(t.designId,(e.get(t.designId)??0)+1);return e},[r]),D=(0,_.useMemo)(()=>{let e=xn(g.trim());return e===``?T:ln(T,t=>xn(t).includes(e))},[T,g]),ne=(0,_.useMemo)(()=>dn(D),[D]),re=ne.filter(e=>e.pendingChanges>0).length,ie=ne.filter(e=>E.has(e.id)).length,ae=(0,_.useMemo)(()=>y===`pending`?cn(D,e=>e.pendingChanges>0):y===`remarks`?cn(D,e=>E.has(e.id)):D,[D,y,E]),oe=g.trim()!==``||y!==`all`,se=e=>{h(e),yn(gn,e)},O=e=>{p(t=>{let n=t.includes(e)?t.filter(t=>t!==e):[...t,e];return yn(hn,n),n})},k=(0,_.useMemo)(()=>un(T),[T]),ce=k.length>0&&k.every(e=>f.includes(e)),le=()=>{p(e=>{let t=ce?e.filter(e=>!k.includes(e)):[...new Set([...e,...k])];return yn(hn,t),t})},ue=()=>{i||l(te??``),a(e=>!e)},de=async e=>{e.preventDefault();let n=o.trim();n&&(await t({name:n,group:c.trim()||null,...mn[u]}),s(``),a(!1))},A=t=>r=>{if(!r.dataTransfer.types.includes(`text/design-id`))return;r.preventDefault(),r.stopPropagation(),S(null);let i=r.dataTransfer.getData(`text/design-id`);if(!i)return;let a=e.find(e=>e.id===i);!a||(a.group??null)===t||n(i,t)},j=e=>t=>{t.dataTransfer.types.includes(`text/design-id`)&&(t.preventDefault(),t.stopPropagation(),t.dataTransfer.dropEffect=`move`,S(e??``))},fe=e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||S(null)},pe=[{id:`all`,label:`Toutes`,count:ne.length,title:`Toutes les pages`},{id:`pending`,label:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`pending-dot`}),`À synchroniser`]}),count:re,title:`Pages modifiées depuis leur dernière récupération par l'agent`},{id:`remarks`,label:(0,L.jsx)(R,{name:`message-square`,size:12,strokeWidth:2.5}),count:ie,title:`Pages avec des remarques non transmises`}];return(0,L.jsxs)(`aside`,{className:`sidebar`,children:[(0,L.jsx)(`datalist`,{id:`design-groups`,children:w.map(e=>(0,L.jsx)(`option`,{value:e},e))}),(0,L.jsxs)(`div`,{className:`sidebar-top`,children:[(0,L.jsx)(Dn,{tree:C,current:ee,onChange:se}),(0,L.jsxs)(`div`,{className:`sidebar-search-row`,children:[(0,L.jsxs)(`label`,{className:`sidebar-search`,children:[(0,L.jsx)(R,{name:`search`,size:15}),(0,L.jsx)(`input`,{type:`search`,placeholder:`Rechercher page ou dossier`,value:g,onChange:e=>v(e.target.value),onKeyDown:e=>{e.key===`Escape`&&v(``)}})]}),(0,L.jsx)(`button`,{type:`button`,className:`collapse-all-button`,disabled:oe||k.length===0,title:ce?`Tout déplier`:`Tout replier`,"aria-label":ce?`Tout déplier`:`Tout replier`,onClick:le,children:(0,L.jsx)(R,{name:ce?`chevrons-up-down`:`chevrons-down-up`,size:16})})]}),(0,L.jsx)(`div`,{className:`sidebar-filters`,role:`radiogroup`,"aria-label":`Filtrer les pages`,children:pe.map(e=>(0,L.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":y===e.id,className:`filter-chip`,"data-kind":e.id,"data-active":y===e.id||void 0,title:e.title,onClick:()=>b(e.id),children:[e.label,(0,L.jsx)(`span`,{className:`filter-chip-count`,children:e.count})]},e.id))})]}),(0,L.jsxs)(`div`,{className:`design-tree`,"data-drop":x===(te??``)||void 0,onDragOver:j(te),onDragLeave:fe,onDrop:A(te),children:[(0,L.jsx)(kn,{branch:ae,rootLabel:ee?null:`Hors groupe`,collapsed:f,forceOpen:oe,dropTarget:x,draftCounts:E,onToggle:O,onDragOverGroup:j,onDragLeaveGroup:fe,onDropGroup:A}),e.length===0?(0,L.jsxs)(`p`,{className:`empty-hint`,children:[`Aucune page. Créez-en une ici, ou demandez à l'agent d'en générer avec l'outil `,(0,L.jsx)(`code`,{children:`create_design`}),`.`]}):ae.total===0&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Aucune page ne correspond.`})]}),(0,L.jsxs)(`div`,{className:`sidebar-foot`,children:[i&&(0,L.jsxs)(`form`,{className:`create-form`,onSubmit:de,children:[(0,L.jsx)(`input`,{autoFocus:!0,placeholder:`Nom de la page`,value:o,onChange:e=>s(e.target.value)}),(0,L.jsx)(`input`,{list:`design-groups`,placeholder:`Groupe (optionnel, ex. Marketing/Landing)`,value:c,onChange:e=>l(e.target.value)}),(0,L.jsx)(`select`,{value:u,onChange:e=>d(Number(e.target.value)),children:mn.map((e,t)=>(0,L.jsx)(`option`,{value:t,children:e.label},e.label))}),(0,L.jsx)(`button`,{type:`submit`,className:`primary-button`,disabled:o.trim()===``,children:`Créer`})]}),(0,L.jsx)(`button`,{type:`button`,className:`new-page-button`,"data-open":i||void 0,onClick:ue,children:i?`Annuler`:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(R,{name:`plus`,size:16,strokeWidth:2.25}),`Nouvelle page`]})})]})]})}function Dn({tree:e,current:t,onChange:n}){let[r,i]=(0,_.useState)(!1),a=(0,_.useRef)(null);Tn(r,a,(0,_.useCallback)(()=>i(!1),[]));let o=e=>{n(e),i(!1)};return(0,L.jsxs)(`div`,{className:`scope-picker`,ref:a,children:[(0,L.jsxs)(`button`,{type:`button`,className:`scope-button`,"aria-haspopup":`listbox`,"aria-expanded":r,onClick:()=>i(e=>!e),children:[(0,L.jsx)(On,{branch:t}),(0,L.jsxs)(`span`,{className:`scope-text`,children:[(0,L.jsx)(`span`,{className:`scope-name`,children:t?.name??`Tous les groupes`}),(0,L.jsx)(`span`,{className:`scope-summary`,children:wn(t??e)})]}),(0,L.jsx)(R,{name:`chevrons-up-down`,size:16})]}),r&&(0,L.jsx)(`ul`,{className:`scope-menu`,role:`listbox`,children:[null,...e.children].map(n=>{let r=(n?.path??null)===(t?.path??null);return(0,L.jsx)(`li`,{children:(0,L.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r,className:`scope-option`,onClick:()=>o(n?.path??null),children:[(0,L.jsx)(On,{branch:n,small:!0}),(0,L.jsx)(`span`,{className:`scope-option-name`,children:n?.name??`Tous les groupes`}),(0,L.jsx)(`span`,{className:`scope-option-count`,children:(n??e).total}),r&&(0,L.jsx)(R,{name:`check`,size:14,strokeWidth:2.5})]})},n?.path??``)})})]})}function On({branch:e,small:t}){return(0,L.jsx)(`span`,{className:`group-avatar`,"data-small":t||void 0,style:{background:e?Cn(e.name):`var(--ink)`},"aria-hidden":`true`,children:e?fn(e.name):(0,L.jsx)(R,{name:`layout-grid`,size:t?12:16})})}function kn({branch:e,rootLabel:t=null,collapsed:n,forceOpen:r,dropTarget:i,draftCounts:a,onToggle:o,onDragOverGroup:s,onDragLeaveGroup:c,onDropGroup:l}){return(0,L.jsxs)(L.Fragment,{children:[e.children.map(e=>{let t=!r&&n.includes(e.path);return(0,L.jsxs)(`div`,{className:`design-group`,"data-drop":i===e.path||void 0,onDragOver:s(e.path),onDragLeave:c,onDrop:l(e.path),children:[(0,L.jsxs)(`button`,{type:`button`,className:`design-group-header`,"aria-expanded":!t,onClick:()=>o(e.path),children:[(0,L.jsx)(R,{name:t?`chevron-right`:`chevron-down`,size:14,strokeWidth:2.25}),(0,L.jsx)(R,{name:t?`folder`:`folder-open`,size:16,strokeWidth:1.75}),(0,L.jsx)(`span`,{className:`design-group-name`,children:e.name}),(0,L.jsx)(`span`,{className:`design-group-count`,children:e.total})]}),!t&&(0,L.jsx)(`div`,{className:`design-group-body`,children:(0,L.jsx)(kn,{branch:e,collapsed:n,forceOpen:r,dropTarget:i,draftCounts:a,onToggle:o,onDragOverGroup:s,onDragLeaveGroup:c,onDropGroup:l})})]},e.path)}),e.designs.length>0&&(0,L.jsxs)(L.Fragment,{children:[t&&e.children.length>0&&(0,L.jsx)(`p`,{className:`design-tree-label`,children:t}),(0,L.jsx)(`ul`,{className:`design-list`,children:e.designs.map(e=>(0,L.jsx)(jn,{entry:e,drafts:a.get(e.id)??0},e.id))})]})]})}function An({width:e,height:t}){let n={width:36,height:26},r=e/t,i=r>n.width/n.height?{width:n.width,height:Math.max(6,Math.round(n.width/r))}:{width:Math.max(6,Math.round(n.height*r)),height:n.height};return(0,L.jsx)(`span`,{className:`design-thumb`,"aria-hidden":`true`,children:(0,L.jsx)(`span`,{className:`design-thumb-page`,style:i})})}function jn({entry:e,drafts:t}){let n=F(t=>t.design?.id===e.id),r=F(e=>e.openDesign),i=F(e=>e.removeDesign),a=F(e=>e.duplicateDesign),o=F(e=>e.setDesignGroup),[s,c]=(0,_.useState)(`closed`),[l,u]=(0,_.useState)(``),d=(0,_.useRef)(null),f=(0,_.useCallback)(()=>c(`closed`),[]);return Tn(s!==`closed`,d,f),(0,L.jsxs)(`li`,{ref:d,className:`design-card`,"data-active":n||void 0,"data-menu":s!==`closed`||void 0,children:[(0,L.jsxs)(`button`,{type:`button`,className:`design-card-main`,draggable:!0,onDragStart:t=>{t.dataTransfer.setData(`text/design-id`,e.id),t.dataTransfer.effectAllowed=`move`},title:e.name,onClick:()=>void r(e.id),children:[(0,L.jsx)(An,{width:e.width,height:e.height}),(0,L.jsxs)(`span`,{className:`design-card-text`,children:[(0,L.jsx)(`span`,{className:`design-card-name`,children:e.name}),(0,L.jsxs)(`span`,{className:`design-card-meta`,children:[e.width,` × `,e.height,` · `,Sn(e.updatedAt)]})]})]}),(0,L.jsxs)(`span`,{className:`design-card-status`,children:[t>0&&(0,L.jsxs)(`span`,{className:`remark-badge`,title:`${bn(t,`remarque`)} non transmise${t>1?`s`:``}`,children:[(0,L.jsx)(R,{name:`message-square`,size:10,strokeWidth:2.5}),t]}),e.pendingChanges>0&&(0,L.jsx)(`span`,{className:`pending-dot`,title:`${bn(e.pendingChanges,`modification`)} à synchroniser`,"aria-label":`${bn(e.pendingChanges,`modification`)} à synchroniser`})]}),(0,L.jsx)(`button`,{type:`button`,className:`design-card-more`,title:`Plus d'actions`,"aria-haspopup":`menu`,"aria-expanded":s!==`closed`,onClick:()=>c(e=>e===`closed`?`actions`:`closed`),children:(0,L.jsx)(R,{name:`ellipsis`,size:16})}),s===`actions`&&(0,L.jsxs)(`div`,{className:`card-menu`,role:`menu`,children:[(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{u(e.group??``),c(`move`)},children:[(0,L.jsx)(R,{name:`folder-input`,size:16,strokeWidth:1.75}),`Déplacer vers…`]}),(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{c(`closed`),a(e.id,`${e.name} (copie)`)},children:[(0,L.jsx)(R,{name:`copy`,size:16,strokeWidth:1.75}),`Dupliquer`]}),(0,L.jsx)(`hr`,{}),(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-danger":!0,onClick:()=>{c(`closed`),confirm(`Supprimer définitivement « ${e.name} » ?`)&&i(e.id)},children:[(0,L.jsx)(R,{name:`trash-2`,size:16,strokeWidth:1.75}),`Supprimer`]})]}),s===`move`&&(0,L.jsxs)(`form`,{className:`card-menu card-move`,onSubmit:t=>{t.preventDefault();let n=l.trim()||null;c(`closed`),n!==(e.group??null)&&o(e.id,n)},children:[(0,L.jsx)(`label`,{htmlFor:`move-${e.id}`,children:`Déplacer vers le groupe`}),(0,L.jsx)(`input`,{id:`move-${e.id}`,autoFocus:!0,list:`design-groups`,placeholder:`Vide : hors groupe`,value:l,onChange:e=>u(e.target.value)}),(0,L.jsxs)(`div`,{className:`card-move-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:f,children:`Annuler`}),(0,L.jsx)(`button`,{type:`submit`,className:`primary-button`,children:`Déplacer`})]})]})]})}var Mn=`modulepreload`,Nn=function(e,t){return new URL(e,t).href},Pn={},Fn=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}function s(e){return import.meta.resolve?import.meta.resolve(e):new URL(e,import.meta.url).href}r=o(t.map(t=>{if(t=Nn(t,n),t=s(t),t in Pn)return;Pn[t]=!0;let r=t.endsWith(`.css`);for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}let i=document.createElement(`link`);if(i.rel=r?`stylesheet`:Mn,r||(i.as=`script`),i.crossOrigin=``,i.href=t,a&&i.setAttribute(`nonce`,a),document.head.appendChild(i),r)return new Promise((e,n)=>{i.addEventListener(`load`,e),i.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},In=120;function Ln({name:e}){let t=(0,_.useMemo)(()=>(de(e)??[]).map(je).join(``),[e]);return(0,L.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,dangerouslySetInnerHTML:{__html:t}})}function Rn({current:e,onPick:t,onClose:n}){let[r,i]=(0,_.useState)(``),[a,o]=(0,_.useState)(null),s=(0,_.useRef)(null),c=(0,_.useRef)(null);(0,_.useEffect)(()=>{s.current?.focus();let e=!1;return Fn(()=>import(`./search-BYdwq4vz.js`).then(t=>{e||o(()=>t.searchIcons)}),[],import.meta.url),()=>{e=!0}},[]),(0,_.useEffect)(()=>{let e=e=>{c.current?.contains(e.target)||n()},t=e=>{e.key===`Escape`&&(e.stopPropagation(),n())};return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t,!0),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t,!0)}},[n]);let l=(0,_.useMemo)(()=>{let e=r.trim();return e===``?fe.slice(0,In):a?a(e,In).map(e=>e.name):A().filter(t=>t.includes(e.toLowerCase())).slice(0,In)},[r,a]);return(0,L.jsxs)(`div`,{className:`icon-picker`,ref:c,children:[(0,L.jsx)(`input`,{ref:s,type:`search`,className:`icon-picker-search`,placeholder:`Chercher une icône (en anglais)…`,value:r,onChange:e=>i(e.target.value)}),l.length===0?(0,L.jsxs)(`p`,{className:`empty-hint`,children:[`Aucune icône pour « `,r,` ». Essayez un terme anglais plus simple.`]}):(0,L.jsx)(`div`,{className:`icon-picker-grid`,children:l.map(n=>(0,L.jsxs)(`button`,{type:`button`,className:`icon-picker-cell`,"data-active":n===e||void 0,title:n,onClick:()=>t(n),children:[(0,L.jsx)(Ln,{name:n}),(0,L.jsx)(`span`,{children:n})]},n))})]})}var zn=[300,400,500,600,700,800],Bn=[{value:`left`,glyph:`⇤`,label:`Aligner à gauche`},{value:`center`,glyph:`↔`,label:`Centrer`},{value:`right`,glyph:`⇥`,label:`Aligner à droite`}],Vn=[{value:`cover`,label:`Couvrir`,title:`Remplit la boîte, rogne le débordement`},{value:`contain`,label:`Contenir`,title:`Montre toute l'image dans la boîte`},{value:`fill`,label:`Étirer`,title:`Étire l'image aux dimensions de la boîte`}];function Hn({label:e,value:t,step:n=1,min:r,max:i,onChange:a}){return(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:e}),(0,L.jsx)(`input`,{type:`number`,step:n,min:r,max:i,value:t===void 0?``:P(t),onChange:e=>{let t=Number(e.target.value);Number.isFinite(t)&&a(t)}})]})}function Un({label:e,value:t,onChange:n}){let r=t??`#000000`;return(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:e}),(0,L.jsxs)(`span`,{className:`color-input`,children:[(0,L.jsx)(`input`,{type:`color`,value:/^#[0-9a-f]{6}$/i.test(r)?r:`#000000`,onChange:e=>n(e.target.value)}),(0,L.jsx)(`input`,{type:`text`,value:r,onChange:e=>n(e.target.value)})]})]})}function Wn(){let[e,t]=(0,_.useState)(!1),n=F(e=>e.design),r=F(e=>e.selectedIds),i=F(e=>e.patchNodes),a=F(e=>e.patchArtboard),o=F(e=>e.deleteSelected),s=F(e=>e.duplicateSelected),c=F(e=>e.reorderSelected),l=F(e=>e.groupSelected),u=F(e=>e.ungroupSelected),d=F(e=>e.detachSelected),f=F(e=>e.setSelection);if(!n)return null;let p=n.nodes.filter(e=>r.includes(e.id)),m=e=>i(r,e);if(p.length===0)return(0,L.jsxs)(`aside`,{className:`inspector`,children:[(0,L.jsx)(`h2`,{children:`Planche`}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Nom`}),(0,L.jsx)(`input`,{value:n.name,onChange:e=>a({name:e.target.value})})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Largeur`,value:n.width,min:1,onChange:e=>a({width:Math.max(1,e)})}),(0,L.jsx)(Hn,{label:`Hauteur`,value:n.height,min:1,onChange:e=>a({height:Math.max(1,e)})})]}),(0,L.jsx)(Un,{label:`Fond`,value:n.background,onChange:e=>a({background:e})}),(0,L.jsx)(`p`,{className:`empty-hint`,children:`Sélectionnez un élément pour modifier ses propriétés.`})]});let h=p.every(e=>e.type===p[0].type)?p[0].type:null,g=p[0],v=p.length>1;return(0,L.jsxs)(`aside`,{className:`inspector`,children:[(0,L.jsxs)(`h2`,{children:[v?`${p.length} éléments`:g.name,h&&(0,L.jsx)(`span`,{className:`inspector-type`,children:rt(h)})]}),!v&&(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Nom du calque`}),(0,L.jsx)(`input`,{value:g.name,onChange:e=>{let t=e.target.value;t.trim()!==``&&m({name:t})}})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`X`,value:g.x,onChange:e=>m({x:e})}),(0,L.jsx)(Hn,{label:`Y`,value:g.y,onChange:e=>m({y:e})})]}),h===`group`||h===`instance`?(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`L`}),(0,L.jsx)(`input`,{value:Math.round(g.width),readOnly:!0,title:`Déduit du contenu du groupe`})]}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`H`}),(0,L.jsx)(`input`,{value:Math.round(g.height),readOnly:!0,title:`Déduit du contenu du groupe`})]})]}):h===`icon`?(0,L.jsx)(`div`,{className:`field-row`,children:(0,L.jsx)(Hn,{label:`Taille`,value:g.width,min:1,onChange:e=>m({width:Math.max(1,e),height:Math.max(1,e)})})}):(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`L`,value:g.width,onChange:e=>m({width:e})}),(0,L.jsx)(Hn,{label:`H`,value:g.height,onChange:e=>m({height:e})})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Rotation`,value:g.rotation,onChange:e=>m({rotation:e})}),(0,L.jsx)(Hn,{label:`Opacité`,value:g.opacity,step:.05,min:0,max:1,onChange:e=>m({opacity:Math.min(1,Math.max(0,e))})})]}),h===`icon`&&(0,L.jsxs)(L.Fragment,{children:[!v&&(0,L.jsxs)(`div`,{className:`field icon-field`,children:[(0,L.jsx)(`span`,{children:`Icône`}),(0,L.jsxs)(`div`,{className:`tool-popover-anchor`,children:[(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,onClick:()=>t(e=>!e),children:g.icon??`Choisir…`}),e&&(0,L.jsx)(Rn,{current:g.icon,onPick:e=>{m(g.name===g.icon?{icon:e,name:e}:{icon:e}),t(!1)},onClose:()=>t(!1)})]})]}),(0,L.jsx)(Un,{label:`Couleur`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Épaisseur (/24)`,value:g.strokeWidth??2,step:.25,min:.25,max:4,onChange:e=>m({strokeWidth:Math.min(4,Math.max(.25,e))})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Remplissage`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,"data-active":(g.fill??`none`)!==`none`||void 0,onClick:()=>m({fill:(g.fill??`none`)===`none`?g.stroke??`#1a1a18`:`none`}),children:(g.fill??`none`)===`none`?`Aucun`:`Plein`})]})]})]}),h===`instance`&&!v&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Composant`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,title:`Sélectionner le groupe reproduit`,onClick:()=>g.componentId&&f([g.componentId]),children:n.nodes.find(e=>e.id===g.componentId)?.name??`?`})]}),(0,L.jsx)(`p`,{className:`empty-hint`,children:`Modifiez ce groupe pour mettre à jour toutes ses instances d'un coup. Pour faire diverger cette copie seulement, détachez-la.`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,onClick:d,children:`Détacher`})]}),h===`image`&&(0,L.jsxs)(`div`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Cadrage`}),(0,L.jsx)(`div`,{className:`segmented`,children:Vn.map(e=>(0,L.jsx)(`button`,{type:`button`,title:e.title,"data-active":(g.fit??`cover`)===e.value||void 0,onClick:()=>m({fit:e.value}),children:e.label},e.value))})]}),(h===`rect`||h===`ellipse`)&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Un,{label:`Remplissage`,value:g.fill,onChange:e=>m({fill:e})}),(0,L.jsx)(Un,{label:`Contour`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Épaisseur`,value:g.strokeWidth,min:0,onChange:e=>m({strokeWidth:Math.max(0,e)})}),h===`rect`&&(0,L.jsx)(Hn,{label:`Arrondi`,value:g.radius,min:0,onChange:e=>m({radius:Math.max(0,e)})})]})]}),h===`line`&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Un,{label:`Couleur`,value:g.stroke,onChange:e=>m({stroke:e})}),(0,L.jsx)(Hn,{label:`Épaisseur`,value:g.strokeWidth,min:0,onChange:e=>m({strokeWidth:Math.max(0,e)})})]}),h===`text`&&(0,L.jsxs)(L.Fragment,{children:[!v&&(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Contenu`}),(0,L.jsx)(`textarea`,{rows:3,value:g.text??``,onChange:e=>m({text:e.target.value})})]}),(0,L.jsx)(Un,{label:`Couleur`,value:g.color,onChange:e=>m({color:e})}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Taille`,value:g.fontSize,min:1,onChange:e=>m({fontSize:Math.max(1,e)})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Graisse`}),(0,L.jsx)(`select`,{value:g.fontWeight??400,onChange:e=>m({fontWeight:Number(e.target.value)}),children:zn.map(e=>(0,L.jsx)(`option`,{value:e,children:e},e))})]})]}),(0,L.jsxs)(`div`,{className:`field-row`,children:[(0,L.jsx)(Hn,{label:`Interligne (px)`,value:g.lineHeight??ve(g.fontSize??24),step:1,min:4,onChange:e=>m({lineHeight:Math.max(4,e)})}),(0,L.jsxs)(`label`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Style`}),(0,L.jsx)(`button`,{type:`button`,className:`toggle-button`,"data-active":g.fontStyle===`italic`||void 0,onClick:()=>m({fontStyle:g.fontStyle===`italic`?`normal`:`italic`}),children:`Italique`})]})]}),(0,L.jsxs)(`div`,{className:`field`,children:[(0,L.jsx)(`span`,{children:`Alignement`}),(0,L.jsx)(`div`,{className:`segmented`,children:Bn.map(e=>(0,L.jsx)(`button`,{type:`button`,title:e.label,"data-active":(g.textAlign??`left`)===e.value||void 0,onClick:()=>m({textAlign:e.value}),children:e.glyph},e.value))})]})]}),(0,L.jsxs)(`div`,{className:`inspector-actions`,children:[h===`group`?(0,L.jsx)(`button`,{type:`button`,onClick:u,title:`Dissoudre le groupe (Ctrl+Maj+G)`,children:`Dissoudre`}):(0,L.jsx)(`button`,{type:`button`,onClick:l,title:`Grouper la sélection (Ctrl+G)`,children:`Grouper`}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>c(`front`),title:`Mettre au premier plan`,children:`Devant`}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>c(`back`),title:`Mettre à l'arrière-plan`,children:`Derrière`}),(0,L.jsx)(`button`,{type:`button`,onClick:s,title:`Dupliquer (Ctrl+D)`,children:`Dupliquer`}),(0,L.jsx)(`button`,{type:`button`,className:`danger`,onClick:o,title:`Supprimer (Suppr)`,children:`Supprimer`})]})]})}function Gn(){let e=F(e=>e.design),t=F(e=>e.selectedIds),n=F(e=>e.expandedIds),r=F(e=>e.setSelection),i=F(e=>e.toggleSelection),a=F(e=>e.toggleExpanded),o=F(e=>e.reorderSelected),s=F(e=>e.groupSelected),c=F(e=>e.ungroupSelected);if(!e)return null;let l=b(e.nodes),u=e.nodes.some(e=>t.includes(e.id)&&e.type===`group`),d=new Map(e.nodes.map(e=>[e.id,e])),f=(e,o)=>[...l.get(e)??[]].reverse().flatMap(e=>{let s=e.type===`group`,c=n.includes(e.id),u=l.get(e.id)?.length??0,p=(0,L.jsx)(`li`,{children:(0,L.jsxs)(`div`,{className:`layer-row`,style:{paddingLeft:o*14},children:[s?(0,L.jsx)(`button`,{type:`button`,className:`layer-twisty`,"aria-label":c?`Replier le groupe`:`Déplier le groupe`,onClick:()=>a(e.id),children:c?`▾`:`▸`}):(0,L.jsx)(`span`,{className:`layer-twisty`}),(0,L.jsxs)(`button`,{type:`button`,className:`layer-item`,"data-active":t.includes(e.id)||void 0,"data-group":s||void 0,onClick:t=>t.shiftKey?i(e.id):r([e.id]),children:[(0,L.jsx)(`span`,{className:`layer-kind`,children:rt(e.type)}),(0,L.jsx)(`span`,{className:`layer-name`,children:e.name}),s&&(0,L.jsx)(`span`,{className:`layer-count`,children:u}),e.type===`instance`&&(0,L.jsxs)(`span`,{className:`layer-count`,title:`Instance liée à ce groupe`,children:[`◇ `,d.get(e.componentId??``)?.name??`?`]})]})]})},e.id);return s&&c?[p,...f(e.id,o+1)]:[p]});return(0,L.jsxs)(`section`,{className:`layers`,children:[(0,L.jsxs)(`div`,{className:`layers-header`,children:[(0,L.jsx)(`h2`,{children:`Calques`}),(0,L.jsxs)(`div`,{className:`layers-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Grouper la sélection (Ctrl+G)`,disabled:t.length===0,onClick:s,children:`⧉`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Dissoudre le groupe (Ctrl+Maj+G)`,disabled:!u,onClick:c,children:`⧅`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Monter d'un cran`,disabled:t.length===0,onClick:()=>o(`forward`),children:`↑`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Descendre d'un cran`,disabled:t.length===0,onClick:()=>o(`backward`),children:`↓`})]})]}),(0,L.jsx)(`ul`,{children:f(null,0)}),e.nodes.length===0&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Aucun élément sur cette planche.`})]})}var Kn={min:180,max:520};function qn({side:e,width:t,onResize:n,onCommit:r}){let i=(0,_.useRef)({x:0,width:0}),a=(0,_.useRef)(t),o=e=>Math.min(Kn.max,Math.max(Kn.min,Math.round(e))),s=(0,_.useCallback)(s=>{if(s.button!==0)return;let c=s.currentTarget;i.current={x:s.clientX,width:t},a.current=t,c.setPointerCapture(s.pointerId);let l=t=>{let r=t.clientX-i.current.x,s=o(i.current.width+(e===`left`?r:-r));a.current=s,n(s)},u=()=>{c.removeEventListener(`pointermove`,l),c.removeEventListener(`pointerup`,u),c.removeEventListener(`pointercancel`,u),r?.(a.current)};c.addEventListener(`pointermove`,l),c.addEventListener(`pointerup`,u),c.addEventListener(`pointercancel`,u),s.preventDefault()},[r,n,e,t]);return(0,L.jsx)(`div`,{className:`panel-resizer`,role:`separator`,"aria-orientation":`vertical`,"aria-label":e===`left`?`Redimensionner la liste des pages`:`Redimensionner le panneau de propriétés`,onPointerDown:s,onDoubleClick:()=>{let t=e===`left`?232:268;n(t),r?.(t)}})}var Jn={pending:`À traiter`,in_progress:`En cours`,done:`Traité`};function Yn(e){return new Date(e).toLocaleString(`fr-FR`,{dateStyle:`medium`,timeStyle:`short`})}function Xn(){let e=I(e=>e.rounds),t=I(e=>e.setRoundsOpen),n=I(e=>e.setRoundsProcessed),r=[...e].reverse(),i=e.find(e=>Ie(e).status!==`done`),[a,o]=(0,_.useState)(()=>(i??e.at(-1))?.number??null),s=e.find(e=>e.number===a)??null,c=e.filter(e=>Ie(e).status!==`done`).length;return(0,L.jsxs)(`div`,{className:`feedback-page`,children:[(0,L.jsxs)(`header`,{className:`feedback-page-head`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>t(!1),children:`← Revenir au canevas`}),(0,L.jsx)(`h1`,{children:`Retours`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e.length,` retour`,e.length>1?`s`:``,` · `,c,` à traiter ou en cours`]}),c>0&&(0,L.jsxs)(`button`,{type:`button`,className:`ghost-button feedback-page-all`,onClick:()=>{confirm(`Marquer comme traitées toutes les remarques des ${c} retour(s) en attente ?`)&&n(null,!0)},children:[(0,L.jsx)(R,{name:`check-check`,size:13}),`Tout marquer comme traité`]})]}),e.length===0?(0,L.jsx)(`p`,{className:`feedback-empty`,children:`Aucun retour pour l’instant. Passez en mode Remarques, commentez la planche, puis cliquez sur « Terminer les retours ».`}):(0,L.jsxs)(`div`,{className:`feedback-page-body`,children:[(0,L.jsx)(`ul`,{className:`round-list`,children:r.map(e=>(0,L.jsx)(`li`,{children:(0,L.jsx)(Qn,{round:e,active:e.number===a,onSelect:()=>o(e.number)})},e.number))}),s&&(0,L.jsx)($n,{round:s},s.number)]})]})}function Zn({round:e}){let t=Ie(e);return(0,L.jsxs)(`div`,{className:`round-progress`,children:[(0,L.jsx)(`span`,{className:`round-status`,"data-status":t.status,children:Jn[t.status]}),(0,L.jsx)(`span`,{className:`round-bar`,children:(0,L.jsx)(`span`,{style:{width:`${t.done/Math.max(1,t.total)*100}%`}})}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[t.done,`/`,t.total]})]})}function Qn({round:e,active:t,onSelect:n}){return(0,L.jsxs)(`button`,{type:`button`,className:`round-row`,"data-active":t||void 0,onClick:n,children:[(0,L.jsx)(`span`,{className:`round-row-title`,children:e.title}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[`n°`,e.number,` · `,Yn(e.submittedAt),` · `,e.remarks.length,` remarque`,e.remarks.length>1?`s`:``]}),(0,L.jsx)(Zn,{round:e})]})}function $n({round:e}){let t=I(e=>e.renameRound),n=I(e=>e.setRoundsProcessed),r=I(e=>e.setRoundsOpen),i=I(e=>e.setMode),a=F(e=>e.openDesign),o=F(e=>e.designs),[s,c]=(0,_.useState)(e.title),l=new Map;for(let t of e.remarks)l.set(t.designId,[...l.get(t.designId)??[],t]);let u=()=>{let n=s.trim();n===``?c(e.title):n!==e.title&&t(e.number,n)},d=async e=>{await a(e),await i(`remarks`),r(!1)};return(0,L.jsxs)(`section`,{className:`round-detail`,children:[(0,L.jsx)(`input`,{className:`round-title-input`,"aria-label":`Nom du retour`,value:s,maxLength:120,onChange:e=>c(e.target.value),onBlur:u,onKeyDown:t=>{t.key===`Enter`&&t.currentTarget.blur(),t.key===`Escape`&&(t.stopPropagation(),c(e.title))}}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`Retour n°`,e.number,` · transmis le `,Yn(e.submittedAt),` · `,e.remarks.length,` remarque`,e.remarks.length>1?`s`:``,` sur `,l.size,` page`,l.size>1?`s`:``]}),(0,L.jsxs)(`div`,{className:`round-detail-progress`,children:[(0,L.jsx)(Zn,{round:e}),Ie(e).status===`done`?(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>void n(e.number,!1),children:`Tout rouvrir`}):(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,onClick:()=>void n(e.number,!0),children:[(0,L.jsx)(R,{name:`check-check`,size:13}),`Tout marquer comme traité`]})]}),[...l].map(([t,n])=>{let r=o.some(e=>e.id===t);return(0,L.jsxs)(`div`,{className:`round-page`,children:[(0,L.jsxs)(`div`,{className:`round-page-head`,children:[(0,L.jsx)(`h2`,{children:n[0].designName}),r?(0,L.jsx)(`button`,{type:`button`,className:`link-button`,onClick:()=>void d(t),children:`Ouvrir la page`}):(0,L.jsx)(`span`,{className:`remark-hint`,children:`page supprimée`})]}),(0,L.jsx)(`ul`,{className:`round-remarks`,children:n.map(t=>(0,L.jsx)(tr,{round:e.number,remark:t},t.id))})]},t)})]})}function er(e){let t=e.target;if(t.kind===`page`)return`Page entière`;if(t.kind===`node`)return t.path.join(He);let n=t.elements.map(e=>e.name).join(`, `);return`Zone ${Math.round(t.box.width)} × ${Math.round(t.box.height)} px${n?` · ${n}`:``}`}function tr({round:e,remark:t}){let n=I(e=>e.setRemarkProcessed),r=t.processed;return(0,L.jsxs)(`li`,{className:`round-remark`,"data-processed":r!==null||void 0,children:[(0,L.jsx)(`label`,{className:`round-remark-check`,title:r?`Rouvrir cette remarque`:`Marquer comme traitée`,children:(0,L.jsx)(`input`,{type:`checkbox`,checked:r!==null,onChange:r=>void n(e,t.id,r.target.checked)})}),(0,L.jsxs)(`div`,{className:`round-remark-body`,children:[(0,L.jsxs)(`div`,{className:`round-remark-head`,children:[(0,L.jsx)(`span`,{className:`kind-pill`,"data-kind":t.target.kind,children:t.number===null?`Page`:`${t.number} · ${t.target.kind===`node`?`Élément`:`Zone`}`}),(0,L.jsx)(`span`,{className:`round-remark-target`,children:er(t)})]}),(0,L.jsx)(`p`,{className:`remark-text`,children:t.text}),(0,L.jsx)(`p`,{className:`round-remark-state`,children:r?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(R,{name:`circle-check`,size:13}),`Traitée par `,r.by===`agent`?`l’agent`:`vous`,` le `,Yn(r.at),r.note&&(0,L.jsxs)(`span`,{className:`round-remark-note`,children:[` — `,r.note]})]}):`À traiter`})]}),t.capture&&(0,L.jsx)(`a`,{className:`round-remark-capture`,href:N.captureUrl(t.capture),target:`_blank`,rel:`noreferrer`,children:(0,L.jsx)(`img`,{src:N.captureUrl(t.capture),alt:`Capture`})})]})}function nr(e){return e.target.kind===`page`?`Page`:`${e.number} · ${e.target.kind===`node`?`Élément`:`Zone`}`}function rr(e,t){if(e.target.kind===`node`)return`${t} · ${e.target.element.id}`;if(e.target.kind===`area`){let n=e.target.elements.length;return`${t} · ${n} élément${n>1?`s`:``}`}return t}function ir(){let e=F(e=>e.design),t=F(e=>e.designs),n=I(e=>e.remarks),r=I(e=>e.rounds),i=I(e=>e.file),a=I(e=>e.submit),o=I(e=>e.setFinishOpen),s=e?jt(n,e.id):[],[c,l]=(0,_.useState)(s.length>0?`page`:`all`),[u,d]=(0,_.useState)([]),[f,p]=(0,_.useState)(()=>Le(r.length+1)),[m,h]=(0,_.useState)(!1),[g,v]=(0,_.useState)(null),y=(0,_.useMemo)(()=>new Map(t.map(e=>[e.id,e.name])),[t]),b=jt(n),x=Ve(c===`page`?s:b),S=x.filter(e=>!u.includes(e.id)),C=new Set(b.map(e=>e.designId)).size,w=S.map(e=>({id:e.id,designId:e.designId,designName:y.get(e.designId)??e.designId,number:e.number,target:e.target,text:e.text,capture:e.capture,processed:null})),ee=Ke({number:r.length+1,title:f.trim()||Le(r.length+1),submittedAt:new Date().toISOString(),remarks:w}),T=()=>o(!1),te=async()=>{h(!0);let e=await a(S.map(e=>e.id),f);h(!1),e&&v(e)};return(0,L.jsx)(`div`,{className:`dialog-backdrop`,onPointerDown:T,children:(0,L.jsxs)(`div`,{className:`dialog`,role:`dialog`,"aria-modal":`true`,onPointerDown:e=>e.stopPropagation(),children:[(0,L.jsxs)(`div`,{className:`dialog-head`,children:[(0,L.jsx)(`h2`,{children:`Terminer les retours`}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Fermer`,onClick:T,children:(0,L.jsx)(R,{name:`x`,size:16})})]}),g?(0,L.jsxs)(`div`,{className:`dialog-done`,children:[(0,L.jsx)(R,{name:`circle-check`,size:28}),(0,L.jsxs)(`p`,{children:[(0,L.jsxs)(`strong`,{children:[`« `,g.title,` » enregistré`]}),` — retour n°`,g.number,`, `,g.remarks.length,` remarque`,g.remarks.length>1?`s`:``,`.`]}),(0,L.jsxs)(`p`,{className:`remark-hint`,children:[`Dites à l’agent que vous avez terminé : il lira ce retour avec l’outil `,(0,L.jsx)(`code`,{children:`get_feedback`}),`. Les remarques restent visibles, marquées transmises ; la page « Retours » suit leur traitement.`]}),(0,L.jsx)(`div`,{className:`dialog-foot`,children:(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,onClick:T,children:`Fermer`})})]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`p`,{className:`dialog-intro`,children:`Les remarques cochées sont réunies dans un retour que l’agent lira quand vous lui direz que vous avez terminé.`}),(0,L.jsxs)(`label`,{className:`round-title-field`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Nom du retour`}),(0,L.jsx)(`input`,{autoFocus:!0,value:f,maxLength:120,placeholder:Le(r.length+1),onChange:e=>p(e.target.value)})]}),(0,L.jsx)(`span`,{className:`section-label`,children:`Périmètre`}),(0,L.jsxs)(`div`,{className:`scope-choice`,children:[(0,L.jsxs)(`button`,{type:`button`,"data-active":c===`page`||void 0,disabled:!e,onClick:()=>l(`page`),children:[(0,L.jsx)(R,{name:c===`page`?`circle-dot`:`circle`,size:16}),(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`strong`,{children:`Cette page`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[e?.name,` · `,s.length,` remarque`,s.length>1?`s`:``]})]})]}),(0,L.jsxs)(`button`,{type:`button`,"data-active":c===`all`||void 0,onClick:()=>l(`all`),children:[(0,L.jsx)(R,{name:c===`all`?`circle-dot`:`circle`,size:16}),(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`strong`,{children:`Toutes les pages`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[C,` page`,C>1?`s`:``,` · `,b.length,` remarque`,b.length>1?`s`:``]})]})]})]}),(0,L.jsxs)(`div`,{className:`dialog-row-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Remarques à transmettre`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[S.length,` sur `,x.length,` sélectionnée`,S.length>1?`s`:``]})]}),(0,L.jsxs)(`ul`,{className:`finish-list`,children:[x.map(e=>{let t=!u.includes(e.id);return(0,L.jsx)(`li`,{children:(0,L.jsxs)(`label`,{"data-off":!t||void 0,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>d(n=>t?[...n,e.id]:n.filter(t=>t!==e.id))}),(0,L.jsx)(`span`,{className:`kind-pill`,"data-kind":e.target.kind,children:nr(e)}),(0,L.jsx)(`span`,{className:`finish-text`,children:e.text.split(`
|
|
15
|
+
`)[0]}),e.capture&&(0,L.jsx)(R,{name:`image`,size:13}),(0,L.jsx)(`span`,{className:`finish-where`,children:rr(e,y.get(e.designId)??e.designId)})]})},e.id)}),x.length===0&&(0,L.jsx)(`li`,{className:`empty-hint`,children:`Aucune remarque en attente sur cette page.`})]}),(0,L.jsxs)(`div`,{className:`dialog-row-head`,children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Ce que l’agent recevra`}),(0,L.jsx)(`span`,{className:`remark-hint finish-file`,title:i,children:i})]}),(0,L.jsx)(`pre`,{className:`finish-preview`,children:ee}),(0,L.jsxs)(`div`,{className:`dialog-foot`,children:[(0,L.jsxs)(`span`,{className:`remark-hint`,children:[(0,L.jsx)(R,{name:`info`,size:13}),` L’agent lit ce retour avec l’outil `,(0,L.jsx)(`code`,{children:`get_feedback`}),`.`]}),(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:T,children:`Retour`}),(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,disabled:S.length===0||f.trim()===``||m,onClick:()=>void te(),children:[(0,L.jsx)(R,{name:`save`}),m?`Enregistrement…`:`Enregistrer le retour`]})]})]})]})})}function ar(){let e=F(e=>e.design),t=I(e=>e.remarks),n=I(e=>e.showSent),r=I(e=>e.setShowSent),i=I(e=>e.composer),a=I(e=>e.openPageComposer),o=I(e=>e.setFinishOpen);if(!e)return null;let s=t.filter(t=>t.designId===e.id),c=s.filter(e=>n||e.status===`draft`),l=c.filter(e=>e.target.kind===`page`),u=c.filter(e=>e.target.kind!==`page`).sort((e,t)=>(e.number??0)-(t.number??0)),d=jt(t,e.id).length,f=jt(t).length,p=s.length-d,m=s.some(e=>e.status===`draft`&&e.target.kind===`page`);return(0,L.jsxs)(`section`,{className:`remarks-panel`,children:[(0,L.jsxs)(`div`,{className:`remarks-header`,children:[(0,L.jsx)(`h2`,{children:`Remarques`}),(0,L.jsxs)(`span`,{className:`remark-hint`,children:[d,` non transmise`,d>1?`s`:``]})]}),(0,L.jsxs)(`div`,{className:`remarks-body`,children:[i?.kind===`page`?(0,L.jsx)(or,{}):!m&&(0,L.jsxs)(`button`,{type:`button`,className:`remark-add-page`,onClick:a,children:[(0,L.jsx)(R,{name:`file-plus`}),`Remarque sur toute la page`]}),p>0&&(0,L.jsxs)(`label`,{className:`remark-check`,children:[(0,L.jsx)(`input`,{type:`checkbox`,checked:n,onChange:e=>r(e.target.checked)}),`Afficher les remarques transmises (`,p,`)`]}),l.length>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Page`}),l.map(e=>(0,L.jsx)(cr,{remark:e},e.id))]}),u.length>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`section-label`,children:`Éléments et zones`}),u.map(e=>(0,L.jsx)(cr,{remark:e},e.id))]}),c.length===0&&i?.kind!==`page`&&(0,L.jsx)(`p`,{className:`empty-hint`,children:`Cliquez sur un élément de la planche pour le commenter, ou glissez pour entourer une zone.`})]}),(0,L.jsxs)(`div`,{className:`remarks-footer`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`primary-button`,disabled:f===0,onClick:()=>o(!0),children:[(0,L.jsx)(R,{name:`send`}),`Terminer les retours (`,f,`)`]}),(0,L.jsx)(`span`,{className:`remark-hint`,children:`Les remarques sont enregistrées au fil de l’eau.`})]})]})}function or(){let e=I(e=>e.composer),t=I(e=>e.saving),n=I(e=>e.setComposerText),r=I(e=>e.closeComposer),i=I(e=>e.saveComposer);return e?.kind===`page`?(0,L.jsxs)(`div`,{className:`remark-card`,"data-editing":!0,children:[(0,L.jsx)(`div`,{className:`remark-card-head`,children:(0,L.jsxs)(`span`,{className:`remark-chip`,children:[(0,L.jsx)(R,{name:`file-text`,size:12}),`Page entière`]})}),(0,L.jsx)(`textarea`,{autoFocus:!0,className:`remark-textarea`,rows:3,placeholder:`Une remarque générale sur cette page…`,value:e.text,onChange:e=>n(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&r(),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&i()}}),(0,L.jsxs)(`div`,{className:`remark-card-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:r,children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:e.text.trim()===``||t,onClick:()=>void i(),children:`Enregistrer`})]})]}):null}function sr(e,t){let n=e.target;return n.kind===`page`?`Page entière`:n.kind===`node`?`${n.path.join(He)}${t?` · élément supprimé`:``}`:`Zone · ${Math.round(n.box.width)} × ${Math.round(n.box.height)} px`}function cr({remark:e}){let t=F(e=>e.design),n=I(e=>e.hoveredId),r=I(e=>e.focusedId),i=I(e=>e.setHovered),a=I(e=>e.setFocused),o=I(e=>e.updateText),s=I(e=>e.remove),c=I(t=>t.rounds.find(t=>t.number===e.round)),[l,u]=(0,_.useState)(null),d=(0,_.useRef)(null),f=e.id===r;(0,_.useEffect)(()=>{f&&d.current?.scrollIntoView({block:`nearest`,behavior:`smooth`})},[f]);let p=e.target,m=p.kind===`node`&&!t?.nodes.some(e=>e.id===p.element.id),h=e.status===`sent`,g=c?.remarks.find(t=>t.id===e.id)?.processed??null,v=async()=>{l!==null&&l.trim()!==``&&await o(e.id,l)&&u(null)};return(0,L.jsxs)(`div`,{ref:d,className:`remark-card`,"data-status":e.status,"data-highlighted":e.id===n||f||void 0,onMouseEnter:()=>i(e.id),onMouseLeave:()=>i(null),onClick:()=>a(e.id),children:[(0,L.jsxs)(`div`,{className:`remark-card-head`,children:[e.number===null?(0,L.jsxs)(`span`,{className:`remark-chip`,children:[(0,L.jsx)(R,{name:`file-text`,size:12}),`Page entière`]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`remark-number`,"data-status":e.status,children:e.number}),(0,L.jsxs)(`span`,{className:`remark-target`,title:sr(e,m),children:[(0,L.jsx)(R,{name:p.kind===`node`?`mouse-pointer-click`:`square-dashed-mouse-pointer`,size:12}),(0,L.jsx)(`span`,{children:sr(e,m)})]})]}),!h&&l===null&&(0,L.jsxs)(`span`,{className:`remark-card-tools`,children:[(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Modifier`,onClick:t=>{t.stopPropagation(),u(e.text)},children:(0,L.jsx)(R,{name:`pencil`})}),(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Supprimer`,onClick:t=>{t.stopPropagation(),confirm(`Supprimer cette remarque ?`)&&s(e.id)},children:(0,L.jsx)(R,{name:`trash-2`})})]}),h&&(0,L.jsx)(`span`,{className:`remark-card-tools`,children:(0,L.jsx)(`button`,{type:`button`,className:`icon-button`,title:`Retirer de la liste (le retour transmis reste inchangé)`,onClick:t=>{t.stopPropagation(),confirm(`Retirer cette remarque de la liste ? Le retour déjà transmis à l’agent ne change pas.`)&&s(e.id)},children:(0,L.jsx)(R,{name:`trash-2`})})})]}),h&&(0,L.jsxs)(`span`,{className:`remark-status`,"data-processed":g!==null||void 0,children:[g?`Traitée`:`Transmise`,` · `,c?.title]}),p.kind===`area`&&(0,L.jsxs)(`div`,{className:`remark-area-info`,children:[e.capture&&(0,L.jsx)(`img`,{src:N.captureUrl(e.capture),alt:`Capture de la zone`}),(0,L.jsx)(`span`,{className:`remark-hint`,children:p.elements.length===0?`Aucun élément cité`:`${p.elements.length} élément${p.elements.length>1?`s`:``} : ${p.elements.map(e=>e.name).join(`, `)}`})]}),l===null?(0,L.jsx)(`p`,{className:`remark-text`,children:e.text}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`textarea`,{autoFocus:!0,className:`remark-textarea`,rows:3,value:l,onClick:e=>e.stopPropagation(),onChange:e=>u(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key===`Escape`&&u(null),e.key===`Enter`&&(e.ctrlKey||e.metaKey)&&v()}}),(0,L.jsxs)(`div`,{className:`remark-card-actions`,children:[(0,L.jsx)(`button`,{type:`button`,className:`ghost-button`,onClick:()=>u(null),children:`Annuler`}),(0,L.jsx)(`button`,{type:`button`,className:`primary-button`,disabled:l.trim()===``,onClick:()=>void v(),children:`Enregistrer`})]})]})]})}var lr=[.25,.5,.75,1,1.5,2,3];function ur({leftVisible:e,rightVisible:t,onToggleLeft:n,onToggleRight:r}){let i=F(e=>e.zoom),a=F(e=>e.setZoom),o=F(e=>e.undo),s=F(e=>e.redo),c=F(e=>e.past.length>0),l=F(e=>e.future.length>0),u=F(e=>e.saveState),d=F(e=>e.design),f=I(e=>e.mode),p=I(e=>e.setMode),m=I(e=>d?jt(e.remarks,d.id).length:0),h=f===`remarks`,g=I(e=>e.rounds.filter(e=>Ie(e).status!==`done`).length),_=I(e=>e.setRoundsOpen),v={idle:`À jour`,saving:`Enregistrement…`,saved:`Enregistré`,error:`Échec de la sauvegarde`}[u];return(0,L.jsxs)(`header`,{className:`toolbar`,children:[(0,L.jsxs)(`div`,{className:`tool-row`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e||void 0,onClick:n,title:e?`Masquer la liste des pages`:`Afficher la liste des pages`,"aria-label":e?`Masquer la liste des pages`:`Afficher la liste des pages`,"aria-pressed":e,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`◧`})}),(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":t||void 0,onClick:r,title:t?`Masquer le panneau de propriétés`:`Afficher le panneau de propriétés`,"aria-label":t?`Masquer le panneau de propriétés`:`Afficher le panneau de propriétés`,"aria-pressed":t,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`◨`})})]}),(0,L.jsxs)(`div`,{className:`tool-row`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,onClick:o,disabled:!c||h,title:`Annuler (Ctrl+Z)`,"aria-label":`Annuler (Ctrl+Z)`,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`↶`})}),(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,onClick:s,disabled:!l||h,title:`Rétablir (Ctrl+Y)`,"aria-label":`Rétablir (Ctrl+Y)`,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:`↷`})})]}),(0,L.jsxs)(`label`,{className:`zoom-control`,children:[`Zoom`,(0,L.jsxs)(`select`,{value:lr.includes(i)?i:``,onChange:e=>a(Number(e.target.value)),children:[!lr.includes(i)&&(0,L.jsxs)(`option`,{value:``,children:[Math.round(i*100),` %`]}),lr.map(e=>(0,L.jsxs)(`option`,{value:e,children:[Math.round(e*100),` %`]},e))]})]}),(0,L.jsxs)(`div`,{className:`mode-switch`,role:`group`,"aria-label":`Mode du canvas`,children:[(0,L.jsxs)(`button`,{type:`button`,"data-active":!h||void 0,disabled:!d,onClick:()=>void p(`edit`),title:`Éditer le design (M)`,children:[(0,L.jsx)(R,{name:`pen-tool`}),`Édition`]}),(0,L.jsxs)(`button`,{type:`button`,"data-active":h||void 0,"data-mode":`remarks`,disabled:!d,onClick:()=>void p(`remarks`),title:`Rédiger des remarques pour l'agent (M)`,children:[(0,L.jsx)(R,{name:`message-square`}),`Remarques`,m>0&&(0,L.jsx)(`span`,{className:`mode-count`,children:m})]})]}),(0,L.jsxs)(`button`,{type:`button`,className:`rounds-button`,onClick:()=>_(!0),title:`Retours transmis à l'agent et leur traitement`,children:[(0,L.jsx)(R,{name:`list-checks`}),`Retours`,g>0&&(0,L.jsx)(`span`,{className:`rounds-count`,children:g})]}),(0,L.jsxs)(`div`,{className:`toolbar-status`,children:[d&&(0,L.jsx)(`span`,{className:`status-name`,children:d.name}),(0,L.jsx)(`span`,{className:`status-chip`,"data-state":u,children:v})]})]})}function dr(e,t=!0){let[n,r]=(0,_.useState)(()=>{try{let n=localStorage.getItem(e);return n===null?t:n===`1`}catch{return t}});return[n,(0,_.useCallback)(()=>{r(t=>{let n=!t;try{localStorage.setItem(e,n?`1`:`0`)}catch{}return n})},[e])]}var fr=[{id:`select`,label:`Sélection`,shortcut:`V`,glyph:`↖`},{id:`rect`,label:`Rectangle`,shortcut:`R`,glyph:`▭`},{id:`ellipse`,label:`Ellipse`,shortcut:`O`,glyph:`◯`},{id:`line`,label:`Ligne`,shortcut:`L`,glyph:`╱`},{id:`text`,label:`Texte`,shortcut:`T`,glyph:`T`}],pr={id:`icon`,label:`Icône`,shortcut:`I`,glyph:`☆`};function mr(){let e=F(e=>e.tool),t=F(e=>e.setTool),n=F(e=>e.pendingIcon),r=F(e=>e.setPendingIcon),[i,a]=dr(`mcp-design.tool-palette-expanded`,!1),[o,s]=(0,_.useState)(!1),c=e===pr.id?pr:fr.find(t=>t.id===e)??fr[0];return i?(0,L.jsxs)(`div`,{className:`tool-palette`,children:[(0,L.jsxs)(`div`,{className:`tool-grid`,children:[fr.map(n=>(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e===n.id||void 0,title:`${n.label} (${n.shortcut})`,"aria-label":`${n.label} (${n.shortcut})`,"aria-pressed":e===n.id,onClick:()=>t(n.id),children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:n.glyph})},n.id)),(0,L.jsxs)(`div`,{className:`tool-popover-anchor`,children:[(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,"data-active":e===pr.id||void 0,title:`Icône — ${n} (I)`,"aria-label":`Icône — ${n} (I)`,"aria-pressed":e===pr.id,onClick:()=>s(e=>!e),children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:pr.glyph})}),o&&(0,L.jsx)(Rn,{current:n,onPick:e=>{r(e),s(!1)},onClose:()=>s(!1)})]})]}),(0,L.jsx)(`button`,{type:`button`,className:`tool-palette-collapse`,title:`Replier les outils`,"aria-label":`Replier les outils`,"aria-expanded":!0,onClick:()=>{s(!1),a()},children:`⌄`})]}):(0,L.jsx)(`div`,{className:`tool-palette`,"data-collapsed":!0,children:(0,L.jsx)(`button`,{type:`button`,className:`tool-button`,title:`Outils — actif : ${c.label} (${c.shortcut})`,"aria-label":`Afficher les outils — actif : ${c.label} (${c.shortcut})`,"aria-expanded":!1,onClick:a,children:(0,L.jsx)(`span`,{className:`tool-glyph`,children:c.glyph})})})}function hr(e,t){let[n,r]=(0,_.useState)(()=>{try{let n=Number(localStorage.getItem(e));return Number.isFinite(n)&&n>0?n:t}catch{return t}});return[n,r,(0,_.useCallback)(t=>{try{localStorage.setItem(e,String(t))}catch{}},[e])]}var gr={v:`select`,r:`rect`,o:`ellipse`,l:`line`,t:`text`,i:`icon`};function _r(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.tagName===`SELECT`||e.isContentEditable:!1}function vr(){(0,_.useEffect)(()=>{let e=e=>{if(_r(e.target))return;if(e.code===`Space`&&!e.repeat){e.preventDefault(),F.getState().setPanMode(!0);return}if(e.code===`Space`){e.preventDefault();return}let t=I.getState();if(t.roundsOpen){e.key===`Escape`&&t.setRoundsOpen(!1);return}let n=F.getState();if(!n.design)return;let r=e.ctrlKey||e.metaKey;if(!r&&!e.altKey&&e.key.toLowerCase()===`m`){t.setMode(t.mode===`remarks`?`edit`:`remarks`);return}if(t.mode===`remarks`){if(e.key!==`Escape`)return;t.finishOpen?t.setFinishOpen(!1):t.composer?t.closeComposer():t.setMode(`edit`);return}if(r&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?n.redo():n.undo();return}if(r&&e.key.toLowerCase()===`y`){e.preventDefault(),n.redo();return}if(r&&e.key.toLowerCase()===`g`){e.preventDefault(),e.shiftKey?n.ungroupSelected():n.groupSelected();return}if(r&&e.key.toLowerCase()===`d`){e.preventDefault(),n.duplicateSelected();return}if(r&&e.key.toLowerCase()===`a`){e.preventDefault(),n.setSelection(n.design.nodes.map(e=>e.id));return}if(r)return;if(e.key===`Delete`||e.key===`Backspace`){e.preventDefault(),n.deleteSelected();return}if(e.key===`Escape`){n.setSelection([]),n.setTool(`select`);return}if(e.key.startsWith(`Arrow`)&&n.selectedIds.length>0){e.preventDefault();let t=e.shiftKey?10:1,r=e.key===`ArrowRight`?t:e.key===`ArrowLeft`?-t:0,i=e.key===`ArrowDown`?t:e.key===`ArrowUp`?-t:0,a=n.design.nodes.filter(e=>n.selectedIds.includes(e.id));n.moveSelection(r,i,a);return}let i=gr[e.key.toLowerCase()];i&&n.setTool(i)},t=e=>{e.code===`Space`&&F.getState().setPanMode(!1)},n=()=>F.getState().setPanMode(!1);return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,t),window.addEventListener(`blur`,n),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t),window.removeEventListener(`blur`,n)}},[])}var yr=`[mcp-design]`,br=3e3;function xr(){let e=F.getState();e.refreshDesigns(),I.getState().refresh(),e.design&&e.reloadCurrent(e.design.id)}function Sr(e){let t=F.getState();e.type===`DESIGNS_UPDATED`?t.refreshDesigns():e.type===`DESIGN_UPDATED`?(t.refreshDesigns(),e.data?.designId&&t.reloadCurrent(e.data.designId)):e.type===`REMARKS_UPDATED`&&I.getState().refresh()}function Cr(){(0,_.useEffect)(()=>{let e=null,t=null,n=!1;async function r(){try{let t=e?`?since=${e.seq}&epoch=${encodeURIComponent(e.epoch)}`:``,r=await fetch(`api/changes${t}`);if(!r.ok)throw Error(`HTTP ${r.status} ${await r.text()}`);let i=await r.json();if(n)return;i.reset?xr():i.events.forEach(Sr),e={epoch:i.epoch,seq:i.seq}}catch(e){console.error(`${yr} Polling api/changes failed: ${e.message}`)}n||(t=setTimeout(()=>void r(),br))}return r(),()=>{n=!0,t&&clearTimeout(t)}},[])}function wr(){Cr(),vr();let e=F(e=>e.design),t=F(e=>e.designs),n=F(e=>e.loading),r=F(e=>e.error),i=F(e=>e.openDesign),a=F(e=>e.setError),o=F(e=>e.flushSave),s=I(e=>e.mode===`remarks`),c=I(e=>e.finishOpen),l=I(e=>e.roundsOpen),u=I(e=>e.composer!==null),[d,f,p]=hr(`mcp-design.sidebar-width`,280),[m,h,g]=hr(`mcp-design.rail-width`,268),[v,y]=dr(`mcp-design.sidebar-visible`),[b,x]=dr(`mcp-design.rail-visible`);(0,_.useEffect)(()=>{if(e||t.length===0||n)return;let r=vt(),a=t.find(e=>e.id===r)??on(rn(t));a&&i(a.id)},[e,t,n,i]),(0,_.useEffect)(()=>{let e=()=>void o();return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[o]);let S=[v?`${d}px`:null,v?`5px`:null,`minmax(0, 1fr)`,b?`5px`:null,b?`${m}px`:null].filter(Boolean).join(` `);return(0,L.jsxs)(`div`,{className:`app`,style:{gridTemplateColumns:S},children:[v&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(En,{}),(0,L.jsx)(qn,{side:`left`,width:d,onResize:f,onCommit:p})]}),(0,L.jsxs)(`main`,{className:`workspace`,children:[(0,L.jsx)(ur,{leftVisible:v,rightVisible:b,onToggleLeft:y,onToggleRight:x}),e?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Qt,{}),!s&&(0,L.jsx)(mr,{}),s&&!u&&(0,L.jsx)(`div`,{className:`remark-help`,children:`Clic : remarque sur un élément · Glisser : remarque sur une zone · Alt + clic : élément exact · Échap : quitter`})]}):(0,L.jsx)(`div`,{className:`workspace-empty`,children:(0,L.jsx)(`p`,{children:`Sélectionnez un design à gauche, ou créez-en un nouveau.`})})]}),b&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(qn,{side:`right`,width:m,onResize:h,onCommit:g}),(0,L.jsx)(`div`,{className:`right-rail`,children:s?(0,L.jsx)(ar,{}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Wn,{}),(0,L.jsx)(Gn,{})]})})]}),l&&(0,L.jsx)(Xn,{}),c&&(0,L.jsx)(ir,{}),r&&(0,L.jsxs)(`div`,{className:`error-toast`,role:`alert`,children:[(0,L.jsx)(`span`,{children:r}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>a(null),children:`✕`})]})]})}(0,v.createRoot)(document.getElementById(`root`)).render((0,L.jsx)(_.StrictMode,{children:(0,L.jsx)(wr,{})}));export{A as t};
|