@tuongaz/seeflow 0.1.25 → 0.1.26

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.
@@ -7835,4 +7835,4 @@ For more information, see https://radix-ui.com/primitives/docs/components/${t.do
7835
7835
  `))}function c(p,y,k,w){const v=k.enter("tableCell"),M=k.enter("phrasing"),x=k.containerPhrasing(p,{...w,before:a,after:a});return M(),v(),x}function l(p,y){return bTe(p,{align:y,alignDelimiters:r,padding:n,stringLength:o})}function u(p,y,k){const w=p.children;let v=-1;const M=[],x=y.enter("table");for(;++v<w.length;)M[v]=d(w[v],y,k);return x(),M}function d(p,y,k){const w=p.children;let v=-1;const M=[],x=y.enter("tableRow");for(;++v<w.length;)M[v]=c(w[v],p,y,k);return x(),M}function f(p,y,k){let w=O1e.inlineCode(p,y,k);return k.stack.includes("tableCell")&&(w=w.replace(/\|/g,"\\$&")),w}}function uje(){return{exit:{taskListCheckValueChecked:Ree,taskListCheckValueUnchecked:Ree,paragraph:hje}}}function dje(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:fje}}}function Ree(e){const t=this.stack[this.stack.length-2];t.type,t.checked=e.type==="taskListCheckValueChecked"}function hje(e){const t=this.stack[this.stack.length-2];if(t&&t.type==="listItem"&&typeof t.checked=="boolean"){const n=this.stack[this.stack.length-1];n.type;const r=n.children[0];if(r&&r.type==="text"){const o=t.children;let a=-1,i;for(;++a<o.length;){const s=o[a];if(s.type==="paragraph"){i=s;break}}i===n&&(r.value=r.value.slice(1),r.value.length===0?n.children.shift():n.position&&r.position&&typeof r.position.start.offset=="number"&&(r.position.start.column++,r.position.start.offset++,n.position.start=Object.assign({},r.position.start)))}}this.exit(e)}function fje(e,t,n,r){const o=e.children[0],a=typeof e.checked=="boolean"&&o&&o.type==="paragraph",i="["+(e.checked?"x":" ")+"] ",s=n.createTracker(r);a&&s.move(i);let c=O1e.listItem(e,t,n,{...r,...s.current()});return a&&(c=c.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,l)),c;function l(u){return u+i}}function pje(){return[WRe(),fTe(),gTe(),rje(),uje()]}function yje(e){return{extensions:[GRe(),pTe(e),kTe(),lje(e),dje()]}}const mje={tokenize:Mje,partial:!0},F1e={tokenize:bje,partial:!0},H1e={tokenize:Cje,partial:!0},B1e={tokenize:Sje,partial:!0},gje={tokenize:Lje,partial:!0},V1e={name:"wwwAutolink",tokenize:xje,previous:U1e},$1e={name:"protocolAutolink",tokenize:wje,previous:W1e},ua={name:"emailAutolink",tokenize:vje,previous:G1e},Ao={};function kje(){return{text:Ao}}let _i=48;for(;_i<123;)Ao[_i]=ua,_i++,_i===58?_i=65:_i===91&&(_i=97);Ao[43]=ua;Ao[45]=ua;Ao[46]=ua;Ao[95]=ua;Ao[72]=[ua,$1e];Ao[104]=[ua,$1e];Ao[87]=[ua,V1e];Ao[119]=[ua,V1e];function vje(e,t,n){const r=this;let o,a;return i;function i(d){return!yB(d)||!G1e.call(r,r.previous)||tU(r.events)?n(d):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),s(d))}function s(d){return yB(d)?(e.consume(d),s):d===64?(e.consume(d),c):n(d)}function c(d){return d===46?e.check(gje,u,l)(d):d===45||d===95||an(d)?(a=!0,e.consume(d),c):u(d)}function l(d){return e.consume(d),o=!0,c}function u(d){return a&&o&&fn(r.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),t(d)):n(d)}}function xje(e,t,n){const r=this;return o;function o(i){return i!==87&&i!==119||!U1e.call(r,r.previous)||tU(r.events)?n(i):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(mje,e.attempt(F1e,e.attempt(H1e,a),n),n)(i))}function a(i){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),t(i)}}function wje(e,t,n){const r=this;let o="",a=!1;return i;function i(d){return(d===72||d===104)&&W1e.call(r,r.previous)&&!tU(r.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),o+=String.fromCodePoint(d),e.consume(d),s):n(d)}function s(d){if(fn(d)&&o.length<5)return o+=String.fromCodePoint(d),e.consume(d),s;if(d===58){const f=o.toLowerCase();if(f==="http"||f==="https")return e.consume(d),c}return n(d)}function c(d){return d===47?(e.consume(d),a?l:(a=!0,c)):n(d)}function l(d){return d===null||yR(d)||ft(d)||Pu(d)||$T(d)?n(d):e.attempt(F1e,e.attempt(H1e,u),n)(d)}function u(d){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),t(d)}}function Mje(e,t,n){let r=0;return o;function o(i){return(i===87||i===119)&&r<3?(r++,e.consume(i),o):i===46&&r===3?(e.consume(i),a):n(i)}function a(i){return i===null?n(i):t(i)}}function bje(e,t,n){let r,o,a;return i;function i(l){return l===46||l===95?e.check(B1e,c,s)(l):l===null||ft(l)||Pu(l)||l!==45&&$T(l)?c(l):(a=!0,e.consume(l),i)}function s(l){return l===95?r=!0:(o=r,r=void 0),e.consume(l),i}function c(l){return o||r||!a?n(l):t(l)}}function Cje(e,t){let n=0,r=0;return o;function o(i){return i===40?(n++,e.consume(i),o):i===41&&r<n?a(i):i===33||i===34||i===38||i===39||i===41||i===42||i===44||i===46||i===58||i===59||i===60||i===63||i===93||i===95||i===126?e.check(B1e,t,a)(i):i===null||ft(i)||Pu(i)?t(i):(e.consume(i),o)}function a(i){return i===41&&r++,e.consume(i),o}}function Sje(e,t,n){return r;function r(s){return s===33||s===34||s===39||s===41||s===42||s===44||s===46||s===58||s===59||s===63||s===95||s===126?(e.consume(s),r):s===38?(e.consume(s),a):s===93?(e.consume(s),o):s===60||s===null||ft(s)||Pu(s)?t(s):n(s)}function o(s){return s===null||s===40||s===91||ft(s)||Pu(s)?t(s):r(s)}function a(s){return fn(s)?i(s):n(s)}function i(s){return s===59?(e.consume(s),r):fn(s)?(e.consume(s),i):n(s)}}function Lje(e,t,n){return r;function r(a){return e.consume(a),o}function o(a){return an(a)?n(a):t(a)}}function U1e(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||ft(e)}function W1e(e){return!fn(e)}function G1e(e){return!(e===47||yB(e))}function yB(e){return e===43||e===45||e===46||e===95||an(e)}function tU(e){let t=e.length,n=!1;for(;t--;){const r=e[t][1];if((r.type==="labelLink"||r.type==="labelImage")&&!r._balanced){n=!0;break}if(r._gfmAutolinkLiteralWalkedInto){n=!1;break}}return e.length>0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}const Ije={tokenize:Nje,partial:!0};function Eje(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:Rje,continuation:{tokenize:Tje},exit:jje}},text:{91:{name:"gfmFootnoteCall",tokenize:_je},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:Aje,resolveTo:Pje}}}}function Aje(e,t,n){const r=this;let o=r.events.length;const a=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i;for(;o--;){const c=r.events[o][1];if(c.type==="labelImage"){i=c;break}if(c.type==="gfmFootnoteCall"||c.type==="labelLink"||c.type==="label"||c.type==="image"||c.type==="link")break}return s;function s(c){if(!i||!i._balanced)return n(c);const l=Hr(r.sliceSerialize({start:i.end,end:r.now()}));return l.codePointAt(0)!==94||!a.includes(l.slice(1))?n(c):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(c),e.exit("gfmFootnoteCallLabelMarker"),t(c))}}function Pje(e,t){let n=e.length;for(;n--;)if(e[n][1].type==="labelImage"&&e[n][0]==="enter"){e[n][1];break}e[n+1][1].type="data",e[n+3][1].type="gfmFootnoteCallLabelMarker";const r={type:"gfmFootnoteCall",start:Object.assign({},e[n+3][1].start),end:Object.assign({},e[e.length-1][1].end)},o={type:"gfmFootnoteCallMarker",start:Object.assign({},e[n+3][1].end),end:Object.assign({},e[n+3][1].end)};o.end.column++,o.end.offset++,o.end._bufferIndex++;const a={type:"gfmFootnoteCallString",start:Object.assign({},o.end),end:Object.assign({},e[e.length-1][1].start)},i={type:"chunkString",contentType:"string",start:Object.assign({},a.start),end:Object.assign({},a.end)},s=[e[n+1],e[n+2],["enter",r,t],e[n+3],e[n+4],["enter",o,t],["exit",o,t],["enter",a,t],["enter",i,t],["exit",i,t],["exit",a,t],e[e.length-2],e[e.length-1],["exit",r,t]];return e.splice(n,e.length-n+1,...s),e}function _je(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a=0,i;return s;function s(d){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),c}function c(d){return d!==94?n(d):(e.enter("gfmFootnoteCallMarker"),e.consume(d),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",l)}function l(d){if(a>999||d===93&&!i||d===null||d===91||ft(d))return n(d);if(d===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return o.includes(Hr(r.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(d)}return ft(d)||(i=!0),a++,e.consume(d),d===92?u:l}function u(d){return d===91||d===92||d===93?(e.consume(d),a++,l):l(d)}}function Rje(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let a,i=0,s;return c;function c(y){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionLabelMarker"),l}function l(y){return y===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",u):n(y)}function u(y){if(i>999||y===93&&!s||y===null||y===91||ft(y))return n(y);if(y===93){e.exit("chunkString");const k=e.exit("gfmFootnoteDefinitionLabelString");return a=Hr(r.sliceSerialize(k)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(y),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return ft(y)||(s=!0),i++,e.consume(y),y===92?d:u}function d(y){return y===91||y===92||y===93?(e.consume(y),i++,u):u(y)}function f(y){return y===58?(e.enter("definitionMarker"),e.consume(y),e.exit("definitionMarker"),o.includes(a)||o.push(a),et(e,p,"gfmFootnoteDefinitionWhitespace")):n(y)}function p(y){return t(y)}}function Tje(e,t,n){return e.check(Df,t,e.attempt(Ije,t,n))}function jje(e){e.exit("gfmFootnoteDefinition")}function Nje(e,t,n){const r=this;return et(e,o,"gfmFootnoteDefinitionIndent",5);function o(a){const i=r.events[r.events.length-1];return i&&i[1].type==="gfmFootnoteDefinitionIndent"&&i[2].sliceSerialize(i[1],!0).length===4?t(a):n(a)}}function zje(e){let n=(e||{}).singleTilde;const r={name:"strikethrough",tokenize:a,resolveAll:o};return n==null&&(n=!0),{text:{126:r},insideSpan:{null:[r]},attentionMarkers:{null:[126]}};function o(i,s){let c=-1;for(;++c<i.length;)if(i[c][0]==="enter"&&i[c][1].type==="strikethroughSequenceTemporary"&&i[c][1]._close){let l=c;for(;l--;)if(i[l][0]==="exit"&&i[l][1].type==="strikethroughSequenceTemporary"&&i[l][1]._open&&i[c][1].end.offset-i[c][1].start.offset===i[l][1].end.offset-i[l][1].start.offset){i[c][1].type="strikethroughSequence",i[l][1].type="strikethroughSequence";const u={type:"strikethrough",start:Object.assign({},i[l][1].start),end:Object.assign({},i[c][1].end)},d={type:"strikethroughText",start:Object.assign({},i[l][1].end),end:Object.assign({},i[c][1].start)},f=[["enter",u,s],["enter",i[l][1],s],["exit",i[l][1],s],["enter",d,s]],p=s.parser.constructs.insideSpan.null;p&&tr(f,f.length,0,UT(p,i.slice(l+1,c),s)),tr(f,f.length,0,[["exit",d,s],["enter",i[c][1],s],["exit",i[c][1],s],["exit",u,s]]),tr(i,l-1,c-l+3,f),c=l+f.length-2;break}}for(c=-1;++c<i.length;)i[c][1].type==="strikethroughSequenceTemporary"&&(i[c][1].type="data");return i}function a(i,s,c){const l=this.previous,u=this.events;let d=0;return f;function f(y){return l===126&&u[u.length-1][1].type!=="characterEscape"?c(y):(i.enter("strikethroughSequenceTemporary"),p(y))}function p(y){const k=yd(l);if(y===126)return d>1?c(y):(i.consume(y),d++,p);if(d<2&&!n)return c(y);const w=i.exit("strikethroughSequenceTemporary"),v=yd(y);return w._open=!v||v===2&&!!k,w._close=!k||k===2&&!!v,s(y)}}}class Dje{constructor(){this.map=[]}add(t,n,r){qje(this,t,n,r)}consume(t){if(this.map.sort(function(a,i){return a[0]-i[0]}),this.map.length===0)return;let n=this.map.length;const r=[];for(;n>0;)n-=1,r.push(t.slice(this.map[n][0]+this.map[n][1]),this.map[n][2]),t.length=this.map[n][0];r.push(t.slice()),t.length=0;let o=r.pop();for(;o;){for(const a of o)t.push(a);o=r.pop()}this.map.length=0}}function qje(e,t,n,r){let o=0;if(!(n===0&&r.length===0)){for(;o<e.map.length;){if(e.map[o][0]===t){e.map[o][1]+=n,e.map[o][2].push(...r);return}o+=1}e.map.push([t,n,r])}}function Oje(e,t){let n=!1;const r=[];for(;t<e.length;){const o=e[t];if(n){if(o[0]==="enter")o[1].type==="tableContent"&&r.push(e[t+1][1].type==="tableDelimiterMarker"?"left":"none");else if(o[1].type==="tableContent"){if(e[t-1][1].type==="tableDelimiterMarker"){const a=r.length-1;r[a]=r[a]==="left"?"center":"right"}}else if(o[1].type==="tableDelimiterRow")break}else o[0]==="enter"&&o[1].type==="tableDelimiterRow"&&(n=!0);t+=1}return r}function Fje(){return{flow:{null:{name:"table",tokenize:Hje,resolveAll:Bje}}}}function Hje(e,t,n){const r=this;let o=0,a=0,i;return s;function s(_){let A=r.events.length-1;for(;A>-1;){const j=r.events[A][1].type;if(j==="lineEnding"||j==="linePrefix")A--;else break}const I=A>-1?r.events[A][1].type:null,V=I==="tableHead"||I==="tableRow"?C:c;return V===C&&r.parser.lazy[r.now().line]?n(_):V(_)}function c(_){return e.enter("tableHead"),e.enter("tableRow"),l(_)}function l(_){return _===124||(i=!0,a+=1),u(_)}function u(_){return _===null?n(_):De(_)?a>1?(a=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),p):n(_):Xe(_)?et(e,u,"whitespace")(_):(a+=1,i&&(i=!1,o+=1),_===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),i=!0,u):(e.enter("data"),d(_)))}function d(_){return _===null||_===124||ft(_)?(e.exit("data"),u(_)):(e.consume(_),_===92?f:d)}function f(_){return _===92||_===124?(e.consume(_),d):d(_)}function p(_){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(_):(e.enter("tableDelimiterRow"),i=!1,Xe(_)?et(e,y,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(_):y(_))}function y(_){return _===45||_===58?w(_):_===124?(i=!0,e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),k):S(_)}function k(_){return Xe(_)?et(e,w,"whitespace")(_):w(_)}function w(_){return _===58?(a+=1,i=!0,e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),v):_===45?(a+=1,v(_)):_===null||De(_)?b(_):S(_)}function v(_){return _===45?(e.enter("tableDelimiterFiller"),M(_)):S(_)}function M(_){return _===45?(e.consume(_),M):_===58?(i=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),x):(e.exit("tableDelimiterFiller"),x(_))}function x(_){return Xe(_)?et(e,b,"whitespace")(_):b(_)}function b(_){return _===124?y(_):_===null||De(_)?!i||o!==a?S(_):(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(_)):S(_)}function S(_){return n(_)}function C(_){return e.enter("tableRow"),L(_)}function L(_){return _===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),L):_===null||De(_)?(e.exit("tableRow"),t(_)):Xe(_)?et(e,L,"whitespace")(_):(e.enter("data"),P(_))}function P(_){return _===null||_===124||ft(_)?(e.exit("data"),L(_)):(e.consume(_),_===92?T:P)}function T(_){return _===92||_===124?(e.consume(_),P):P(_)}}function Bje(e,t){let n=-1,r=!0,o=0,a=[0,0,0,0],i=[0,0,0,0],s=!1,c=0,l,u,d;const f=new Dje;for(;++n<e.length;){const p=e[n],y=p[1];p[0]==="enter"?y.type==="tableHead"?(s=!1,c!==0&&(Tee(f,t,c,l,u),u=void 0,c=0),l={type:"table",start:Object.assign({},y.start),end:Object.assign({},y.end)},f.add(n,0,[["enter",l,t]])):y.type==="tableRow"||y.type==="tableDelimiterRow"?(r=!0,d=void 0,a=[0,0,0,0],i=[0,n+1,0,0],s&&(s=!1,u={type:"tableBody",start:Object.assign({},y.start),end:Object.assign({},y.end)},f.add(n,0,[["enter",u,t]])),o=y.type==="tableDelimiterRow"?2:u?3:1):o&&(y.type==="data"||y.type==="tableDelimiterMarker"||y.type==="tableDelimiterFiller")?(r=!1,i[2]===0&&(a[1]!==0&&(i[0]=i[1],d=H0(f,t,a,o,void 0,d),a=[0,0,0,0]),i[2]=n)):y.type==="tableCellDivider"&&(r?r=!1:(a[1]!==0&&(i[0]=i[1],d=H0(f,t,a,o,void 0,d)),a=i,i=[a[1],n,0,0])):y.type==="tableHead"?(s=!0,c=n):y.type==="tableRow"||y.type==="tableDelimiterRow"?(c=n,a[1]!==0?(i[0]=i[1],d=H0(f,t,a,o,n,d)):i[1]!==0&&(d=H0(f,t,i,o,n,d)),o=0):o&&(y.type==="data"||y.type==="tableDelimiterMarker"||y.type==="tableDelimiterFiller")&&(i[3]=n)}for(c!==0&&Tee(f,t,c,l,u),f.consume(t.events),n=-1;++n<t.events.length;){const p=t.events[n];p[0]==="enter"&&p[1].type==="table"&&(p[1]._align=Oje(t.events,n))}return e}function H0(e,t,n,r,o,a){const i=r===1?"tableHeader":r===2?"tableDelimiter":"tableData",s="tableContent";n[0]!==0&&(a.end=Object.assign({},u1(t.events,n[0])),e.add(n[0],0,[["exit",a,t]]));const c=u1(t.events,n[1]);if(a={type:i,start:Object.assign({},c),end:Object.assign({},c)},e.add(n[1],0,[["enter",a,t]]),n[2]!==0){const l=u1(t.events,n[2]),u=u1(t.events,n[3]),d={type:s,start:Object.assign({},l),end:Object.assign({},u)};if(e.add(n[2],0,[["enter",d,t]]),r!==2){const f=t.events[n[2]],p=t.events[n[3]];if(f[1].end=Object.assign({},p[1].end),f[1].type="chunkText",f[1].contentType="text",n[3]>n[2]+1){const y=n[2]+1,k=n[3]-n[2]-1;e.add(y,k,[])}}e.add(n[3]+1,0,[["exit",d,t]])}return o!==void 0&&(a.end=Object.assign({},u1(t.events,o)),e.add(o,0,[["exit",a,t]]),a=void 0),a}function Tee(e,t,n,r,o){const a=[],i=u1(t.events,n);o&&(o.end=Object.assign({},i),a.push(["exit",o,t])),r.end=Object.assign({},i),a.push(["exit",r,t]),e.add(n+1,0,a)}function u1(e,t){const n=e[t],r=n[0]==="enter"?"start":"end";return n[1][r]}const Vje={name:"tasklistCheck",tokenize:Uje};function $je(){return{text:{91:Vje}}}function Uje(e,t,n){const r=this;return o;function o(c){return r.previous!==null||!r._gfmTasklistFirstContentOfListItem?n(c):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),a)}function a(c){return ft(c)?(e.enter("taskListCheckValueUnchecked"),e.consume(c),e.exit("taskListCheckValueUnchecked"),i):c===88||c===120?(e.enter("taskListCheckValueChecked"),e.consume(c),e.exit("taskListCheckValueChecked"),i):n(c)}function i(c){return c===93?(e.enter("taskListCheckMarker"),e.consume(c),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),s):n(c)}function s(c){return De(c)?t(c):Xe(c)?e.check({tokenize:Wje},t,n)(c):n(c)}}function Wje(e,t,n){return et(e,r,"whitespace");function r(o){return o===null?n(o):t(o)}}function Gje(e){return r1e([kje(),Eje(),zje(e),Fje(),$je()])}const Kje={};function Zje(e){const t=this,n=e||Kje,r=t.data(),o=r.micromarkExtensions||(r.micromarkExtensions=[]),a=r.fromMarkdownExtensions||(r.fromMarkdownExtensions=[]),i=r.toMarkdownExtensions||(r.toMarkdownExtensions=[]);o.push(Gje(n)),a.push(pje()),i.push(yje(n))}function Xje({demoId:e,node:t,connector:n,adapter:r,onNameChange:o,onDescriptionChange:a,onDetailChange:i,onIconChange:s,statusReport:c,onClose:l}){const u=(t==null?void 0:t.type)==="shapeNode"&&t.data.shape==="text",d=(t==null?void 0:t.type)==="shapeNode"?t.data.shape:void 0,f=d==="ellipse"||d==="sticky",p=u?null:t,y=p!==null||n!==null,k=p&&"name"in p.data?p.data.name??"":"",w=(p==null?void 0:p.data.description)??"",v=(p==null?void 0:p.data.detail)??"",M=p!==null&&!f,x=p!==null&&(p.type==="playNode"||p.type==="stateNode"),b=x&&typeof s=="function",S=x&&p&&"icon"in p.data?p.data.icon??null:null,[C,L]=g.useState(()=>Q8e()),P=_=>{_.preventDefault(),eMe(C,_.clientX,{onWidth:L,onCommit:J8e})},T={"--detail-panel-w":`${C}px`};return m.jsx(EIe,{open:y,modal:!1,onOpenChange:_=>{_||l()},children:m.jsxs(due,{side:"right",className:"sf:overflow-y-auto sf:bg-card/94 sf:backdrop-blur-[14px] sf:border-border sf:sm:w-(--detail-panel-w)! sf:sm:max-w-(--detail-panel-w)!",style:T,"data-testid":"detail-panel",onEscapeKeyDown:_=>{var I;const A=document.activeElement;(I=A==null?void 0:A.getAttribute("data-testid"))!=null&&I.endsWith("-editor")&&_.preventDefault()},onInteractOutside:_=>{var V;const A=document.activeElement;(V=A==null?void 0:A.getAttribute("data-testid"))!=null&&V.endsWith("-editor")&&A.blur();const I=_.target;I!=null&&I.closest(".react-flow__resize-control")&&_.preventDefault(),I!=null&&I.closest("[data-radix-popper-content-wrapper]")&&_.preventDefault(),I!=null&&I.closest('[data-testid="canvas-style-strip"]')&&_.preventDefault(),I!=null&&I.closest(".react-flow__node")&&_.preventDefault(),I!=null&&I.closest(".react-flow__edge")&&_.preventDefault()},children:[m.jsx("div",{"aria-label":"Resize detail panel",onPointerDown:P,"data-testid":"detail-panel-resize-handle",className:"sf:absolute sf:inset-y-0 sf:left-0 sf:z-10 sf:hidden sf:w-1.5 sf:cursor-col-resize sf:bg-transparent sf:transition-colors sf:hover:bg-border sf:sm:block"}),p?m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-3",children:[m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1",children:[M?m.jsx(m_,{"data-testid":"detail-panel-title",children:m.jsxs("div",{className:"sf:flex sf:items-center sf:gap-2",children:[b&&s?m.jsx(Yje,{nodeId:p.id,icon:S,onChange:s}):x&&S?m.jsx("span",{"data-testid":"detail-panel-icon-readonly","aria-hidden":!0,className:"sf:inline-flex sf:h-7 sf:w-7 sf:shrink-0 sf:items-center sf:justify-center sf:text-foreground",children:m.jsx(Lu,{name:S,size:16})}):null,m.jsx("div",{className:"sf:min-w-0 sf:flex-1",children:m.jsx(mF,{nodeId:p.id,value:k,placeholder:"Name",multiline:!1,ariaLabel:"Name",testIdBase:"detail-panel-name",onSave:o,textClassName:"sf:text-base sf:font-semibold"})})]})}):m.jsx(m_,{"data-testid":"detail-panel-title",className:"sr-only",children:p.id}),m.jsxs(JH,{className:"sr-only",children:[p.id," · ",p.type]})]}),m.jsxs("div",{className:"sf:mt-0 sf:flex sf:flex-col sf:gap-3",children:[c?m.jsx(tNe,{report:c}):null,m.jsx(mF,{nodeId:p.id,value:w,placeholder:"Short description shown on the node body",multiline:!0,ariaLabel:"Description",testIdBase:"detail-panel-description",onSave:a,textClassName:"sf:font-medium sf:text-muted-foreground"}),m.jsx(mF,{nodeId:p.id,value:v,placeholder:"Long-form notes, context, anything…",multiline:!0,ariaLabel:"Detail",testIdBase:"detail-panel-detail",onSave:i,markdown:!0}),p.type==="htmlNode"&&e?m.jsx(Qje,{adapter:r,htmlPath:p.data.htmlPath}):null]})]}):n?m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-3",children:[m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1",children:[m.jsx(m_,{"data-testid":"detail-panel-title",children:n.label??"Connector"}),m.jsxs(JH,{className:"sr-only",children:[n.id," · ",n.kind]})]}),m.jsx("div",{className:"sf:mt-0 sf:flex sf:flex-col sf:gap-3",children:m.jsx(nNe,{connector:n})})]}):null]})})}function mF({nodeId:e,value:t,placeholder:n,multiline:r,ariaLabel:o,testIdBase:a,onSave:i,textClassName:s,markdown:c=!1}){const[l,u]=g.useState(!1),d=g.useRef(null),f=g.useRef(!1);g.useEffect(()=>{if(!l)return;const S=d.current;if(!S)return;S.textContent=t,S.focus();const C=window.getSelection();if(C){const L=document.createRange();L.selectNodeContents(S),L.collapse(!1),C.removeAllRanges(),C.addRange(L)}},[l,t]);const p=t==="";if(!i)return m.jsx("div",{"data-testid":a,"aria-label":o,className:ce("sf:w-full sf:rounded-md sf:px-2 sf:py-1.5 sf:text-sm",p?"sf:italic sf:text-muted-foreground/50":"text-foreground",!c&&"sf:whitespace-pre-wrap sf:wrap-break-word",s),children:p?n:c?m.jsx(jee,{value:t}):t});const y=()=>{var C;const S=((C=d.current)==null?void 0:C.textContent)??t;i(e,S),u(!1)},k=()=>{u(!1)},w=S=>{if(S.stopPropagation(),S.nativeEvent.stopPropagation(),S.key==="Escape"){S.preventDefault(),f.current=!0,k();return}if(S.key==="Enter"){if(S.preventDefault(),S.shiftKey||!r){y();return}document.execCommand("insertText",!1,`
7836
7836
  `)}},v=S=>{S.preventDefault();const C=S.clipboardData.getData("text/plain");document.execCommand("insertText",!1,C)},M=S=>{},x=()=>{if(f.current){f.current=!1;return}y()},b=()=>{l||u(!0)};return m.jsx("div",{className:"relative","data-testid":a,"data-editing":l?"true":"false",children:l?m.jsx("div",{ref:d,contentEditable:"plaintext-only",suppressContentEditableWarning:!0,spellCheck:!1,tabIndex:0,onKeyDown:w,onPaste:v,onInput:M,onBlur:x,"data-testid":`${a}-editor`,className:ce("sf:block sf:w-full sf:whitespace-pre-wrap sf:wrap-break-word sf:rounded-md sf:px-2 sf:py-1.5 sf:text-sm sf:outline-hidden",s),role:"textbox","aria-multiline":r?"true":"false","aria-label":o}):m.jsx("button",{type:"button",onClick:b,"aria-label":`Edit ${o.toLowerCase()}`,className:ce("sf:block sf:w-full sf:cursor-text sf:rounded-md sf:px-2 sf:py-1.5 sf:text-left sf:text-sm sf:transition-colors sf:hover:bg-muted/50",p?"sf:italic sf:text-muted-foreground/50":"text-foreground",!c&&"sf:whitespace-pre-wrap sf:wrap-break-word",s),children:p?n:c?m.jsx(jee,{value:t}):t})})}function Yje({nodeId:e,icon:t,onChange:n}){const[r,o]=g.useState(!1);return m.jsx(ST,{open:r,onOpenChange:o,onPick:a=>{n(e,a),o(!1)},anchor:m.jsx("button",{type:"button","data-testid":"detail-panel-icon-trigger","aria-label":t?"Change icon":"Add icon","aria-pressed":r,className:ce("sf:inline-flex sf:h-7 sf:w-7 sf:shrink-0 sf:items-center sf:justify-center sf:rounded-md sf:text-foreground sf:transition-colors",t?"sf:hover:bg-muted":"sf:border sf:border-dashed sf:border-muted-foreground/40 sf:text-muted-foreground/60 sf:hover:border-muted-foreground sf:hover:text-foreground","sf:focus-visible:outline-hidden sf:focus-visible:ring-2 sf:focus-visible:ring-ring sf:focus-visible:ring-offset-1"),children:t?m.jsx(Lu,{name:t,size:16,"aria-hidden":!0}):m.jsx(Vh,{className:"sf:h-4 sf:w-4","aria-hidden":!0})})})}function Qje({adapter:e,htmlPath:t}){const[n,r]=g.useState({kind:"idle"}),o=typeof(e==null?void 0:e.openFile)=="function",a=typeof(e==null?void 0:e.revealFile)=="function",i=async s=>{var c,l;r({kind:"pending"});try{s==="open"?await((c=e==null?void 0:e.openFile)==null?void 0:c.call(e,t)):await((l=e==null?void 0:e.revealFile)==null?void 0:l.call(e,t)),r({kind:"idle"})}catch(u){r({kind:"error",message:u instanceof Error?u.message:String(u)})}};return m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-2 sf:rounded-md sf:border sf:bg-card sf:px-3 sf:py-2 sf:text-xs","data-testid":"detail-panel-html-node",children:[m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1",children:[m.jsx("span",{className:"sf:font-mono sf:text-[11px] sf:text-muted-foreground sf:uppercase sf:tracking-widest",children:"Path"}),m.jsx("code",{"data-testid":"detail-panel-html-path",className:"sf:block sf:break-all sf:rounded sf:bg-muted/40 sf:px-2 sf:py-1 sf:font-mono sf:text-[11px]",children:t})]}),o||a?m.jsxs("div",{className:"sf:flex sf:flex-wrap sf:items-center sf:gap-2",children:[o?m.jsxs(Ft,{type:"button",size:"sm",variant:"outline",className:"sf:h-7 sf:gap-1.5 sf:px-2",onClick:()=>{i("open")},disabled:n.kind==="pending","data-testid":"detail-panel-html-open","aria-label":"Open in editor",children:[m.jsx(Zh,{className:"sf:h-3.5 sf:w-3.5"}),"Open in editor"]}):null,a?m.jsxs(Ft,{type:"button",size:"sm",variant:"outline",className:"sf:h-7 sf:gap-1.5 sf:px-2",onClick:()=>{i("reveal")},disabled:n.kind==="pending","data-testid":"detail-panel-html-reveal","aria-label":"Reveal in Finder/Explorer",children:[m.jsx(Bh,{className:"sf:h-3.5 sf:w-3.5"}),"Reveal"]}):null]}):null,n.kind==="error"?m.jsx("div",{"data-testid":"detail-panel-html-status","data-status":n.kind,className:ce("sf:text-[11px] sf:text-destructive"),children:n.message??""}):null]})}function Jje(e,t){const n=Math.max(0,t-e);if(n<1e3)return"just now";const r=Math.floor(n/1e3);if(r<60)return`${r}s ago`;const o=Math.floor(r/60);if(o<60)return`${o}m ago`;const a=Math.floor(o/60);return a<24?`${a}h ago`:`${Math.floor(a/24)}d ago`}function eNe(e){if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function tNe({report:e,now:t=Date.now()}){const n=e.data?Object.entries(e.data):[];return m.jsxs("section",{className:"sf:flex sf:flex-col sf:gap-2 sf:rounded-md sf:border sf:bg-card sf:px-3 sf:py-2 sf:text-xs","data-testid":"detail-panel-status","data-state":e.state,children:[m.jsxs("div",{className:"sf:flex sf:items-center sf:justify-between sf:gap-2",children:[m.jsx(tce,{state:e.state,summary:e.summary,"data-testid":"detail-panel-status-badge"}),m.jsx("span",{className:"sf:shrink-0 sf:text-[10px] sf:text-muted-foreground","data-testid":"detail-panel-status-relative-time",children:`Last updated: ${Jje(e.ts,t)}`})]}),e.detail?m.jsx("div",{"data-testid":"detail-panel-status-detail",className:"sf:whitespace-pre-wrap sf:wrap-break-word sf:rounded sf:bg-muted/40 sf:px-2 sf:py-1 sf:text-[11px] sf:text-foreground",children:e.detail}):null,n.length>0?m.jsx("dl",{"data-testid":"detail-panel-status-data",className:"sf:grid sf:grid-cols-[auto_1fr] sf:gap-x-3 sf:gap-y-1 sf:text-[11px]",children:n.map(([r,o])=>m.jsxs("div",{className:"contents","data-testid":"detail-panel-status-data-row",children:[m.jsx("dt",{className:"sf:truncate sf:font-medium sf:text-muted-foreground",children:r}),m.jsx("dd",{className:"sf:break-all sf:font-mono sf:text-foreground",children:eNe(o)})]},r))}):null]})}function jee({value:e}){return m.jsx(zRe,{remarkPlugins:[Zje],components:{h1:({children:t})=>m.jsx("h1",{className:"sf:mb-1 sf:text-base sf:font-bold sf:leading-snug",children:t}),h2:({children:t})=>m.jsx("h2",{className:"sf:mb-1 sf:text-sm sf:font-semibold sf:leading-snug",children:t}),h3:({children:t})=>m.jsx("h3",{className:"sf:mb-0.5 sf:text-sm sf:font-medium sf:leading-snug",children:t}),p:({children:t})=>m.jsx("p",{className:"sf:mb-2 sf:last:mb-0 sf:leading-relaxed",children:t}),ul:({children:t})=>m.jsx("ul",{className:"sf:mb-2 sf:list-disc sf:pl-4 sf:last:mb-0",children:t}),ol:({children:t})=>m.jsx("ol",{className:"sf:mb-2 sf:list-decimal sf:pl-4 sf:last:mb-0",children:t}),li:({children:t})=>m.jsx("li",{className:"mb-0.5",children:t}),code:({children:t,className:n})=>(n==null?void 0:n.includes("language-"))?m.jsx("code",{className:"sf:block sf:overflow-x-auto sf:rounded sf:bg-muted/60 sf:px-2 sf:py-1 sf:font-mono sf:text-xs",children:t}):m.jsx("code",{className:"sf:rounded sf:bg-muted/60 sf:px-1 sf:py-0.5 sf:font-mono sf:text-xs",children:t}),pre:({children:t})=>m.jsx("pre",{className:"sf:mb-2 sf:last:mb-0",children:t}),blockquote:({children:t})=>m.jsx("blockquote",{className:"sf:mb-2 sf:border-l-2 sf:border-muted-foreground/30 sf:pl-3 sf:italic sf:text-muted-foreground sf:last:mb-0",children:t}),a:({href:t,children:n})=>m.jsx("a",{href:t,target:"_blank",rel:"noreferrer",className:"sf:text-primary sf:underline sf:underline-offset-2",children:n}),strong:({children:t})=>m.jsx("strong",{className:"font-semibold",children:t}),em:({children:t})=>m.jsx("em",{className:"italic",children:t}),hr:()=>m.jsx("hr",{className:"sf:my-2 sf:border-border"}),table:({children:t})=>m.jsx("div",{className:"sf:mb-2 sf:overflow-x-auto sf:last:mb-0",children:m.jsx("table",{className:"sf:w-full sf:border-collapse sf:text-xs",children:t})}),th:({children:t})=>m.jsx("th",{className:"sf:border sf:border-border sf:bg-muted/40 sf:px-2 sf:py-1 sf:text-left sf:font-medium",children:t}),td:({children:t})=>m.jsx("td",{className:"sf:border sf:border-border sf:px-2 sf:py-1",children:t})},children:e})}function nNe({connector:e}){return m.jsx("div",{className:"sf:rounded-md sf:border sf:bg-card sf:px-3 sf:py-2 sf:text-xs",children:m.jsxs("dl",{className:"divide-y",children:[m.jsx(io,{label:"Source",value:e.source}),m.jsx(io,{label:"Target",value:e.target}),m.jsx(io,{label:"Kind",value:e.kind}),e.label?m.jsx(io,{label:"Label",value:e.label}):null,e.style?m.jsx(io,{label:"Style",value:e.style}):null,e.color?m.jsx(io,{label:"Color",value:e.color}):null,e.direction?m.jsx(io,{label:"Direction",value:e.direction}):null,e.kind==="http"&&e.url?m.jsx(io,{label:"URL",value:`${e.method??"GET"} ${e.url}`}):null,e.kind==="event"?m.jsx(io,{label:"Event",value:e.eventName}):null,e.kind==="queue"?m.jsx(io,{label:"Queue",value:e.queueName}):null]})})}function io({label:e,value:t}){return m.jsxs("div",{className:"sf:flex sf:items-start sf:gap-3 sf:py-2 sf:first:pt-0 sf:last:pb-0",children:[m.jsx("dt",{className:"sf:w-20 sf:shrink-0 sf:font-medium sf:text-muted-foreground",children:e}),m.jsx("dd",{className:"sf:flex-1 sf:break-all sf:font-mono",children:t})]})}const rNe="https://seeflow.dev/embed",oNe=e=>`${rNe}/${encodeURIComponent(e)}`,aNe=e=>e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;"),iNe=e=>[`<iframe src="${aNe(e)}"`,' width="100%"',' height="600"',' style="border:0"',' allow="fullscreen"',' loading="lazy"></iframe>'].join(`
7837
7837
  `),sNe="Embed this canvas",cNe="Paste this iframe into any page to embed the canvas.",lNe="Copy snippet",uNe="Copied!",dNe="Press ⌘C to copy",hNe="Close",fNe=1500;function pNe({open:e,onOpenChange:t,projectId:n}){const r=iNe(oNe(n)),[o,a]=g.useState("idle"),i=g.useRef(null),s=g.useCallback(async()=>{try{await navigator.clipboard.writeText(r),a("copied"),setTimeout(()=>a("idle"),fNe)}catch{a("fallback");const c=i.current;c&&(c.focus(),c.select())}},[r]);return m.jsx(RT,{open:e,onOpenChange:t,children:m.jsxs(Sf,{"data-testid":"embed-dialog-content",children:[m.jsxs(Lf,{children:[m.jsx(If,{children:sNe}),m.jsx(Ef,{children:cNe})]}),m.jsx("textarea",{ref:i,"data-testid":"embed-dialog-snippet",readOnly:!0,rows:7,value:r,spellCheck:!1,onFocus:c=>c.currentTarget.select(),className:"sf:w-full sf:resize-none sf:rounded-md sf:border sf:border-border sf:bg-background sf:p-3 sf:font-mono sf:text-xs sf:leading-relaxed sf:text-foreground sf:focus:outline-hidden sf:focus:ring-2 sf:focus:ring-ring"}),o==="fallback"?m.jsx("p",{"data-testid":"embed-dialog-fallback-hint",className:"sf:text-xs sf:text-muted-foreground",children:dNe}):null,m.jsxs(fd,{children:[m.jsx(Ft,{variant:"outline","data-testid":"embed-dialog-close",onClick:()=>t(!1),children:hNe}),m.jsx(Ft,{"data-testid":"embed-dialog-copy",onClick:s,children:o==="copied"?uNe:lNe})]})]})})}const Nee="Share / download",yNe="Download PDF",mNe="Download PNG",gNe="Embed",kNe="Export to seeflow.dev";function vNe({mode:e,projectId:t,enableEmbed:n,onDownloadPdf:r,onDownloadPng:o,onExportToCloud:a,embedOpen:i,onEmbedOpenChange:s}){const[c,l]=g.useState(!1),[u,d]=g.useState(!1),[f,p]=g.useState(!1),y=i!==void 0,k=y?i:f,w=g.useCallback(L=>{y||p(L),s==null||s(L)},[y,s]),v=g.useCallback(()=>{!r||c||(l(!0),Promise.resolve(r()).finally(()=>l(!1)))},[r,c]),M=g.useCallback(()=>{!o||u||(d(!0),Promise.resolve(o()).finally(()=>d(!1)))},[o,u]),x=!!r,b=!!o,S=n&&typeof t=="string"&&t.length>0,C=e==="edit"&&!!a;return!x&&!b&&!S&&!C?null:m.jsxs(m.Fragment,{children:[m.jsxs(tIe,{children:[m.jsx(nIe,{asChild:!0,children:m.jsx("button",{type:"button","data-testid":"share-menu-trigger","aria-label":Nee,title:Nee,className:ce("sf:inline-flex sf:h-8 sf:w-8 sf:items-center sf:justify-center sf:rounded-md sf:border sf:border-border sf:bg-background/95 sf:text-muted-foreground sf:shadow-md sf:backdrop-blur-sm sf:transition-colors","sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus-visible:outline-hidden sf:focus-visible:ring-2 sf:focus-visible:ring-ring"),children:m.jsx(n2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"})})}),m.jsxs(Xle,{align:"end","data-testid":"share-menu-content",onCloseAutoFocus:L=>{L.preventDefault()},children:[x?m.jsxs(bh,{"data-testid":"share-menu-pdf",disabled:c,onSelect:L=>{L.preventDefault(),v()},children:[c?m.jsx(dr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):m.jsx(Hh,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),m.jsx("span",{children:yNe})]}):null,b?m.jsxs(bh,{"data-testid":"share-menu-png",disabled:u,onSelect:L=>{L.preventDefault(),M()},children:[u?m.jsx(dr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):m.jsx($h,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),m.jsx("span",{children:mNe})]}):null,S?m.jsxs(bh,{"data-testid":"share-menu-embed",onSelect:L=>{L.preventDefault(),w(!0)},children:[m.jsx(N1,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),m.jsx("span",{children:gNe})]}):null,C?m.jsxs(bh,{"data-testid":"share-menu-export-cloud",onSelect:()=>{a==null||a()},children:[m.jsx(i2,{className:"sf:h-4 sf:w-4","aria-hidden":"true"}),m.jsx("span",{children:kNe})]}):null]})]}),S&&t?m.jsx(pNe,{open:k,onOpenChange:w,projectId:t}):null]})}function xNe({onRestartDemo:e}){const[t,n]=g.useState(!1),r=g.useCallback(()=>{t||(n(!0),Promise.resolve(e()).finally(()=>{n(!1)}))},[e,t]);return m.jsxs(Tf,{children:[m.jsx(jf,{asChild:!0,children:m.jsx(Ft,{"data-testid":"header-restart-demo",type:"button",variant:"ghost",size:"icon","aria-label":"Restart demo",title:"Restart demo",disabled:t,onClick:r,className:"sf:h-8 sf:w-8",children:t?m.jsx(dr,{className:"sf:h-4 sf:w-4 sf:animate-spin","aria-hidden":"true"}):m.jsx(Qh,{className:"sf:h-4 sf:w-4","aria-hidden":"true"})})}),m.jsx(Dd,{side:"bottom",children:"Restart demo"})]})}const wNe=8;function MNe(e){let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY,a=!1;for(const i of e){const s=i.data.width,c=i.data.height;s===void 0||c===void 0||(a=!0,i.position.x<t&&(t=i.position.x),i.position.y<n&&(n=i.position.y),i.position.x+s>r&&(r=i.position.x+s),i.position.y+c>o&&(o=i.position.y+c))}return a?{x:t,y:n,width:r-t,height:o-n}:null}function bNe(e){return e.length>=2}function CNe({selectedNodes:e,onMultiResize:t,paddingPx:n=wNe}){pT();const[r,o]=g.useState(null),[a,i]=g.useState(null);if(g.useRef(!1),g.useRef(null),!bNe(e))return null;const s=MNe(e);if(!s)return null;const c=a??s;return c.x-n,c.y-n,c.width+n*2,c.height+n*2,null}const zee=22,Dee=11,qee=3,Oee=2,gF=8,SNe={http:"solid",event:"dashed",queue:"dotted",default:"solid"},K1e=["default","slate","blue","green","amber","red","purple","pink"],B0=[{value:"solid",icon:pR,label:"Solid",testId:"style-tab-border-style-solid"},{value:"dashed",icon:sue,label:"Dashed",testId:"style-tab-border-style-dashed"},{value:"dotted",icon:cue,label:"Dotted",testId:"style-tab-border-style-dotted"}],Fee=[{value:"solid",icon:pR,label:"Solid",testId:"style-tab-edge-style-solid"},{value:"dashed",icon:sue,label:"Dashed",testId:"style-tab-edge-style-dashed"},{value:"dotted",icon:cue,label:"Dotted",testId:"style-tab-edge-style-dotted"}],Hee=[{value:"curve",icon:lue,label:"Curve",testId:"style-tab-edge-path-curve"},{value:"step",icon:IIe,label:"Zigzag",testId:"style-tab-edge-path-step"}],Bee=[{value:"none",icon:Gh,label:"None",testId:"style-tab-direction-none"},{value:"backward",icon:Kh,label:"Backward",testId:"style-tab-direction-backward"},{value:"forward",icon:R1,label:"Forward",testId:"style-tab-direction-forward"},{value:"both",icon:jh,label:"Both",testId:"style-tab-direction-both"}];function LNe({nodes:e,connectors:t,onStyleNode:n,onStyleNodePreview:r,onStyleNodes:o,onStyleNodesPreview:a,onStyleConnector:i,onStyleConnectorPreview:s,onRequestIconReplace:c}){const l=e.length>0,u=t.length>0;if(!l&&!u)return null;const d=l&&!u,f=!l&&u,p=e[0],y=t[0],k=e.filter(ue=>ue.type!=="iconNode"),w=k[0],v=d&&e.every(ue=>ue.type==="iconNode"),M=v?e.find(ue=>ue.type==="iconNode"):void 0,x=d&&e.every(ue=>ue.type==="imageNode"),b=d&&(p==null?void 0:p.type)==="shapeNode"&&p.data.shape==="text",S=(f?y==null?void 0:y.color:w==null?void 0:w.data.borderColor)??"default",C=(w==null?void 0:w.data.backgroundColor)??"default",L=(w==null?void 0:w.data.borderStyle)??"solid",P=y?y.style??SNe[y.kind]:"solid",T=(y==null?void 0:y.direction)??"forward",_=(y==null?void 0:y.path)??"curve",A=ue=>{for(const ge of e)n(ge.id,{borderColor:ue});for(const ge of t)i(ge.id,{color:ue})},I=ue=>{for(const ge of e)n(ge.id,{backgroundColor:ue})},V=ue=>{for(const ge of e)n(ge.id,{borderStyle:ue});for(const ge of t)i(ge.id,{style:ue})},j=ue=>{for(const ge of e)n(ge.id,{borderSize:ue});for(const ge of t)i(ge.id,{borderSize:ue})},H=ue=>{for(const ge of e)r==null||r(ge.id,{borderSize:ue});for(const ge of t)s==null||s(ge.id,{borderSize:ue})},O=ue=>{if(e.length>1&&o)o(e.map(ge=>ge.id),{fontSize:ue});else for(const ge of e)n(ge.id,{fontSize:ue})},U=ue=>{if(e.length>1&&a)a(e.map(ge=>ge.id),{fontSize:ue});else for(const ge of e)r==null||r(ge.id,{fontSize:ue})},z=k.length>1&&new Set(k.map(ue=>ue.data.fontSize??zee)).size>1,N=ue=>{if(e.length>1&&o)o(e.map(ge=>ge.id),{textColor:ue});else for(const ge of e)n(ge.id,{textColor:ue})},E=(w==null?void 0:w.data.textColor)??(b?(w==null?void 0:w.data.borderColor)??"default":"default"),W=ue=>{for(const ge of t)i(ge.id,{fontSize:ue})},q=ue=>{for(const ge of t)s==null||s(ge.id,{fontSize:ue})},R=t.length>1&&new Set(t.map(ue=>ue.fontSize??Dee)).size>1,G=ue=>{for(const ge of e)n(ge.id,{cornerRadius:ue})},X=ue=>{for(const ge of e)r==null||r(ge.id,{cornerRadius:ue})},Y=k.length>1&&new Set(k.map(ue=>ue.data.cornerRadius??gF)).size>1,oe=ue=>{for(const ge of t)i(ge.id,{path:ue})},ee=ue=>{for(const ge of t)i(ge.id,{direction:ue})},ae=ue=>{for(const ge of e)n(ge.id,{color:ue})},ve=(M==null?void 0:M.data.color)??"default",Se=f?(y==null?void 0:y.borderSize)??Oee:(w==null?void 0:w.data.borderSize)??qee,be=f?Oee:qee,we=f?"edge":"border",te=f?"Connector color":b?"Color":"Border color",ie=f?"connector color":b?"color":"border color",Te=f?"style-tab-edge-color-trigger":b?"style-tab-color-trigger":"style-tab-border-color-trigger",Ae=f||b?"style-tab-color":"style-tab-border-color";if(v){const ue=!!c&&e.length===1&&!!M,ge=()=>{M&&c&&c(M.id)};return m.jsx(d2,{delayDuration:300,children:m.jsxs("div",{"data-testid":"canvas-style-strip",className:"sf:pointer-events-auto sf:flex sf:flex-col sf:items-center sf:gap-1 sf:rounded-lg sf:border sf:border-border sf:bg-background/95 sf:p-1 sf:shadow-md sf:backdrop-blur",children:[m.jsx(Vee,{testId:"style-strip-icon-color",tooltip:"Icon color",ariaLabel:"icon color",activeToken:ve,previewKind:"edge",tokenTestIdPrefix:"style-tab-icon-color",innerTestId:"style-tab-icon-color-trigger",onSelect:ae}),ue?m.jsxs(Tf,{children:[m.jsx(jf,{asChild:!0,children:m.jsx("button",{type:"button","data-testid":"style-strip-change-icon","aria-label":"change icon",title:"Change icon",onClick:ge,className:ce("sf:inline-flex sf:h-8 sf:w-8 sf:items-center sf:justify-center sf:rounded-md sf:text-muted-foreground sf:transition-colors sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus-visible:outline-hidden sf:focus-visible:ring-2 sf:focus-visible:ring-ring sf:focus-visible:ring-offset-1"),children:m.jsx(D1,{className:"sf:h-4 sf:w-4"})})}),m.jsx(Dd,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:"Change icon"})]}):null]})})}if(x){const ue=e[0],ge=(ue==null?void 0:ue.data.borderColor)??"default",Me=(ue==null?void 0:ue.data.borderStyle)??"solid",qe=(ue==null?void 0:ue.data.borderWidth)??1,re=Oe=>{for(const je of e)n(je.id,{borderColor:Oe})},he=Oe=>{for(const je of e)n(je.id,{borderStyle:Oe})},Ie=Oe=>{for(const je of e)n(je.id,{borderWidth:Oe})},He=Oe=>{for(const je of e)r==null||r(je.id,{borderWidth:Oe})},Ue=Oe=>{for(const je of e)n(je.id,{cornerRadius:Oe})},Rt=Oe=>{for(const je of e)r==null||r(je.id,{cornerRadius:Oe})};return m.jsx(d2,{delayDuration:300,children:m.jsxs("div",{"data-testid":"canvas-style-strip",className:"sf:pointer-events-auto sf:flex sf:flex-col sf:items-center sf:gap-1 sf:rounded-lg sf:border sf:border-border sf:bg-background/95 sf:p-1 sf:shadow-md sf:backdrop-blur",children:[m.jsx(Vee,{testId:"style-strip-image-border-color",tooltip:"Border color",ariaLabel:"image border color",activeToken:ge,previewKind:"border",tokenTestIdPrefix:"style-tab-image-border-color",innerTestId:"style-tab-image-border-color-trigger",onSelect:re}),m.jsx(Ho,{testId:"style-strip-image-border-style",tooltip:"Border style",ariaLabel:"image border style",renderIcon:()=>{var je;const Oe=((je=B0.find(Pt=>Pt.value===Me))==null?void 0:je.icon)??pR;return m.jsx(Oe,{className:"sf:h-4 sf:w-4"})},children:m.jsx(nh,{ariaLabel:"Border style",value:Me,onChange:he,options:B0})}),m.jsx(Ho,{testId:"style-strip-image-border-width",tooltip:"Border width",ariaLabel:"image border width",renderIcon:()=>m.jsx("span",{className:"sf:font-mono sf:text-[10px] sf:tabular-nums",children:qe}),children:m.jsx(ah,{value:ue==null?void 0:ue.data.borderWidth,defaultValue:1,min:1,max:8,suffix:"px",onPreview:He,onCommit:Ie,testId:"style-tab-image-border-width-slider"})}),m.jsx(Ho,{testId:"style-strip-image-corner-radius",tooltip:"Corners",ariaLabel:"image corner radius",renderIcon:()=>m.jsx(z1,{className:"sf:h-4 sf:w-4"}),children:m.jsx(ah,{value:ue==null?void 0:ue.data.cornerRadius,defaultValue:gF,min:0,max:32,suffix:"px",onPreview:Rt,onCommit:Ue,testId:"style-tab-image-corner-radius-slider"})})]})})}const at=d&&!b,Qe=!b,le=!f,Q=()=>{if(f){const Me=Th[S].edge;return m.jsx("span",{className:"sf:inline-block sf:h-5 sf:w-5 sf:rounded-full sf:ring-1 sf:ring-border",style:{backgroundColor:Me}})}const ue=Th[S].border,ge=Th[C].background;return m.jsx("span",{className:"sf:inline-block sf:h-5 sf:w-5 sf:rounded-md sf:ring-1 sf:ring-border",style:{backgroundColor:ge,border:`2px solid ${ue}`}})};return m.jsx(d2,{delayDuration:300,children:m.jsxs("div",{"data-testid":"canvas-style-strip",className:"sf:pointer-events-auto sf:flex sf:flex-col sf:items-center sf:gap-1 sf:rounded-lg sf:border sf:border-border sf:bg-background/95 sf:p-1 sf:shadow-md sf:backdrop-blur",children:[b?null:m.jsx(Ho,{testId:"style-strip-colors",tooltip:"Colors",ariaLabel:"colors",renderIcon:Q,children:m.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[m.jsx(o1,{label:te,children:m.jsx(kF,{testId:"style-strip-border-color",activeToken:S,previewKind:we,tokenTestIdPrefix:Ae,innerTestId:Te,ariaLabel:ie,onSelect:A})}),at?m.jsx(o1,{label:"Fill",children:m.jsx(kF,{testId:"style-strip-fill",activeToken:C,previewKind:"background",tokenTestIdPrefix:"style-tab-background-color",innerTestId:"style-tab-background-color-trigger",ariaLabel:"fill",onSelect:I})}):null]})}),Qe?m.jsx(Ho,{testId:"style-strip-border",tooltip:f?"Connector":"Border",ariaLabel:f?"connector":"border",renderIcon:()=>{var ge,Me;const ue=(f?(ge=Fee.find(qe=>qe.value===P))==null?void 0:ge.icon:(Me=B0.find(qe=>qe.value===L))==null?void 0:Me.icon)??pR;return m.jsx(ue,{className:"sf:h-4 sf:w-4"})},children:m.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[m.jsx(o1,{label:"Style",testId:"style-strip-border-style",children:f?m.jsx(nh,{ariaLabel:"Connector style",value:P,onChange:ue=>V(ue),options:Fee}):m.jsx(nh,{ariaLabel:"Border style",value:L,onChange:ue=>V(ue),options:B0})}),m.jsx(o1,{label:"Width",testId:"style-strip-border-size",children:m.jsx(ah,{value:Se,defaultValue:be,min:1,max:8,suffix:"px",onPreview:H,onCommit:j,testId:f?"style-tab-stroke-width-slider":"style-tab-border-size-slider"})})]})}):null,l||f?m.jsx(Ho,{testId:"style-strip-text",tooltip:"Text",ariaLabel:"text",renderIcon:()=>m.jsx(q1,{className:"sf:h-4 sf:w-4"}),children:m.jsxs("div",{className:"sf:flex sf:w-56 sf:flex-col sf:gap-3",children:[m.jsx(o1,{label:"Size",testId:f?"style-strip-connector-font-size":"style-strip-font-size",children:m.jsx(ah,{value:f?y==null?void 0:y.fontSize:w==null?void 0:w.data.fontSize,defaultValue:f?Dee:zee,min:f?8:10,max:32,suffix:"px",indeterminate:f?R:z,onPreview:f?q:U,onCommit:f?W:O,testId:f?"style-tab-connector-font-size-slider":"style-tab-font-size-slider"})}),le?m.jsx(o1,{label:"Color",children:m.jsx(kF,{testId:"style-strip-text-color",activeToken:E,previewKind:"edge",tokenTestIdPrefix:"style-tab-text-color",innerTestId:"style-tab-text-color-trigger",ariaLabel:"text color",onSelect:N})}):null]})}):null,l&&!b?m.jsx(Ho,{testId:"style-strip-corner-radius",tooltip:"Corners",ariaLabel:"corner radius",renderIcon:()=>m.jsx(z1,{className:"sf:h-4 sf:w-4"}),children:m.jsx(ah,{value:w==null?void 0:w.data.cornerRadius,defaultValue:gF,min:0,max:32,suffix:"px",indeterminate:Y,onPreview:X,onCommit:G,testId:"style-tab-corner-radius-slider"})}):null,f?m.jsx(Ho,{testId:"style-strip-path",tooltip:"Connector path",ariaLabel:"connector path",renderIcon:()=>{var ge;const ue=((ge=Hee.find(Me=>Me.value===_))==null?void 0:ge.icon)??lue;return m.jsx(ue,{className:"sf:h-4 sf:w-4"})},children:m.jsx(nh,{ariaLabel:"Connector path",value:_,onChange:oe,options:Hee})}):null,f?m.jsx(Ho,{testId:"style-strip-direction",tooltip:"Direction",ariaLabel:"direction",renderIcon:()=>{var ge;const ue=((ge=Bee.find(Me=>Me.value===T))==null?void 0:ge.icon)??R1;return m.jsx(ue,{className:"sf:h-4 sf:w-4"})},children:m.jsx(nh,{ariaLabel:"Connector direction",value:T,onChange:ee,options:Bee})}):null]})})}function Z1e(e,t){const n=Th[e];return t==="background"?{backgroundColor:n.background,borderColor:n.border}:t==="edge"?{backgroundColor:n.edge,borderColor:n.edge}:{borderColor:n.border,backgroundColor:n.background}}function INe(e,t){const n=Th[e];return t==="background"?{backgroundColor:n.background}:t==="edge"?{backgroundColor:n.edge}:{backgroundColor:n.border}}function Vee({testId:e,tooltip:t,ariaLabel:n,activeToken:r,previewKind:o,tokenTestIdPrefix:a,innerTestId:i,onSelect:s}){const[c,l]=g.useState(!1),u=r==="default";return m.jsxs(Nd,{open:c,onOpenChange:l,children:[m.jsxs(Tf,{children:[m.jsx(jf,{asChild:!0,children:m.jsx(kf,{asChild:!0,children:m.jsx("button",{type:"button","data-testid":e,"data-active-token":r,"aria-label":`${n}: ${r}`,title:t,className:ce("sf:group sf:relative sf:inline-flex sf:h-8 sf:w-8 sf:items-center sf:justify-center sf:rounded-md sf:text-muted-foreground sf:transition-colors sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus-visible:outline-hidden sf:focus-visible:ring-2 sf:focus-visible:ring-ring sf:focus-visible:ring-offset-1"),children:m.jsx("span",{"data-testid":i,className:"sf:relative sf:h-5 sf:w-5 sf:rounded-full sf:ring-1 sf:ring-border",style:INe(r,o),children:u?m.jsx("span",{"aria-hidden":"true",className:"sf:pointer-events-none sf:absolute sf:inset-0 sf:rounded-full",style:{backgroundImage:"linear-gradient(45deg, transparent 45%, currentColor 45%, currentColor 55%, transparent 55%)",color:"hsl(var(--muted-foreground))",opacity:.5}}):null})})})}),m.jsx(Dd,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:t})]}),m.jsx(Fu,{side:"right",align:"start",className:"sf:w-auto sf:p-2","data-testid":`${i}-popover`,children:m.jsx("div",{className:"sf:grid sf:grid-cols-4 sf:gap-1.5",children:K1e.map(d=>{const f=r===d;return m.jsx("button",{type:"button",onClick:()=>{s(d),l(!1)},"data-testid":`${a}-${d}`,"data-active":f,"aria-label":`${n} ${d}`,"aria-pressed":f,title:d,className:ce("sf:relative sf:flex sf:h-7 sf:w-7 sf:items-center sf:justify-center sf:rounded-full sf:border-2 sf:transition-all",f?"sf:ring-2 sf:ring-ring sf:ring-offset-2 sf:ring-offset-popover":"sf:hover:scale-110"),style:Z1e(d,o),children:f?m.jsx(Ja,{className:"sf:h-3 sf:w-3 sf:drop-shadow-sm",style:{color:"hsl(var(--foreground))"}}):null},d)})})})]})}function kF({testId:e,activeToken:t,previewKind:n,tokenTestIdPrefix:r,innerTestId:o,ariaLabel:a,onSelect:i}){return m.jsx("div",{"data-testid":e,"data-active-token":t,"data-inner-testid":o,className:"sf:grid sf:grid-cols-4 sf:gap-1.5",children:K1e.map(s=>{const c=t===s;return m.jsx("button",{type:"button",onClick:()=>i(s),"data-testid":`${r}-${s}`,"data-active":c,"aria-label":`${a} ${s}`,"aria-pressed":c,title:s,className:ce("sf:relative sf:flex sf:h-7 sf:w-7 sf:items-center sf:justify-center sf:rounded-full sf:border-2 sf:transition-all",c?"sf:ring-2 sf:ring-ring sf:ring-offset-2 sf:ring-offset-popover":"sf:hover:scale-110"),style:Z1e(s,n),children:c?m.jsx(Ja,{className:"sf:h-3 sf:w-3 sf:drop-shadow-sm",style:{color:"hsl(var(--foreground))"}}):null},s)})})}function o1({label:e,testId:t,children:n}){return m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-1.5","data-testid":t,children:[m.jsx("div",{className:"sf:text-[11px] sf:font-medium sf:uppercase sf:tracking-wide sf:text-muted-foreground",children:e}),n]})}function Ho({testId:e,tooltip:t,ariaLabel:n,renderIcon:r,children:o}){const[a,i]=g.useState(!1);return m.jsxs(Nd,{open:a,onOpenChange:i,children:[m.jsxs(Tf,{children:[m.jsx(jf,{asChild:!0,children:m.jsx(kf,{asChild:!0,children:m.jsx("button",{type:"button","data-testid":e,"aria-label":n,title:t,className:ce("sf:inline-flex sf:h-8 sf:w-8 sf:items-center sf:justify-center sf:rounded-md sf:text-muted-foreground sf:transition-colors sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus-visible:outline-hidden sf:focus-visible:ring-2 sf:focus-visible:ring-ring sf:focus-visible:ring-offset-1"),children:r()})})}),m.jsx(Dd,{side:"right",className:"sf:px-2 sf:py-1 sf:text-xs",children:t})]}),m.jsx(Fu,{side:"right",align:"start",className:"sf:w-auto sf:p-3",children:o})]})}function ah({value:e,defaultValue:t,min:n,max:r,suffix:o,indeterminate:a,onPreview:i,onCommit:s,testId:c}){const l=e??t,[u,d]=g.useState(l),[f,p]=g.useState(!1);g.useEffect(()=>{d(l),p(!1)},[l]);const y=a&&!f;return m.jsxs("div",{className:"sf:flex sf:w-48 sf:items-center sf:gap-3",children:[m.jsx(Eue,{min:n,max:r,step:1,value:[u],onValueChange:([k])=>{const w=k??n;d(w),p(!0),i==null||i(w)},onValueCommit:([k])=>s(k??n),"data-testid":c,"data-indeterminate":y?"true":void 0,className:ce("sf:flex-1",y&&"sf:opacity-60")}),m.jsx("span",{"data-testid":`${c}-value`,className:"sf:w-12 sf:shrink-0 sf:text-right sf:text-xs sf:tabular-nums sf:text-muted-foreground",children:y?"Mixed":m.jsxs(m.Fragment,{children:[u,o]})})]})}const ENe="modulepreload",ANe=function(e){return"/"+e},$ee={},PNe=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),s=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));o=Promise.allSettled(n.map(c=>{if(c=ANe(c),c in $ee)return;$ee[c]=!0;const l=c.endsWith(".css"),u=l?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${u}`))return;const d=document.createElement("link");if(d.rel=l?"stylesheet":ENe,l||(d.as="script"),d.crossOrigin="",d.href=c,s&&d.setAttribute("nonce",s),document.head.appendChild(d),l)return new Promise((f,p)=>{d.addEventListener("load",f),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${c}`)))})}))}function a(i){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=i,window.dispatchEvent(s),!s.defaultPrevented)throw i}return o.then(i=>{for(const s of i||[])s.status==="rejected"&&a(s.reason);return t().catch(a)})};function _Ne(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;const n=document.implementation.createHTMLDocument(),r=n.createElement("base"),o=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(o),t&&(r.href=t),o.href=e,o.href}const RNe=(()=>{let e=0;const t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function ni(e){const t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}let a1=null;function X1e(e={}){return a1||(e.includeStyleProperties?(a1=e.includeStyleProperties,a1):(a1=ni(window.getComputedStyle(document.documentElement)),a1))}function vR(e,t){const r=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return r?parseFloat(r.replace("px","")):0}function TNe(e){const t=vR(e,"border-left-width"),n=vR(e,"border-right-width");return e.clientWidth+t+n}function jNe(e){const t=vR(e,"border-top-width"),n=vR(e,"border-bottom-width");return e.clientHeight+t+n}function Y1e(e,t={}){const n=t.width||TNe(e),r=t.height||jNe(e);return{width:n,height:r}}function NNe(){let e,t;try{t=process}catch{}const n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}const $n=16384;function zNe(e){(e.width>$n||e.height>$n)&&(e.width>$n&&e.height>$n?e.width>e.height?(e.height*=$n/e.width,e.width=$n):(e.width*=$n/e.height,e.height=$n):e.width>$n?(e.height*=$n/e.width,e.width=$n):(e.width*=$n/e.height,e.height=$n))}function xR(e){return new Promise((t,n)=>{const r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=e})}async function DNe(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(t=>`data:image/svg+xml;charset=utf-8,${t}`)}async function qNe(e,t,n){const r="http://www.w3.org/2000/svg",o=document.createElementNS(r,"svg"),a=document.createElementNS(r,"foreignObject");return o.setAttribute("width",`${t}`),o.setAttribute("height",`${n}`),o.setAttribute("viewBox",`0 0 ${t} ${n}`),a.setAttribute("width","100%"),a.setAttribute("height","100%"),a.setAttribute("x","0"),a.setAttribute("y","0"),a.setAttribute("externalResourcesRequired","true"),o.appendChild(a),a.appendChild(e),DNe(o)}const Tn=(e,t)=>{if(e instanceof t)return!0;const n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||Tn(n,t)};function ONe(e){const t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}function FNe(e,t){return X1e(t).map(n=>{const r=e.getPropertyValue(n),o=e.getPropertyPriority(n);return`${n}: ${r}${o?" !important":""};`}).join(" ")}function HNe(e,t,n,r){const o=`.${e}:${t}`,a=n.cssText?ONe(n):FNe(n,r);return document.createTextNode(`${o}{${a}}`)}function Uee(e,t,n,r){const o=window.getComputedStyle(e,n),a=o.getPropertyValue("content");if(a===""||a==="none")return;const i=RNe();try{t.className=`${t.className} ${i}`}catch{return}const s=document.createElement("style");s.appendChild(HNe(i,n,o,r)),t.appendChild(s)}function BNe(e,t,n){Uee(e,t,":before",n),Uee(e,t,":after",n)}const Wee="application/font-woff",Gee="image/jpeg",VNe={woff:Wee,woff2:Wee,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:Gee,jpeg:Gee,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function $Ne(e){const t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}function nU(e){const t=$Ne(e).toLowerCase();return VNe[t]||""}function UNe(e){return e.split(/,/)[1]}function mB(e){return e.search(/^(data:)/)!==-1}function WNe(e,t){return`data:${t};base64,${e}`}async function Q1e(e,t,n){const r=await fetch(e,t);if(r.status===404)throw new Error(`Resource "${r.url}" not found`);const o=await r.blob();return new Promise((a,i)=>{const s=new FileReader;s.onerror=i,s.onloadend=()=>{try{a(n({res:r,result:s.result}))}catch(c){i(c)}},s.readAsDataURL(o)})}const vF={};function GNe(e,t,n){let r=e.replace(/\?.*/,"");return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}async function rU(e,t,n){const r=GNe(e,t,n.includeQueryParams);if(vF[r]!=null)return vF[r];n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+new Date().getTime());let o;try{const a=await Q1e(e,n.fetchRequestInit,({res:i,result:s})=>(t||(t=i.headers.get("Content-Type")||""),UNe(s)));o=WNe(a,t)}catch(a){o=n.imagePlaceholder||"";let i=`Failed to fetch resource: ${e}`;a&&(i=typeof a=="string"?a:a.message),i&&console.warn(i)}return vF[r]=o,o}async function KNe(e){const t=e.toDataURL();return t==="data:,"?e.cloneNode(!1):xR(t)}async function ZNe(e,t){if(e.currentSrc){const a=document.createElement("canvas"),i=a.getContext("2d");a.width=e.clientWidth,a.height=e.clientHeight,i==null||i.drawImage(e,0,0,a.width,a.height);const s=a.toDataURL();return xR(s)}const n=e.poster,r=nU(n),o=await rU(n,r,t);return xR(o)}async function XNe(e,t){var n;try{if(!((n=e==null?void 0:e.contentDocument)===null||n===void 0)&&n.body)return await ZT(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function YNe(e,t){return Tn(e,HTMLCanvasElement)?KNe(e):Tn(e,HTMLVideoElement)?ZNe(e,t):Tn(e,HTMLIFrameElement)?XNe(e,t):e.cloneNode(J1e(e))}const QNe=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SLOT",J1e=e=>e.tagName!=null&&e.tagName.toUpperCase()==="SVG";async function JNe(e,t,n){var r,o;if(J1e(t))return t;let a=[];return QNe(e)&&e.assignedNodes?a=ni(e.assignedNodes()):Tn(e,HTMLIFrameElement)&&(!((r=e.contentDocument)===null||r===void 0)&&r.body)?a=ni(e.contentDocument.body.childNodes):a=ni(((o=e.shadowRoot)!==null&&o!==void 0?o:e).childNodes),a.length===0||Tn(e,HTMLVideoElement)||await a.reduce((i,s)=>i.then(()=>ZT(s,n)).then(c=>{c&&t.appendChild(c)}),Promise.resolve()),t}function eze(e,t,n){const r=t.style;if(!r)return;const o=window.getComputedStyle(e);o.cssText?(r.cssText=o.cssText,r.transformOrigin=o.transformOrigin):X1e(n).forEach(a=>{let i=o.getPropertyValue(a);a==="font-size"&&i.endsWith("px")&&(i=`${Math.floor(parseFloat(i.substring(0,i.length-2)))-.1}px`),Tn(e,HTMLIFrameElement)&&a==="display"&&i==="inline"&&(i="block"),a==="d"&&t.getAttribute("d")&&(i=`path(${t.getAttribute("d")})`),r.setProperty(a,i,o.getPropertyPriority(a))})}function tze(e,t){Tn(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),Tn(e,HTMLInputElement)&&t.setAttribute("value",e.value)}function nze(e,t){if(Tn(e,HTMLSelectElement)){const n=t,r=Array.from(n.children).find(o=>e.value===o.getAttribute("value"));r&&r.setAttribute("selected","")}}function rze(e,t,n){return Tn(t,Element)&&(eze(e,t,n),BNe(e,t,n),tze(e,t),nze(e,t)),t}async function oze(e,t){const n=e.querySelectorAll?e.querySelectorAll("use"):[];if(n.length===0)return e;const r={};for(let a=0;a<n.length;a++){const s=n[a].getAttribute("xlink:href");if(s){const c=e.querySelector(s),l=document.querySelector(s);!c&&l&&!r[s]&&(r[s]=await ZT(l,t,!0))}}const o=Object.values(r);if(o.length){const a="http://www.w3.org/1999/xhtml",i=document.createElementNS(a,"svg");i.setAttribute("xmlns",a),i.style.position="absolute",i.style.width="0",i.style.height="0",i.style.overflow="hidden",i.style.display="none";const s=document.createElementNS(a,"defs");i.appendChild(s);for(let c=0;c<o.length;c++)s.appendChild(o[c]);e.appendChild(i)}return e}async function ZT(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(r=>YNe(r,t)).then(r=>JNe(e,r,t)).then(r=>rze(e,r,t)).then(r=>oze(r,t))}const ede=/url\((['"]?)([^'"]+?)\1\)/g,aze=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,ize=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function sze(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}function cze(e){const t=[];return e.replace(ede,(n,r,o)=>(t.push(o),n)),t.filter(n=>!mB(n))}async function lze(e,t,n,r,o){try{const a=n?_Ne(t,n):t,i=nU(t);let s;return o||(s=await rU(a,i,r)),e.replace(sze(t),`$1${s}$3`)}catch{}return e}function uze(e,{preferredFontFormat:t}){return t?e.replace(ize,n=>{for(;;){const[r,,o]=aze.exec(n)||[];if(!o)return"";if(o===t)return`src: ${r};`}}):e}function tde(e){return e.search(ede)!==-1}async function nde(e,t,n){if(!tde(e))return e;const r=uze(e,n);return cze(r).reduce((a,i)=>a.then(s=>lze(s,i,t,n)),Promise.resolve(r))}async function i1(e,t,n){var r;const o=(r=t.style)===null||r===void 0?void 0:r.getPropertyValue(e);if(o){const a=await nde(o,null,n);return t.style.setProperty(e,a,t.style.getPropertyPriority(e)),!0}return!1}async function dze(e,t){await i1("background",e,t)||await i1("background-image",e,t),await i1("mask",e,t)||await i1("-webkit-mask",e,t)||await i1("mask-image",e,t)||await i1("-webkit-mask-image",e,t)}async function hze(e,t){const n=Tn(e,HTMLImageElement);if(!(n&&!mB(e.src))&&!(Tn(e,SVGImageElement)&&!mB(e.href.baseVal)))return;const r=n?e.src:e.href.baseVal,o=await rU(r,nU(r),t);await new Promise((a,i)=>{e.onload=a,e.onerror=t.onImageErrorHandler?(...c)=>{try{a(t.onImageErrorHandler(...c))}catch(l){i(l)}}:i;const s=e;s.decode&&(s.decode=a),s.loading==="lazy"&&(s.loading="eager"),n?(e.srcset="",e.src=o):e.href.baseVal=o})}async function fze(e,t){const r=ni(e.childNodes).map(o=>rde(o,t));await Promise.all(r).then(()=>e)}async function rde(e,t){Tn(e,Element)&&(await dze(e,t),await hze(e,t),await fze(e,t))}function pze(e,t){const{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);const r=t.style;return r!=null&&Object.keys(r).forEach(o=>{n[o]=r[o]}),e}const Kee={};async function Zee(e){let t=Kee[e];if(t!=null)return t;const r=await(await fetch(e)).text();return t={url:e,cssText:r},Kee[e]=t,t}async function Xee(e,t){let n=e.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,a=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let s=i.replace(r,"$1");return s.startsWith("https://")||(s=new URL(s,e.url).href),Q1e(s,t.fetchRequestInit,({result:c})=>(n=n.replace(i,`url(${c})`),[i,c]))});return Promise.all(a).then(()=>n)}function Yee(e){if(e==null)return[];const t=[],n=/(\/\*[\s\S]*?\*\/)/gi;let r=e.replace(n,"");const o=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const c=o.exec(r);if(c===null)break;t.push(c[0])}r=r.replace(o,"");const a=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i="((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})",s=new RegExp(i,"gi");for(;;){let c=a.exec(r);if(c===null){if(c=s.exec(r),c===null)break;a.lastIndex=s.lastIndex}else s.lastIndex=a.lastIndex;t.push(c[0])}return t}async function yze(e,t){const n=[],r=[];return e.forEach(o=>{if("cssRules"in o)try{ni(o.cssRules||[]).forEach((a,i)=>{if(a.type===CSSRule.IMPORT_RULE){let s=i+1;const c=a.href,l=Zee(c).then(u=>Xee(u,t)).then(u=>Yee(u).forEach(d=>{try{o.insertRule(d,d.startsWith("@import")?s+=1:o.cssRules.length)}catch(f){console.error("Error inserting rule from remote css",{rule:d,error:f})}})).catch(u=>{console.error("Error loading remote css",u.toString())});r.push(l)}})}catch(a){const i=e.find(s=>s.href==null)||document.styleSheets[0];o.href!=null&&r.push(Zee(o.href).then(s=>Xee(s,t)).then(s=>Yee(s).forEach(c=>{i.insertRule(c,i.cssRules.length)})).catch(s=>{console.error("Error loading remote stylesheet",s)})),console.error("Error inlining remote css file",a)}}),Promise.all(r).then(()=>(e.forEach(o=>{if("cssRules"in o)try{ni(o.cssRules||[]).forEach(a=>{n.push(a)})}catch(a){console.error(`Error while reading CSS rules from ${o.href}`,a)}}),n))}function mze(e){return e.filter(t=>t.type===CSSRule.FONT_FACE_RULE).filter(t=>tde(t.style.getPropertyValue("src")))}async function gze(e,t){if(e.ownerDocument==null)throw new Error("Provided element is not within a Document");const n=ni(e.ownerDocument.styleSheets),r=await yze(n,t);return mze(r)}function ode(e){return e.trim().replace(/["']/g,"")}function kze(e){const t=new Set;function n(r){(r.style.fontFamily||getComputedStyle(r).fontFamily).split(",").forEach(a=>{t.add(ode(a))}),Array.from(r.children).forEach(a=>{a instanceof HTMLElement&&n(a)})}return n(e),t}async function vze(e,t){const n=await gze(e,t),r=kze(e);return(await Promise.all(n.filter(a=>r.has(ode(a.style.fontFamily))).map(a=>{const i=a.parentStyleSheet?a.parentStyleSheet.href:null;return nde(a.cssText,i,t)}))).join(`
7838
- `)}async function xze(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await vze(e,t);if(n){const r=document.createElement("style"),o=document.createTextNode(n);r.appendChild(o),e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r)}}async function wze(e,t={}){const{width:n,height:r}=Y1e(e,t),o=await ZT(e,t,!0);return await xze(o,t),await rde(o,t),pze(o,t),await qNe(o,n,r)}async function Mze(e,t={}){const{width:n,height:r}=Y1e(e,t),o=await wze(e,t),a=await xR(o),i=document.createElement("canvas"),s=i.getContext("2d"),c=t.pixelRatio||NNe(),l=t.canvasWidth||n,u=t.canvasHeight||r;return i.width=l*c,i.height=u*c,t.skipAutoScale||zNe(i),i.style.width=`${l}`,i.style.height=`${u}`,t.backgroundColor&&(s.fillStyle=t.backgroundColor,s.fillRect(0,0,i.width,i.height)),s.drawImage(a,0,0,i.width,i.height),i}async function bze(e,t={}){return(await Mze(e,t)).toDataURL()}const Cze=e=>e instanceof Element?!(e.classList.contains("react-flow__minimap")||e.classList.contains("react-flow__controls")||e.classList.contains("react-flow__panel")):!0,Sze=async e=>{const t=await bze(e,{cacheBust:!0,filter:Cze}),n=await new Promise((r,o)=>{const a=new Image;a.onload=()=>r({width:a.naturalWidth,height:a.naturalHeight}),a.onerror=()=>o(new Error("Failed to decode captured image")),a.src=t});return{dataUrl:t,...n}},Lze=(e,t)=>{const n=document.createElement("a");n.href=e,n.download=t,n.rel="noopener",document.body.appendChild(n),n.click(),n.remove()},Ize=e=>{const t=e.replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t.slice(0,80):"canvas"},Qee=(e,t)=>`${Ize(e??"canvas")}.${t}`,Eze=({projectId:e,getReactFlow:t})=>{const[n,r]=g.useState(null),o=g.useCallback(()=>r(null),[]),a=g.useCallback(async()=>{const l=t();if(!l)return null;const u=document.querySelector(".react-flow__viewport");if(!u)return null;const d=l.getViewport();try{return await l.fitView({duration:0,padding:.1}),await new Promise(f=>requestAnimationFrame(()=>f())),await Sze(u)}finally{l.setViewport(d,{duration:0})}},[t]),i=g.useCallback(async()=>{r(null);try{const l=await a();if(!l)return;Lze(l.dataUrl,Qee(e,"png"))}catch(l){r(l instanceof Error?l.message:String(l))}},[a,e]),s=g.useCallback(async()=>{r(null);try{const l=await a();if(!l)return;const{jsPDF:u}=await PNe(async()=>{const{jsPDF:p}=await import("./jspdf.es.min-Dh_oxn-h.js").then(y=>y.j);return{jsPDF:p}},[]),d=l.width>l.height?"landscape":"portrait",f=new u({orientation:d,unit:"px",format:[l.width,l.height],hotfixes:["px_scaling"]});f.addImage(l.dataUrl,"PNG",0,0,l.width,l.height),f.save(Qee(e,"pdf"))}catch(l){r(l instanceof Error?l.message:String(l))}},[a,e]),c=g.useCallback(async()=>{const l=await a();return l==null?void 0:l.dataUrl},[a]);return{exportPdf:s,exportPng:i,capturePreview:c,lastError:n,clearError:o}},Aze={showToolbar:!0,showStyleStrip:!0,showDetailPanel:!0,showStatusBadges:!0,showResizeHandles:!0,showControls:!0,showShareMenu:!0,showRestart:!0,enableKeyboard:!0,enableContextMenu:!0,enableDragDrop:!0,enableImageDrop:!0,enableZoom:!0,enablePan:!0,enableSelection:!0,enableNodeMove:!0,enableEmbed:!1},Pze={showToolbar:!1,showStyleStrip:!1,showDetailPanel:!1,showStatusBadges:!0,showResizeHandles:!1,showControls:!0,showShareMenu:!0,showRestart:!1,enableKeyboard:!1,enableContextMenu:!1,enableDragDrop:!1,enableImageDrop:!1,enableZoom:!0,enablePan:!0,enableSelection:!0,enableNodeMove:!0,enableEmbed:!1},_ze={showToolbar:!1,showStyleStrip:!1,showDetailPanel:!1,showStatusBadges:!1,showResizeHandles:!1,showControls:!1,showShareMenu:!1,showRestart:!1,enableKeyboard:!1,enableContextMenu:!1,enableDragDrop:!1,enableImageDrop:!1,enableZoom:!1,enablePan:!1,enableSelection:!1,enableNodeMove:!1,enableEmbed:!1};function Rze(e){const t=e.mode==="edit"?Aze:e.mode==="mini"?_ze:Pze;return{showToolbar:e.showToolbar??t.showToolbar,showStyleStrip:e.showStyleStrip??t.showStyleStrip,showDetailPanel:e.showDetailPanel??t.showDetailPanel,showStatusBadges:e.showStatusBadges??t.showStatusBadges,showResizeHandles:e.showResizeHandles??t.showResizeHandles,showControls:e.showControls??t.showControls,showShareMenu:e.showShareMenu??t.showShareMenu,showRestart:e.showRestart??t.showRestart,enableKeyboard:e.enableKeyboard??t.enableKeyboard,enableContextMenu:e.enableContextMenu??t.enableContextMenu,enableDragDrop:e.enableDragDrop??t.enableDragDrop,enableImageDrop:e.enableImageDrop??t.enableImageDrop,enableZoom:e.enableZoom??t.enableZoom,enablePan:e.enablePan??t.enablePan,enableSelection:e.enableSelection??t.enableSelection,enableNodeMove:e.enableNodeMove??t.enableNodeMove,enableEmbed:e.enableEmbed??t.enableEmbed}}const Jee=40,ih={padding:.15,duration:300,includeHiddenNodes:!1};function Tze(e){return e===void 0||e===!1?{onMount:!1,onExternalNodeChange:!1}:e===!0?{onMount:!0,onExternalNodeChange:!0}:{onMount:e.onMount??!0,onExternalNodeChange:e.onExternalNodeChange??!0}}const ete=e=>{if("clientX"in e)return{clientX:e.clientX,clientY:e.clientY};const t=e.changedTouches[0]??e.touches[0];return t?{clientX:t.clientX,clientY:t.clientY}:null},jze=(e,t)=>{var r;const n=document.elementsFromPoint(e,t);for(const o of n){const a=(r=o.closest)==null?void 0:r.call(o,".react-flow__node");if(a)return a}return null},ade=15,xF=(e,t,n)=>{const r=jze(t,n);if(r)return r;if(!e)return null;let o=null,a=ade;const i=e.querySelectorAll(".react-flow__node");for(const s of i){const c=s.getBoundingClientRect();if(c.width===0||c.height===0)continue;const l=Math.max(c.left-t,0,t-c.right),u=Math.max(c.top-n,0,n-c.bottom),d=Math.hypot(l,u);d<=a&&(o=s,a=d)}return o};function tte(e,t,n,r,o){if(e==="source"?(r==null?void 0:r.targetPin)!==void 0||(r==null?void 0:r.targetHandleAutoPicked)===!1:(r==null?void 0:r.sourcePin)!==void 0||(r==null?void 0:r.sourceHandleAutoPicked)===!1)return;const i=e==="source"?n:t,s=e==="source"?t:n,c=o(i),l=o(s);if(!c||!l)return;const u=c.measured.width??c.width??0,d=c.measured.height??c.height??0,f=l.measured.width??l.width??0,p=l.measured.height??l.height??0;if(u===0||d===0||f===0||p===0)return;const y={x:c.internals.positionAbsolute.x,y:c.internals.positionAbsolute.y,w:u,h:d},k={x:l.internals.positionAbsolute.x+f/2,y:l.internals.positionAbsolute.y+p/2};return tMe(y,rR(y,k))}function Nze(e,t,n,r){if(r===null)return"no-op";const o=e==="source"?t:n;return r===(e==="source"?n:t)?"self-loop":r===o?"pin-own":"reconnect-and-pin"}const zze=(e,t)=>{if(!t)return e;const n=t.data?{...e.data,...t.data}:e.data;return{...e,...t,data:n}},Dze=(e,t)=>t?{...e,...t}:e,qze={playNode:dCe,stateNode:RCe,shapeNode:CCe,imageNode:tbe,iconNode:hMe,htmlNode:XMe},Oze={editableEdge:jCe},Fze={zIndex:0},Hze=8,nte=(e,t)=>e?typeof e=="string"?`url('#${e}')`:`url('#${`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}')`:void 0,Bze=e=>function({fromX:n,fromY:r,toX:o,toY:a,fromPosition:i,toPosition:s,connectionLineStyle:c}){const l=Fe(W=>e.current?W.edges.find(q=>q.reconnectable===!0)??null:null),u=l==null?void 0:l.data,d=Fe(W=>{var R;const q=W.connection;return((R=q==null?void 0:q.fromHandle)==null?void 0:R.nodeId)??null}),f=Fe(W=>l!=null&&l.source?W.nodeLookup.get(l.source)??null:null),p=Fe(W=>l!=null&&l.target?W.nodeLookup.get(l.target)??null:null),y=Fe(W=>d?W.nodeLookup.get(d)??null:null),k=(l==null?void 0:l.source)===d,w=l?k?f:p:y,v=k?p:f,M=k?u==null?void 0:u.sourcePin:u==null?void 0:u.targetPin,x=k?u==null?void 0:u.sourceHandleAutoPicked:u==null?void 0:u.targetHandleAutoPicked;let b=n,S=r,C=i;if(w){const W=w.measured.width??w.width??0,q=w.measured.height??w.height??0;if(W>0&&q>0){const R={x:w.internals.positionAbsolute.x,y:w.internals.positionAbsolute.y,w:W,h:q};let G=null;if(M)G=oR(R,M);else if(x!==!1&&v){const X=v.measured.width??v.width??0,Y=v.measured.height??v.height??0;if(X>0&&Y>0){const oe={x:v.internals.positionAbsolute.x+X/2,y:v.internals.positionAbsolute.y+Y/2};G=rR(R,oe)}}G&&(b=G.x,S=G.y,C=rte[G.side])}}const L=Fe(W=>W.transform[2]),P=Fe(W=>W.nodeLookup),T=Fe(W=>{var q;return((q=W.connection.toHandle)==null?void 0:q.nodeId)??null});let _=o,A=a,I=s;if(L>0){const W=ade/L,q=l?k?l.target:l.source:null;let R=null;if(T&&T!==q){const G=P.get(T)??null;G&&(R=G)}if(!R){let G=W;for(const X of P.values()){if(q&&X.id===q||w&&X.id===w.id)continue;const Y=X.measured.width??X.width??0,oe=X.measured.height??X.height??0;if(Y===0||oe===0)continue;const ee=X.internals.positionAbsolute.x,ae=X.internals.positionAbsolute.y,ve=Math.max(ee-o,0,o-(ee+Y)),Se=Math.max(ae-a,0,a-(ae+oe)),be=Math.hypot(ve,Se);be<=G&&(G=be,R=X)}}if(!R&&l&&w){const G=w.measured.width??w.width??0,X=w.measured.height??w.height??0;if(G>0&&X>0){const Y=w.internals.positionAbsolute.x,oe=w.internals.positionAbsolute.y,ee=Math.max(Y-o,0,o-(Y+G)),ae=Math.max(oe-a,0,a-(oe+X));Math.hypot(ee,ae)<=W&&(R=w)}}if(R){const G=R.measured.width??R.width??0,X=R.measured.height??R.height??0;if(G>0&&X>0){const Y=DH({x:R.internals.positionAbsolute.x,y:R.internals.positionAbsolute.y,w:G,h:X},{x:o,y:a}),oe=oR({x:R.internals.positionAbsolute.x,y:R.internals.positionAbsolute.y,w:G,h:X},Y);_=oe.x,A=oe.y,I=rte[oe.side]}}}const V=(u==null?void 0:u.path)==="step",[j]=V?H2({sourceX:b,sourceY:S,sourcePosition:C,targetX:_,targetY:A,targetPosition:I,borderRadius:Hze}):uT({sourceX:b,sourceY:S,sourcePosition:C,targetX:_,targetY:A,targetPosition:I}),H=(l==null?void 0:l.style)??c??void 0,O=Fe(W=>W.rfId),U=k?l==null?void 0:l.markerStart:l==null?void 0:l.markerEnd,z=k?l==null?void 0:l.markerEnd:l==null?void 0:l.markerStart,N=nte(U,O),E=nte(z,O);return m.jsx("path",{d:j,fill:"none",className:"react-flow__connection-path",style:H,markerStart:N,markerEnd:E})},rte={top:me.Top,right:me.Right,bottom:me.Bottom,left:me.Left};function Vze({storeApiRef:e}){const t=vt();return g.useEffect(()=>(e.current=t,()=>{e.current===t&&(e.current=null)}),[t,e]),null}function $ze({wrapperRef:e}){const t=Fe(r=>r.transform[2]),n=e.current;return n&&n.style.setProperty("--rf-zoom",String(t)),null}const Uze=new Set(["INPUT","TEXTAREA","SELECT"]),ide=e=>e?Uze.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1;function Wze(e){const{event:t,selectedNodeIds:n,hasClipboard:r,activeElement:o,onCopySelection:a,onPasteSelection:i}=e;if(!(t.metaKey||t.ctrlKey)||t.shiftKey||t.altKey)return!1;const s=t.key.toLowerCase();return s!=="c"&&s!=="v"||ide(o)?!1:s==="c"?n.length===0||!a?!1:(t.preventDefault(),a([...n]),!0):!r||!i?!1:(t.preventDefault(),i(),!0)}const ote=(e,t)=>{var n;return((n=e==null?void 0:e[t])==null?void 0:n.status)??"idle"},Gze=(e,t)=>{var n;return(n=e==null?void 0:e[t])==null?void 0:n.status},Kze=(e,t)=>{var n,r;return((n=e==null?void 0:e[t])==null?void 0:n.status)==="error"?(r=e[t])==null?void 0:r.error:void 0};function Zze(e,t){var mU,gU;const{mode:n,adapter:r,projectId:o,nodes:a,connectors:i,selectedNodeIds:s,selectedConnectorIds:c,onSelectionChange:l,runtime:u,onPlayNode:d,onNodePositionChange:f,onNodePositionsChange:p,onNodeResize:y,onHtmlNodeFitToContent:k,onMultiResize:w,onNodeNameChange:v,onNodeDescriptionChange:M,onConnectorLabelChange:x,onCreateShapeNode:b,onCreateImageFromFile:S,onRetryImageUpload:C,onCreateHtmlNode:L,onCreateConnector:P,onReconnectConnector:T,onReorderNode:_,onDeleteNode:A,onCopyNode:I,onPasteAt:V,hasClipboard:j,onCopySelection:H,onPasteSelection:O,selectedNodes:U,selectedConnectors:z,onStyleNode:N,onStyleNodePreview:E,onStyleNodes:W,onStyleNodesPreview:q,onStyleConnector:R,onStyleConnectorPreview:G,onRfInit:X,onTidy:Y,onNodeClick:oe,onConnectorClick:ee,onPaneClick:ae,onCreateAndConnectFromPane:ve,pendingEditNodeId:Se,iconPickerOpen:be,onOpenIconPicker:we,onCloseIconPicker:te,onPickIcon:ie,onRequestIconReplace:Te,onPinEndpoint:Ae,onUnpinEndpoint:at,onToggleNodeLock:Qe,activeShape:le,onSelectShape:Q,disableSidebar:ue,statusReport:ge,onNameChange:Me,onDescriptionChange:qe,onDetailChange:re,onIconChange:he,autoFitView:Ie,autoFitViewSignal:He,customIcons:Ue,onExportToCloud:Rt,onRestartDemo:Oe,showToolbar:je,showStyleStrip:Pt,showDetailPanel:sr,showStatusBadges:Dt,showResizeHandles:Dn,showControls:en,showShareMenu:$u,showRestart:Uu,enableKeyboard:da,enableContextMenu:ha,enableDragDrop:Xr,enableImageDrop:gi,enableZoom:fa,enablePan:xr,enableSelection:Yr,enableNodeMove:wr,enableEmbed:Wu}=e,Ve=g.useMemo(()=>Rze({mode:n,showToolbar:je,showStyleStrip:Pt,showDetailPanel:sr,showStatusBadges:Dt,showResizeHandles:Dn,showControls:en,showShareMenu:$u,showRestart:Uu,enableKeyboard:da,enableContextMenu:ha,enableDragDrop:Xr,enableImageDrop:gi,enableZoom:fa,enablePan:xr,enableSelection:Yr,enableNodeMove:wr,enableEmbed:Wu}),[n,je,Pt,sr,Dt,Dn,en,$u,Uu,da,ha,Xr,gi,fa,xr,Yr,wr,Wu]),yt=n==="edit",Qr=g.useRef(Ve);g.useEffect(()=>{Qr.current=Ve},[Ve]);const Po=Ie??(n==="mini"?!0:void 0),qn=g.useMemo(()=>Tze(Po),[Po]),xn=u==null?void 0:u.runs,_o=u==null?void 0:u.statuses,On=(mU=u==null?void 0:u.pendingOverrides)==null?void 0:mU.nodes,Jr=(gU=u==null?void 0:u.pendingOverrides)==null?void 0:gU.connectors,un=g.useRef(null),Gt=g.useRef(null),eo=g.useRef(!1),pa=g.useRef(!1),to=g.useRef(!1),ki=g.useRef(qn);ki.current=qn,g.useEffect(()=>{if(eo.current||!qn.onMount||a.length===0)return;const K=Gt.current;K&&(K.fitView(ih),eo.current=!0)},[a,qn.onMount]);const vi=g.useRef(null),mt=le,xi=Q,ya=g.useRef(new Map),Mr=g.useCallback((K,J)=>(ya.current.set(K,J),()=>{ya.current.get(K)===J&&ya.current.delete(K)}),[]),[br,cr]=g.useState(!1),ma=g.useRef(!1);g.useEffect(()=>{ma.current=br},[br]);const wi=g.useRef(!1),Mi=g.useRef(!1),ga=g.useRef(!1),[wn,Ro]=g.useState(null),ka=g.useRef(null);g.useEffect(()=>{ka.current=wn},[wn]),g.useCallback(()=>{Ro(null)},[]);const va=g.useMemo(()=>Bze(ga),[]),To=g.useRef(null),bi=g.useRef(null),Mn=g.useCallback(K=>{const J=un.current;if(!J){To.current=K;return}const se=To.current;if(se&&se!==K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);de==null||de.removeAttribute("data-connect-source")}if(K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);de==null||de.setAttribute("data-connect-source","true")}To.current=K},[]),tn=g.useCallback(K=>{const J=un.current,se=bi.current;if(se!==K){if(J&&se){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);de==null||de.removeAttribute("data-connect-target")}if(J&&K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);de==null||de.setAttribute("data-connect-target","true")}bi.current=K}},[]),Fn=g.useCallback(()=>{Mn(null),tn(null)},[Mn,tn]);g.useEffect(()=>{if(!br){tn(null);return}const K=J=>{const se=xF(un.current,J.clientX,J.clientY),de=(se==null?void 0:se.getAttribute("data-id"))??null;if(de&&de===To.current){tn(null);return}tn(de)};return document.addEventListener("pointermove",K),()=>{document.removeEventListener("pointermove",K)}},[br,tn]);const[no,jo]=g.useState(null),[Hn,xa]=g.useState(null),Cr=g.useRef(null),st=g.useRef(null),Sr=g.useRef(null),bn=g.useRef(!1);g.useEffect(()=>{Cr.current=mt},[mt]);const Cn=g.useCallback(()=>{xi(null),jo(null),xa(null),Cr.current=null,st.current=null,Sr.current=null,bn.current=!1},[xi]);g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=J=>{var ye,ze;if(J.key!=="Escape"||ide(document.activeElement))return;if(Cr.current){J.preventDefault(),Cn();return}if(ma.current){J.preventDefault(),wi.current=!0,Mi.current=!0;try{(ye=vi.current)==null||ye.getState().cancelConnection()}catch{}document.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,button:0})),cr(!1);return}if(ka.current){J.preventDefault(),Ro(null);return}const se=Ir.current.size>0,de=zo.current.size>0;(se||de)&&(J.preventDefault(),(ze=oo.current)==null||ze.call(oo,[],[]))};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[Cn,Ve.enableKeyboard]),g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=J=>{Wze({event:J,selectedNodeIds:s,hasClipboard:!!j,activeElement:document.activeElement,onCopySelection:H,onPasteSelection:O})};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[s,j,H,O,Ve.enableKeyboard]);const Ci=g.useCallback(K=>{var de,ye;if(!Cr.current)return;const J=K.target;if(!(J!=null&&J.classList.contains("react-flow__pane")))return;const se={x:K.clientX,y:K.clientY};bn.current=!0,st.current=se,Sr.current=se,jo(se),xa(se);try{(ye=(de=K.currentTarget).setPointerCapture)==null||ye.call(de,K.pointerId)}catch{}K.preventDefault(),K.stopPropagation()},[]),Gu=g.useCallback(K=>{if(!bn.current)return;const J={x:K.clientX,y:K.clientY};Sr.current=J,xa(J)},[]),YT=g.useCallback(K=>{var Sa,kU;if(!bn.current)return;bn.current=!1;try{(kU=(Sa=K.currentTarget).releasePointerCapture)==null||kU.call(Sa,K.pointerId)}catch{}const J=st.current,se=Sr.current,de=Cr.current,ye=Gt.current;if(Cn(),!J||!se||!de||!ye)return;const ze=Math.min(J.x,se.x),xe=Math.min(J.y,se.y),Ee=Math.max(J.x,se.x),Je=Math.max(J.y,se.y),ht=Ee-ze,qt=Je-xe,Re=ye.screenToFlowPosition({x:ze,y:xe}),rt=ye.screenToFlowPosition({x:Ee,y:Je}),Ze=rt.x-Re.x,Ei=rt.y-Re.y,Ca=ht<Jee||qt<Jee,Do=Ca?uR[de].width:Ze,Zf=Ca?uR[de].height:Ei;b==null||b(de,Re,{width:Do,height:Zf})},[Cn,b]),ro=g.useRef(!1),Ku=g.useRef(!1),Of=g.useRef(new Map),No=g.useCallback(()=>{var K;pa.current&&(Ku.current||ro.current||(pa.current=!1,(K=Gt.current)==null||K.fitView(ih)))},[]),Ff=g.useCallback(K=>{Ku.current=K,K||No()},[No]);g.useEffect(()=>{var K;if(!to.current){to.current=!0;return}if(ki.current.onExternalNodeChange){if(Ku.current||ro.current){pa.current=!0;return}(K=Gt.current)==null||K.fitView(ih)}},[He]);const Hd=!!_||!!A||!!I||!!V||!!at,[dn,F]=g.useState(null),[B,Z]=g.useState(!1),[$,D]=g.useState(null),[ne,Pe]=g.useState(null),ke=g.useRef(null),dt=g.useRef(null);g.useEffect(()=>{if(!dn)return;const K=dt.current;if(!K)return;const J=new MouseEvent("contextmenu",{clientX:dn.x,clientY:dn.y,bubbles:!0,cancelable:!0,button:2,buttons:2});K.dispatchEvent(J)},[dn]);const Tt=g.useCallback(K=>{const J=ke.current;!J||!_||_(J,K)},[_]),Sn=g.useCallback(()=>{const K=ke.current;!K||!A||A(K)},[A]),Kt=g.useCallback(()=>{const K=ke.current;!K||!I||I(K)},[I]),Lr=g.useCallback(()=>{const K=ke.current;!K||!Te||Te(K)},[Te]),wa=g.useCallback(()=>{if(!Qe)return;const K=ke.current,J=K?[K]:[...s];J.length!==0&&Qe(J)},[Qe,s]);g.useCallback((K,J,se,de,ye)=>{Qr.current.enableContextMenu&&(ke.current=null,Z(!1),D(null),Pe({connectorId:K,kind:J,pinned:se}),F({x:de,y:ye}))},[]);const Zu=g.useCallback(()=>{const K=ne;!K||!at||at(K.connectorId,K.kind)},[ne,at]),_e=g.useCallback(()=>{if(!V)return;const K=dn,J=Gt.current;if(!K||!J)return;const se=J.screenToFlowPosition({x:K.x,y:K.y});V(se)},[dn,V]),nt=typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||""),Ne=nt?"⌘C":"Ctrl+C",it=nt?"⌘V":"Ctrl+V",jt=g.useMemo(()=>new Set(s),[s]),Bn=g.useMemo(()=>{const K=new Set;for(const J of a)J.data.locked===!0&&K.add(J.id);return K},[a]),Vn=g.useMemo(()=>new Set(c),[c]),QT=g.useMemo(()=>{if(s.length<2)return[];const K=On,J=[];for(const se of s){const de=a.find(Ee=>Ee.id===se);if(!de)continue;const ye=K==null?void 0:K[se],ze=(ye==null?void 0:ye.data)??{},xe=de.data;J.push({id:se,position:(ye==null?void 0:ye.position)??de.position,data:{width:ze.width??xe.width,height:ze.height??xe.height,locked:ze.locked??xe.locked}})}return J},[a,On,s]),JT=U??[],Si=g.useMemo(()=>{const K=ye=>{const ze=yt?void 0:Of.current.get(ye.id),xe={id:ye.id,type:ye.type,position:ze??ye.position,data:{...ye.data,projectId:o,onRetryUpload:C,status:Gze(xn,ye.id),errorMessage:Kze(xn,ye.id),statusReport:_o==null?void 0:_o[ye.id],onPlay:d,onResize:y,setResizing:Ff,onFitToContent:ye.type==="htmlNode"?k:void 0,onNameChange:(()=>{if(yt&&!(ye.type==="shapeNode"&&ye.data.shape==="ellipse"))return v})(),onDescriptionChange:(()=>{if(yt){if(ye.type==="shapeNode"){const Ee=ye.data.shape;return Ee==="rectangle"||Ee==="ellipse"||Ee==="sticky"?M:void 0}if(!(ye.type==="imageNode"||ye.type==="iconNode"))return M}})(),onIconChange:(()=>{if(yt&&!(ye.type!=="playNode"&&ye.type!=="stateNode"))return he})(),autoEditOnMount:Se===ye.id?!0:void 0},selected:jt.has(ye.id)};return ye.data.width!==void 0&&(xe.width=ye.data.width),ye.data.height!==void 0&&(xe.height=ye.data.height),jt.has(ye.id)||(xe.connectable=!1),ye.data.locked===!0&&(xe.draggable=!1),xe},J=a.map(ye=>K(zze(ye,On==null?void 0:On[ye.id]))),se=new Set(a.map(ye=>ye.id)),de=[];if(On)for(const[ye,ze]of Object.entries(On)){if(se.has(ye))continue;const xe=ze;typeof xe.type!="string"||!xe.position||!xe.data||de.push(K({...xe,id:ye}))}return[...J,...de]},[o,a,jt,xn,_o,d,y,k,Ff,On,v,M,he,C,Se,yt]),[ej,tj]=g.useState(Si);g.useEffect(()=>{ro.current||Ku.current||tj(Si)},[Si]),g.useEffect(()=>{Bd.current=ej},[ej]);const Ir=g.useRef(jt);g.useEffect(()=>{Ir.current=jt},[jt]);const oo=g.useRef(l);g.useEffect(()=>{oo.current=l},[l]);const zo=g.useRef(Vn);g.useEffect(()=>{zo.current=Vn},[Vn]);const Bd=g.useRef(Si),Li=g.useRef(!1),Hf=g.useRef(new Set),Bf=g.useRef(new Set),nj=g.useRef(new Set),rj=g.useRef(new Set),Ma=g.useRef(null),bde=g.useCallback(K=>{var rt;const J=Li.current?nj.current:(rt=Ma.current)!=null&&rt.shift?Ma.current.nodeIds:null,se=J&&J.size>0?K.filter(Ze=>Ze.type!=="select"?!0:!(Ze.selected===!1&&J.has(Ze.id))):K,de=new Set;for(const Ze of se)Ze.type==="select"&&de.add(Ze.id);const ye=Mie(se,Bd.current),ze=Ir.current,xe=Li.current||ze.size===0?ye:ye.map(Ze=>ze.has(Ze.id)&&!de.has(Ze.id)&&!Ze.selected?{...Ze,selected:!0}:Ze);if(Bd.current=xe,tj(xe),de.size===0)return;if(Li.current){for(const Ze of se)Ze.type==="select"&&(Ze.selected?Hf.current.add(Ze.id):Hf.current.delete(Ze.id));return}const Ee=oo.current;if(!Ee)return;const Je=xe.filter(Ze=>Ze.selected).map(Ze=>Ze.id),ht=Ir.current;ht.size===Je.length&&Je.every(Ze=>ht.has(Ze))||(Ir.current=new Set(Je),Ee(Je,[...zo.current]))},[]),Vf=g.useRef([]),Cde=g.useCallback(K=>{var qt;const J=Li.current?rj.current:(qt=Ma.current)!=null&&qt.shift?Ma.current.edgeIds:null,se=J&&J.size>0?K.filter(Re=>Re.type!=="select"?!0:!(Re.selected===!1&&J.has(Re.id))):K,de=new Set;for(const Re of se)Re.type==="select"&&de.add(Re.id);if(de.size===0)return;if(Li.current){for(const Re of se)Re.type==="select"&&(Re.selected?Bf.current.add(Re.id):Bf.current.delete(Re.id));return}const ye=oo.current;if(!ye)return;const xe=bie(se,Vf.current).filter(Re=>Re.selected).map(Re=>Re.id),Ee=zo.current;Ee.size===xe.length&&xe.every(Re=>Ee.has(Re))||(zo.current=new Set(xe),ye([...Ir.current],xe))},[]),Sde=g.useCallback(K=>{Li.current=!0;const J=Ma.current,se=(J==null?void 0:J.shift)??(K.shiftKey||K.metaKey||K.ctrlKey);nj.current=se?new Set((J==null?void 0:J.nodeIds)??Ir.current):new Set,rj.current=se?new Set((J==null?void 0:J.edgeIds)??zo.current):new Set,Hf.current=new Set(nj.current),Bf.current=new Set(rj.current)},[]),Lde=g.useCallback(()=>{Li.current=!1,Ma.current=null;const K=oo.current;if(!K)return;const J=[...Hf.current],se=new Set(J),de=new Set(Bf.current);for(const Je of Vf.current)se.has(Je.source)&&se.has(Je.target)&&de.add(Je.id);const ye=Ir.current,ze=zo.current,xe=ye.size===se.size&&J.every(Je=>ye.has(Je)),Ee=ze.size===de.size&&[...de].every(Je=>ze.has(Je));xe&&Ee||(Ir.current=new Set(J),zo.current=new Set(de),K(J,[...de]))},[]),Ide=g.useCallback(K=>{if(Ma.current=null,Cr.current||K.button!==0)return;const J=K.target;J!=null&&J.classList.contains("react-flow__pane")&&(Ma.current={shift:K.shiftKey||K.metaKey||K.ctrlKey,nodeIds:new Set(Ir.current),edgeIds:new Set(zo.current)})},[]),Ede=g.useCallback(K=>{if(!Qr.current.enableContextMenu||Ir.current.size<2)return;const se=K.target;se!==dt.current&&(se!=null&&se.closest(".seeflow-connector-endpoint-dot")||(K.preventDefault(),K.stopPropagation(),ke.current=null,Z(!0),D(null),Pe(null),F({x:K.clientX,y:K.clientY})))},[]),Ade=g.useCallback(K=>{const J=K.dataTransfer;if(!J)return;const se=J.types?Array.from(J.types):[],de=se.includes("Files"),ye=se.includes(zJ),ze=de&&!!S&&Ve.enableImageDrop,xe=ye&&!!L&&Ve.enableDragDrop;if(!(!ze&&!xe)){K.preventDefault();try{J.dropEffect="copy"}catch{}}},[S,L,Ve.enableImageDrop,Ve.enableDragDrop]),Pde=g.useCallback(K=>{const J=K.dataTransfer;if((J!=null&&J.types?Array.from(J.types):[]).includes(zJ)&&L&&Ve.enableDragDrop){K.preventDefault();const ze=Gt.current;if(!ze)return;const xe=ze.screenToFlowPosition({x:K.clientX,y:K.clientY});L({position:xe});return}if(!S||!Ve.enableImageDrop)return;const ye={x:K.clientX,y:K.clientY};K.preventDefault(),Vke({dataTransfer:J,clientPos:ye,rfInstance:Gt.current,computeDims:$ke,dispatch:S})},[S,L,Ve.enableImageDrop,Ve.enableDragDrop]),sU=!!T,cU=Vn.size===1?[...Vn][0]:null,oj=g.useMemo(()=>{const K=Ee=>{const Je=ote(xn,Ee.source)==="running"||ote(xn,Ee.target)==="running",ht=Vn.has(Ee.id),qt=X8e(Ee,Je,ht);ht&&(qt.selected=!0);const Re=sU&&Ee.id===cU,rt=Re?{...qt,reconnectable:!0}:qt;return{...rt,data:{...rt.data,onLabelChange:yt?x:void 0,reconnectable:Re,registerEditHandle:Mr}}},J=new Set(i.map(Ee=>Ee.id)),se=i.map(Ee=>K(Dze(Ee,Jr==null?void 0:Jr[Ee.id]))),de=[];if(Jr)for(const[Ee,Je]of Object.entries(Jr)){if(J.has(Ee))continue;const ht=Je;typeof ht.source!="string"||typeof ht.target!="string"||typeof ht.kind!="string"||de.push(K({...ht,id:Ee}))}const ye=[...se,...de],ze=[],xe=[];for(const Ee of ye)Vn.has(Ee.id)?xe.push(Ee):ze.push(Ee);return[...ze,...xe]},[i,xn,Vn,cU,Jr,x,sU,Mr,yt]);g.useEffect(()=>{Vf.current=oj},[oj]);const _de=g.useCallback(()=>{const K=Gt.current,J=Bd.current;if(J.length<2)return;const se=J.map(Re=>{var Do;const rt=(Do=K==null?void 0:K.getInternalNode(Re.id))==null?void 0:Do.measured,Ze=Re.data,Ei=(rt==null?void 0:rt.width)??Ze.width??200,Ca=(rt==null?void 0:rt.height)??Ze.height??120;return{id:Re.id,width:Ei,height:Ca,position:Re.position}}),de=Vf.current.map(Re=>({source:Re.source,target:Re.target})),ye=eae(se,de);let ze=Number.POSITIVE_INFINITY,xe=Number.POSITIVE_INFINITY,Ee=Number.POSITIVE_INFINITY,Je=Number.POSITIVE_INFINITY;for(const Re of se){Re.position.x<ze&&(ze=Re.position.x),Re.position.y<xe&&(xe=Re.position.y);const rt=ye.get(Re.id);rt&&(rt.x<Ee&&(Ee=rt.x),rt.y<Je&&(Je=rt.y))}const ht=Number.isFinite(ze)&&Number.isFinite(Ee)?ze-Ee:0,qt=Number.isFinite(xe)&&Number.isFinite(Je)?xe-Je:0;tj(Re=>Re.map(rt=>{const Ze=ye.get(rt.id);return Ze?{...rt,position:{x:Ze.x+ht,y:Ze.y+qt}}:rt}))},[]),$f=Y??(yt?void 0:_de),Uf=g.useRef(!1),lU=g.useRef(null),Rde=g.useCallback(K=>{var Ee;if(!yt||!P)return;const{source:J,target:se}=K;if(!J||!se||J===se)return;Uf.current=!0;const de=((Ee=lU.current)==null?void 0:Ee.nodeId)??null,ye=de!==null&&de===se&&de!==J;P(ye?se:J,ye?J:se)},[P,yt]),aj=g.useCallback(K=>{const J=se=>{if(!se)return!1;const de=Bd.current.find(ye=>ye.id===se);return de?de.type==="shapeNode"&&de.data.shape==="text":!1};return!J(K.source)&&!J(K.target)},[]),Tde=g.useCallback((K,J)=>{var qt;cr(!1),Fn();const se=Uf.current;if(Uf.current=!1,se||ga.current)return;if(wi.current){wi.current=!1;return}if(!P)return;const de=(qt=J.fromNode)==null?void 0:qt.id,ye=J.fromHandle;if(!de||!ye)return;const ze=ete(K);if(!ze)return;const xe=xF(un.current,ze.clientX,ze.clientY);if(!xe)return;const Ee=xe.getAttribute("data-id");if(!Ee||Ee===de||!aj({source:de,target:Ee,sourceHandle:null,targetHandle:null}))return;let Je;const ht=Gt.current;if(ht){const Re=ht.getInternalNode(Ee);if(Re){const rt=Re.measured.width??Re.width??0,Ze=Re.measured.height??Re.height??0;if(rt>0&&Ze>0){const Ei=ht.screenToFlowPosition({x:ze.clientX,y:ze.clientY});Je=DH({x:Re.internals.positionAbsolute.x,y:Re.internals.positionAbsolute.y,w:rt,h:Ze},Ei)}}}P(de,Ee,Je?{targetPin:Je}:void 0)},[P,Fn,aj]),Wf=g.useRef(!1),jde=g.useCallback((K,J)=>{if(!T)return;const{source:se,target:de,sourceHandle:ye,targetHandle:ze}=J;if(!se||!de||se===de)return;const xe={};if(se!==K.source&&(xe.source=se),de!==K.target&&(xe.target=de),typeof ye=="string"&&ye!==K.sourceHandle&&(xe.sourceHandle=ye),typeof ze=="string"&&ze!==K.targetHandle&&(xe.targetHandle=ze),xe.source===void 0&&xe.target===void 0&&xe.sourceHandle===void 0&&xe.targetHandle===void 0)return;(xe.source!==void 0||xe.sourceHandle!==void 0)&&(xe.sourceHandleAutoPicked=!1),(xe.target!==void 0||xe.targetHandle!==void 0)&&(xe.targetHandleAutoPicked=!1);const Ee=Gt.current;if(!(xe.source===void 0&&xe.target===void 0)&&Ee){const ht=xe.source!==void 0?"source":"target",qt=tte(ht,K.source,K.target,K.data,Re=>Ee.getInternalNode(Re)??null);qt&&(ht==="source"?xe.targetPin=qt:xe.sourcePin=qt)}Wf.current=!0,T(K.id,xe)},[T]),Nde=g.useCallback((K,J,se,de)=>{var Zf;cr(!1),Fn(),ga.current=!1;const ye=Wf.current;if(Wf.current=!1,ye)return;if(Mi.current){Mi.current=!1;return}if(!T)return;const ze=ete(K);let xe=((Zf=de.toNode)==null?void 0:Zf.id)??null;if(!xe&&ze){const Sa=xF(un.current,ze.clientX,ze.clientY);xe=(Sa==null?void 0:Sa.getAttribute("data-id"))??null}const Ee=se==="source"?"target":"source",Je=Nze(Ee,J.source,J.target,xe);if(Je==="no-op"||Je==="self-loop"||!ze)return;const ht=Gt.current;if(!ht)return;const qt=Je==="pin-own"?Ee==="source"?J.source:J.target:xe,Re=ht.getInternalNode(qt);if(!Re)return;const rt=Re.measured.width??Re.width??0,Ze=Re.measured.height??Re.height??0;if(rt===0||Ze===0)return;const Ei=ht.screenToFlowPosition({x:ze.clientX,y:ze.clientY}),Ca=DH({x:Re.internals.positionAbsolute.x,y:Re.internals.positionAbsolute.y,w:rt,h:Ze},Ei);if(Je==="pin-own"){if(!Ae)return;Ae(J.id,Ee,Ca);return}const Do=tte(Ee,J.source,J.target,J.data,Sa=>ht.getInternalNode(Sa)??null);Ee==="source"?T(J.id,{source:xe,sourceHandle:null,sourceHandleAutoPicked:!1,sourcePin:Ca,...Do?{targetPin:Do}:{}}):T(J.id,{target:xe,targetHandle:null,targetHandleAutoPicked:!1,targetPin:Ca,...Do?{sourcePin:Do}:{}})},[T,Fn,Ae]),Ii=g.useMemo(()=>{var Ee;if(!no||!Hn)return null;const K=(Ee=un.current)==null?void 0:Ee.getBoundingClientRect(),J=(K==null?void 0:K.left)??0,se=(K==null?void 0:K.top)??0,de=Math.min(no.x,Hn.x),ye=Math.min(no.y,Hn.y),ze=Math.abs(Hn.x-no.x),xe=Math.abs(Hn.y-no.y);return{left:de-J,top:ye-se,width:ze,height:xe}},[no,Hn]),zde=mt?nce(mt):"",Dde=mt?rce(mt):void 0,qde=mt==="text",[uU,dU]=g.useState(!1),[Ode,Gf]=g.useState(!1),[Fde,hU]=g.useState(!1),ba=Eze({projectId:o,getReactFlow:()=>Gt.current});g.useImperativeHandle(t,()=>({exportPdf:ba.exportPdf,exportPng:ba.exportPng,openEmbedDialog:()=>hU(!0),capturePreview:ba.capturePreview}),[ba.exportPdf,ba.exportPng,ba.capturePreview]),g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=de=>{if(!de)return!1;const ye=de.tagName;return ye==="INPUT"||ye==="TEXTAREA"||ye==="SELECT"?!0:de instanceof HTMLElement&&de.isContentEditable},J=de=>{de.code==="Space"&&(K(document.activeElement)||(de.preventDefault(),dU(!0)))},se=de=>{de.code==="Space"&&(dU(!1),Gf(!1))};return window.addEventListener("keydown",J),window.addEventListener("keyup",se),()=>{window.removeEventListener("keydown",J),window.removeEventListener("keyup",se)}},[Ve.enableKeyboard]);const Kf=g.useCallback(K=>{if(K.length!==0){if(!yt){const J=Of.current;for(const se of K)J.set(se.id,{x:se.position.x,y:se.position.y});return}if(K.length===1){const J=K[0];J&&f&&f(J.id,{x:J.position.x,y:J.position.y});return}if(p){p(K.map(J=>({id:J.id,position:{x:J.position.x,y:J.position.y}})));return}if(f)for(const J of K)f(J.id,{x:J.position.x,y:J.position.y})}},[f,p,yt]),Hde=g.useCallback((K,J,se)=>{ro.current=!1,Kf(se),No()},[Kf,No]),Bde=g.useCallback(()=>{ro.current=!0},[]),Vde=g.useCallback((K,J)=>{ro.current=!1,Kf(J),No()},[Kf,No]),$de=g.useCallback((K,J)=>{oe==null||oe(J.id)},[oe]),Ude=g.useCallback(K=>{ae==null||ae()},[ae]),Wde=g.useCallback((K,J)=>{ee==null||ee(J.id)},[ee]),fU=mt?"crosshair":uU?Ode?"grabbing":"grab":void 0,pU=s[0],yU=c[0],Gde=pU?a.find(K=>K.id===pU)??null:null,Kde=yU?i.find(K=>K.id===yU)??null:null,Zde=o??null,Xde=Ve.showDetailPanel&&!ue,Yde=g.useMemo(()=>({custom:Ue??{}}),[Ue]);return m.jsx(VMe,{value:Yde,children:m.jsx("div",{"data-testid":"seeflow-canvas","data-mode":n,ref:un,className:"seeflow-canvas-root sf:relative sf:h-full sf:w-full",style:fU?{cursor:fU}:void 0,onPointerDownCapture:Ide,onPointerDown:K=>{uU&&Gf(!0),Ci(K)},onPointerMove:Gu,onPointerUp:K=>{Gf(!1),YT(K)},onPointerCancel:()=>{bn.current=!1,st.current=null,Sr.current=null,jo(null),xa(null),Gf(!1)},onContextMenuCapture:Ede,onDragOver:Ade,onDrop:Pde,children:m.jsxs($9e,{containerRef:un,children:[m.jsxs(h8e,{nodes:ej,edges:oj,onNodesChange:bde,nodeTypes:qze,edgeTypes:Oze,proOptions:{hideAttribution:!0},fitView:!0,minZoom:n==="mini"?.05:.5,nodesDraggable:(yt?!!f:!0)&&!mt&&Ve.enableNodeMove,nodesConnectable:yt&&!!P&&!mt,deleteKeyCode:yt?["Backspace","Delete"]:null,zoomOnScroll:Ve.enableZoom,zoomOnPinch:Ve.enableZoom,className:br?"seeflow-connecting":void 0,onConnect:yt?Rde:void 0,isValidConnection:aj,onConnectStart:(K,J)=>{cr(!0),Uf.current=!1,lU.current={nodeId:J.nodeId??null,handleType:J.handleType??null},Mn(J.nodeId??null)},onConnectEnd:Tde,onReconnect:yt&&T?jde:void 0,onReconnectStart:(K,J,se)=>{cr(!0),Wf.current=!1,ga.current=!0;const de=se==="source"?J.source:J.target;Mn(de)},onReconnectEnd:Nde,connectionLineComponent:va,connectionLineStyle:{strokeWidth:2},connectionRadius:32,reconnectRadius:10,edgesReconnectable:!1,elevateNodesOnSelect:!1,elementsSelectable:!mt&&Ve.enableSelection,selectNodesOnDrag:!1,nodeClickDistance:5,selectionOnDrag:!mt&&Ve.enableSelection,panOnDrag:mt?!1:Ve.enablePan?[1,2]:!1,selectionMode:rd.Partial,selectionKeyCode:null,multiSelectionKeyCode:mt?null:["Meta","Shift"],panActivationKeyCode:mt?null:"Space",onSelectionStart:Sde,onSelectionEnd:Lde,defaultEdgeOptions:Fze,zoomOnDoubleClick:!1,onInit:K=>{Gt.current=K;const J=un.current;J&&J.style.setProperty("--rf-zoom",String(K.getZoom())),!eo.current&&qn.onMount&&a.length>0&&(K.fitView(ih),eo.current=!0),X==null||X(K)},onMove:(K,J)=>{ka.current&&Ro(null);const se=un.current;se&&se.style.setProperty("--rf-zoom",String(J.zoom))},onEdgesChange:Cde,onNodeDragStart:()=>{ro.current=!0},onNodeDragStop:Hde,onSelectionDragStart:Bde,onSelectionDragStop:Vde,onNodeClick:$de,onEdgeClick:Wde,onEdgeDoubleClick:(K,J)=>{var se;(se=ya.current.get(J.id))==null||se()},onPaneClick:Ude,onNodeContextMenu:Ve.enableContextMenu&&Hd?(K,J)=>{K.preventDefault(),ke.current=J.id,Z(!0),D(J.type??null),Pe(null),F({x:K.clientX,y:K.clientY})}:void 0,onPaneContextMenu:Ve.enableContextMenu&&V?K=>{K.preventDefault(),ke.current=null,Z(!1),D(null),Pe(null),F({x:K.clientX,y:K.clientY})}:void 0,children:[m.jsx(Vze,{storeApiRef:vi}),m.jsx($ze,{wrapperRef:un}),m.jsx(M8e,{gap:12,size:.6}),Ve.showControls?m.jsxs(A8e,{showInteractive:!1,showFitView:!1,children:[m.jsx(S1,{"data-testid":"controls-fit-view","aria-label":"Fit view",title:"Fit view",disabled:a.length===0,onClick:()=>{var K;(K=Gt.current)==null||K.fitView(ih)},children:m.jsx(j1,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})}),m.jsx(S1,{"data-testid":"controls-tidy","aria-label":"Tidy layout (⌘⇧L)",title:"Tidy layout (⌘⇧L)",disabled:!$f,onClick:()=>$f==null?void 0:$f(),children:m.jsx(Uh,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})})]}):null,Ve.showResizeHandles?m.jsx(CNe,{selectedNodes:QT,onMultiResize:w}):null,Ve.showToolbar&&b||Ve.showStyleStrip&&N&&R?m.jsx(cd,{position:"top-left",children:m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-2",children:[Ve.showToolbar&&b?m.jsx(rEe,{activeShape:mt,onSelectShape:xi,iconPickerOpen:be??!1,onOpenIconPicker:we,onCloseIconPicker:te,onPickIcon:ie}):null,Ve.showStyleStrip&&N&&R?m.jsx(LNe,{nodes:JT,connectors:z??[],onStyleNode:N,onStyleNodePreview:E,onStyleNodes:W,onStyleNodesPreview:q,onStyleConnector:R,onStyleConnectorPreview:G,onRequestIconReplace:Te}):null]})}):null,Ve.showShareMenu||Ve.showRestart&&Oe?m.jsx(cd,{position:"top-right",children:m.jsxs("div",{className:"sf:flex sf:items-center sf:gap-1",children:[Ve.showRestart&&Oe?m.jsx(xNe,{onRestartDemo:Oe}):null,Ve.showShareMenu?m.jsx(vNe,{mode:n==="mini"?"view":n,projectId:o,enableEmbed:Ve.enableEmbed,onDownloadPdf:ba.exportPdf,onDownloadPng:ba.exportPng,onExportToCloud:Rt,embedOpen:Fde,onEmbedOpenChange:hU}):null]})}):null]}),Ii?m.jsx("div",{"data-testid":"canvas-draw-ghost","data-ghost-shape":mt??void 0,"aria-hidden":!0,className:ce("sf:pointer-events-none sf:absolute sf:z-10",zde,qde?"sf:rounded-sm sf:border sf:border-dashed sf:border-muted-foreground/40":""),style:{...Dde,left:Ii.left,top:Ii.top,width:Ii.width,height:Ii.height},children:(()=>{const K=mt?v$[mt]:void 0;return K?m.jsx(K,{width:Ii.width,height:Ii.height,borderColor:ct(void 0,"node").borderColor,backgroundColor:ef,borderSize:o$}):null})()}):null,Ve.enableContextMenu&&Hd?m.jsxs(ILe,{onOpenChange:K=>{K||(F(null),ke.current=null,D(null),Pe(null))},children:[m.jsx(ELe,{asChild:!0,children:m.jsx("div",{ref:dt,"data-testid":"node-context-menu-trigger","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(dn==null?void 0:dn.x)??0,top:(dn==null?void 0:dn.y)??0,width:0,height:0}})}),m.jsxs(Dle,{"data-testid":"node-context-menu",children:[ne!=null&&ne.pinned&&at?m.jsx(_r,{"data-testid":"connector-endpoint-context-menu-unpin",onSelect:Zu,children:"Unpin"}):null,B&&I?m.jsxs(_r,{"data-testid":"node-context-menu-copy",onSelect:Kt,children:["Copy",m.jsx(XH,{children:Ne})]}):null,V?m.jsxs(_r,{"data-testid":"node-context-menu-paste",disabled:!j,onSelect:_e,children:["Paste",m.jsx(XH,{children:it})]}):null,B&&(I||V)&&($==="iconNode"&&Te||_||A)?m.jsx(Mh,{}):null,B&&$==="iconNode"&&Te?m.jsx(_r,{"data-testid":"node-context-menu-change-icon",onSelect:Lr,children:"Change icon"}):null,B&&$==="iconNode"&&Te&&(_||A)?m.jsx(Mh,{}):null,B&&_?m.jsxs(m.Fragment,{children:[m.jsx(_r,{"data-testid":"node-context-menu-to-front",onSelect:()=>Tt({op:"toFront"}),children:"Bring to front"}),m.jsx(_r,{"data-testid":"node-context-menu-forward",onSelect:()=>Tt({op:"forward"}),children:"Bring forward"}),m.jsx(_r,{"data-testid":"node-context-menu-backward",onSelect:()=>Tt({op:"backward"}),children:"Send backward"}),m.jsx(_r,{"data-testid":"node-context-menu-to-back",onSelect:()=>Tt({op:"toBack"}),children:"Send to back"})]}):null,B&&_&&(Qe||A)?m.jsx(Mh,{}):null,B&&Qe?(()=>{const K=ke.current,J=K?[K]:s,se=J.length>0&&J.every(de=>Bn.has(de))?"Unlock":"Lock";return m.jsx(_r,{"data-testid":"node-context-menu-toggle-lock",onSelect:wa,disabled:J.length===0,children:se})})():null,B&&Qe&&A?m.jsx(Mh,{}):null,B&&A?m.jsx(_r,{"data-testid":"node-context-menu-delete",onSelect:Sn,disabled:ke.current?Bn.has(ke.current):!1,children:"Delete"}):null]})]}):null,ve?m.jsxs(Nd,{open:!!wn,onOpenChange:K=>{K||Ro(null)},children:[m.jsx(U9e,{asChild:!0,children:m.jsx("div",{"data-testid":"drop-popover-anchor","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(wn==null?void 0:wn.clientX)??0,top:(wn==null?void 0:wn.clientY)??0,width:0,height:0}})}),m.jsx(Fu,{"data-testid":"drop-popover",align:"start",side:"bottom",sideOffset:4,className:"sf:w-auto sf:p-1",onOpenAutoFocus:K=>{K.preventDefault()},children:m.jsx("div",{role:"menu","aria-label":"Create connected node",className:"sf:flex sf:flex-col sf:gap-0.5",children:nEe.map(({shape:K,label:J,Icon:se})=>m.jsxs("button",{type:"button",role:"menuitem","data-testid":`drop-popover-shape-${K}`,onClick:()=>{const de=wn;de&&(ve({sourceNodeId:de.sourceNodeId,position:{x:de.flowX,y:de.flowY},shape:K}),Ro(null))},className:ce("sf:flex sf:items-center sf:gap-2 sf:rounded-sm sf:px-2 sf:py-1.5 sf:text-left sf:text-sm","sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus:bg-accent sf:focus:text-accent-foreground sf:focus:outline-hidden"),children:[m.jsx(se,{className:"sf:h-4 sf:w-4 sf:text-muted-foreground","aria-hidden":"true"}),m.jsx("span",{children:J})]},K))})})]}):null,Xde?m.jsx(Xje,{demoId:Zde,node:Gde,connector:Kde,adapter:r??null,statusReport:ge,onNameChange:Me,onDescriptionChange:qe,onDetailChange:re,onIconChange:he,onClose:()=>{var K;(K=oo.current)==null||K.call(oo,[],[])}}):null]})})})}const Xze=g.forwardRef(Zze);function Yze({open:e,onOpenChange:t,onCreated:n}){const[r,o]=g.useState(""),[a,i]=g.useState(null),[s,c]=g.useState(!1);g.useEffect(()=>{e&&(o(""),i(null),c(!1))},[e]);const l=r.trim(),u=l.length>0&&!s,d=async f=>{if(f.preventDefault(),!!u){c(!0),i(null);try{const p=await Ife({name:l});n(p),t(!1)}catch(p){i(p instanceof Error?p.message:String(p)),c(!1)}}};return m.jsx(RT,{open:e,onOpenChange:t,children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"create-project-dialog",onOpenAutoFocus:f=>{f.preventDefault();const p=document.querySelector('[data-testid="create-project-name-input"]');p==null||p.focus()},children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Create new project"}),m.jsxs(Ef,{children:["The project will be created at ",m.jsx("code",{children:"~/.seeflow/<slug>"}),"."]})]}),m.jsxs("form",{onSubmit:d,className:"flex flex-col gap-4",children:[m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Project name"}),m.jsx("input",{type:"text",required:!0,autoComplete:"off",spellCheck:!1,value:r,onChange:f=>o(f.target.value),"data-testid":"create-project-name-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"})]}),a?m.jsx("div",{role:"alert","data-testid":"create-project-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:a}):null,m.jsxs(fd,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:s,children:"Cancel"}),m.jsx(Ft,{type:"submit",disabled:!u,"data-testid":"create-project-submit",children:s?"Creating…":"Create project"})]})]})]})})}const gB="seeflow:navigate",Qze=e=>(window.addEventListener("popstate",e),window.addEventListener(gB,e),()=>{window.removeEventListener("popstate",e),window.removeEventListener(gB,e)}),ate=()=>window.location.pathname,Jze=()=>g.useSyncExternalStore(Qze,ate,ate),md=e=>{e!==window.location.pathname&&(window.history.pushState({},"",e),window.dispatchEvent(new Event(gB)))};function eDe({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){const[o,a]=g.useState(!1),[i,s]=g.useState(!1),[c,l]=g.useState(null),[u,d]=g.useState(!1),[f,p]=g.useState(null);g.useEffect(()=>{const x=b=>{b.key==="k"&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),a(S=>!S))};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[]);const y=e.find(x=>x.slug===t),k=x=>{n==null||n(x),md(`/d/${x.slug}`)},w=x=>{l(x),p(null)},v=()=>{u||(l(null),p(null))},M=async()=>{if(c){d(!0),p(null);try{await Lfe(c.id);const x=c.id;l(null),r==null||r(x)}catch(x){p(x instanceof Error?x.message:String(x))}finally{d(!1)}}};return m.jsxs(m.Fragment,{children:[m.jsxs(Nd,{open:o,onOpenChange:a,children:[m.jsx(kf,{asChild:!0,children:m.jsxs(Ft,{type:"button",variant:"outline",size:"sm","aria-label":"Switch demo","aria-expanded":o,className:"gap-2","data-testid":"project-switcher-trigger",children:[m.jsx("span",{className:"max-w-[180px] truncate text-sm",children:(y==null?void 0:y.name)??"Select demo"}),m.jsx(jce,{children:"⌘K"}),m.jsx(zh,{className:"h-3.5 w-3.5 opacity-60"})]})}),m.jsx(Fu,{align:"end",sideOffset:6,className:"w-[320px] p-0","data-testid":"project-switcher-popover",children:m.jsxs(Ace,{children:[m.jsx(Pce,{placeholder:"Search demos..."}),m.jsxs(_ce,{children:[m.jsx(Rce,{children:"No demos."}),e.length>0?m.jsx(WH,{heading:"Demos",children:e.map(x=>m.jsxs(GH,{value:`${x.name} ${x.slug}`,onSelect:()=>{a(!1),md(`/d/${x.slug}`)},className:"group flex items-center justify-between gap-2",children:[m.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[m.jsx("span",{className:"font-medium",children:x.name}),m.jsx("span",{className:"w-full truncate text-xs text-muted-foreground",children:x.repoPath})]}),m.jsx("button",{type:"button","aria-label":`Unregister ${x.name}`,className:"shrink-0 rounded p-0.5 opacity-0 transition-opacity hover:text-destructive group-hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",onClick:b=>{b.stopPropagation(),a(!1),w(x)},children:m.jsx(a2,{className:"h-3.5 w-3.5"})})]},x.id))}):null,e.length>0?m.jsx(Tce,{}):null,m.jsx(WH,{children:m.jsxs(GH,{value:"+ create new project",onSelect:()=>{a(!1),s(!0)},"data-testid":"project-switcher-create",className:"flex items-center gap-2 text-sm",children:[m.jsx(Yh,{className:"h-4 w-4 opacity-70"}),m.jsx("span",{className:"font-medium",children:"Create new project"})]})})]})]})})]}),m.jsx(Yze,{open:i,onOpenChange:s,onCreated:k}),m.jsx(RT,{open:c!==null,onOpenChange:x=>{x||v()},children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"unregister-project-dialog",children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Unregister project?"}),m.jsxs(Ef,{children:["This removes ",m.jsx("strong",{children:c==null?void 0:c.name})," from SeeFlow. Your files at"," ",m.jsx("code",{className:"text-xs",children:c==null?void 0:c.repoPath})," will not be deleted."]})]}),f?m.jsx("div",{role:"alert","data-testid":"unregister-project-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:f}):null,m.jsxs(fd,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:v,disabled:u,children:"Cancel"}),m.jsx(Ft,{type:"button",variant:"destructive",onClick:M,disabled:u,"data-testid":"unregister-project-confirm",children:u?"Unregistering…":"Unregister"})]})]})})]})}function tDe({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){return m.jsxs("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border bg-background px-4",children:[m.jsxs("button",{type:"button",onClick:()=>md("/"),style:{display:"flex",alignItems:"center",gap:6,fontWeight:700,fontSize:16,letterSpacing:"-0.02em",background:"none",border:"none",cursor:"pointer",padding:0},children:[m.jsx(c2,{size:20,strokeWidth:2,className:"text-emerald-400"}),"SeeFlow"]}),m.jsx("div",{className:"flex items-center gap-3",children:m.jsx(eDe,{demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r})})]})}const nDe=e=>{const[t,n]=g.useState(null),[r,o]=g.useState(e!==null),[a,i]=g.useState(null),s=g.useCallback(()=>{e&&(o(!0),Nre(e).then(c=>{n(c),i(null)}).catch(c=>{console.error("[useDemoData] failed",c),i(String(c))}).finally(()=>o(!1)))},[e]);return g.useEffect(()=>{if(!e){n(null),o(!1);return}s()},[e,s]),{detail:t,loading:r,error:a,refresh:s}},rDe=()=>{const[e,t]=g.useState(null),[n,r]=g.useState(null),o=g.useCallback(()=>Sfe().then(a=>{t(a),r(null)}).catch(a=>{console.error("[useDemos] failed",a),t([]),r(String(a))}),[]);return g.useEffect(()=>{o()},[o]),{demos:e,error:n,refresh:o}},oDe=5,aDe={"node:running":"running","node:done":"done","node:error":"error"},iDe=(e,t)=>{if(t.type==="reset")return{};const n=e[t.nodeId]??[],r=[t.entry,...n].slice(0,oDe);return{...e,[t.nodeId]:r}},sDe=e=>{const[t,n]=g.useReducer(iDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{const s=aDe[i.type];if(!s)return;const c=typeof i.nodeId=="string"?i.nodeId:null;if(!c)return;const l=typeof i.runId=="string"?i.runId:void 0,u=typeof i.ts=="number"?i.ts:Date.now();r.current({type:"append",nodeId:c,entry:{status:s,ts:u,runId:l}})},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{events:t,apply:o,reset:a}},cDe=(e,t)=>{var n,r;switch(t.type){case"reset":return{};case"running":return{...e,[t.nodeId]:{status:"running",runId:t.runId,ts:t.ts??Date.now()}};case"done":return{...e,[t.nodeId]:{...e[t.nodeId],status:"done",runId:t.runId??((n=e[t.nodeId])==null?void 0:n.runId),responseStatus:t.responseStatus,body:t.body,ts:t.ts??Date.now()}};case"error":return{...e,[t.nodeId]:{...e[t.nodeId],status:"error",runId:t.runId??((r=e[t.nodeId])==null?void 0:r.runId),error:t.message,ts:t.ts??Date.now()}}}},lDe=e=>{const[t,n]=g.useReducer(cDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{const s=typeof i.nodeId=="string"?i.nodeId:null;if(!s)return;const c=typeof i.runId=="string"?i.runId:void 0;if(i.type==="node:running"){r.current({type:"running",nodeId:s,runId:c,ts:i.ts});return}if(i.type==="node:done"){const l=typeof i.status=="number"?i.status:void 0;r.current({type:"done",nodeId:s,runId:c,responseStatus:l,body:i.body,ts:i.ts});return}if(i.type==="node:error"){const l=typeof i.message=="string"?i.message:void 0;r.current({type:"error",nodeId:s,runId:c,message:l,ts:i.ts})}},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{runs:t,apply:o,reset:a}},uDe=new Set(["ok","warn","error","pending"]),dDe=(e,t)=>{if(t.type!=="node:status")return e;const n=typeof t.nodeId=="string"?t.nodeId:null;if(!n||typeof t.state!="string"||!uDe.has(t.state))return e;const r=typeof t.summary=="string"?t.summary:void 0,o=typeof t.detail=="string"?t.detail:void 0,a=t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:void 0,i=typeof t.ts=="number"?t.ts:Date.now();return{...e,[n]:{state:t.state,summary:r,detail:o,data:a,ts:i}}},hDe=(e,t)=>{switch(t.type){case"reset":return{};case"event":return dDe(e,t.event)}},fDe=e=>{const[t,n]=g.useReducer(hDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{r.current({type:"event",event:i})},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{statusByNode:t,apply:o,reset:a}},pDe=(e,t={})=>{const[n,r]=g.useState(null),[o,a]=g.useState(!1),{onReload:i,onEvent:s}=t;return g.useEffect(()=>{if(!e){r(null),a(!1);return}const c=`/api/events?demoId=${encodeURIComponent(e)}`,l=new EventSource(c);l.addEventListener("open",()=>a(!0)),l.addEventListener("error",()=>a(!1)),l.addEventListener("hello",()=>{i==null||i()}),l.addEventListener("demo:reload",u=>{const d=ite(u,"demo:reload");r(d),s==null||s(d),i==null||i()});for(const u of["node:running","node:done","node:error","node:status"])l.addEventListener(u,d=>{s==null||s(ite(d,u))});return()=>{l.close()}},[e,i,s]),{lastReload:n,connected:o}},ite=(e,t)=>{try{const n=JSON.parse(e.data);return{type:t,ts:Date.now(),...n}}catch{return{type:t,ts:Date.now()}}},sde="seeflow:last-project",yDe=()=>{if(typeof window>"u")return null;try{return window.localStorage.getItem(sde)}catch{return null}},ste=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(sde,e)}catch{}},mDe=(e,t)=>{if(e.length===0)return null;if(e.length===1)return e[0]??null;if(t){const n=e.find(r=>r.id===t);if(n)return n}return null},cte=["File","Edit","View","Tools","Layout","Selection","Help"],cde="seeflow:command-palette:recent",lde=5,ude=new Map(n$.map(e=>[e.id,e])),gDe=e=>typeof e=="string"&&ude.has(e),lte=()=>{if(typeof window>"u")return[];try{const e=window.localStorage.getItem(cde);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t.filter(gDe).slice(0,lde):[]}catch{return[]}},kDe=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(cde,JSON.stringify(e))}catch{}},ute=(e,t)=>e.enabled?e.enabled(t):!0,vDe=(e,t)=>t.length===0?!0:`${e.label} ${e.description??""}`.toLowerCase().includes(t);function xDe({open:e,onOpenChange:t,runCommand:n,ctx:r}){const[o,a]=g.useState(""),[i,s]=g.useState(0),[c,l]=g.useState(()=>lte()),u=g.useRef(null),d=g.useRef(null);g.useEffect(()=>{e&&(a(""),s(0),l(lte()))},[e]);const{groups:f,flat:p}=g.useMemo(()=>{const b=o.trim().toLowerCase();if(b.length===0){if(c.length===0)return{groups:[],flat:[]};const T=[];for(const A of c){const I=ude.get(A);I&&T.push({cmd:I,enabled:ute(I,r)})}return{groups:[{category:"Recent",rows:T}],flat:T}}const S=new Map;for(const T of n$){if(!vDe(T,b))continue;const _={cmd:T,enabled:ute(T,r)},A=S.get(T.category);A?A.push(_):S.set(T.category,[_])}const L=[...cte.filter(T=>S.has(T)),...Array.from(S.keys()).filter(T=>!cte.includes(T))].map(T=>({category:T,rows:S.get(T)??[]})),P=L.flatMap(T=>T.rows);return{groups:L,flat:P}},[o,r,c]);g.useEffect(()=>{if(p.length===0){s(0);return}s(b=>{var C;let S=b;if(S>=p.length&&(S=0),!((C=p[S])!=null&&C.enabled)){const L=p.findIndex(P=>P.enabled);L!==-1&&(S=L)}return S})},[p]);const y=g.useCallback(b=>{p.length!==0&&s(S=>{var L;let C=S;for(let P=0;P<p.length;P++)if(C=(C+b+p.length)%p.length,(L=p[C])!=null&&L.enabled)return C;return S})},[p]),k=g.useCallback(b=>{l(S=>{const C=[b,...S.filter(L=>L!==b)].slice(0,lde);return kDe(C),C})},[]),w=g.useCallback(b=>{const S=p[b];!S||!S.enabled||(k(S.cmd.id),n(S.cmd.id),t(!1))},[p,t,k,n]),v=g.useCallback(b=>{if(b.key==="ArrowDown"){b.preventDefault(),y(1);return}if(b.key==="ArrowUp"){b.preventDefault(),y(-1);return}b.key==="Enter"&&(b.preventDefault(),w(i))},[w,i,y]);g.useEffect(()=>{if(!e)return;const b=d.current;if(!b)return;const S=b.querySelector(`[data-command-row-index="${i}"]`);S&&typeof S.scrollIntoView=="function"&&S.scrollIntoView({block:"nearest"})},[i,e]);const x=o.trim().length>0;return m.jsx(IT,{open:e,onOpenChange:t,children:m.jsx(ET,{children:m.jsxs(zd,{className:ce("fixed left-0 right-0 top-[20%] z-50 mx-auto w-[480px] max-w-[90vw] border border-border bg-card shadow-lg duration-200","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","sm:rounded-lg"),"data-testid":"command-palette",onOpenAutoFocus:b=>{var S;b.preventDefault(),(S=u.current)==null||S.focus()},children:[m.jsx("div",{className:ce("border-b",p.length===0&&!x&&"border-b-0"),children:m.jsx("input",{ref:u,type:"text",value:o,onChange:b=>a(b.target.value),onKeyDown:v,placeholder:"Type a command…","data-testid":"command-palette-input","aria-label":"Search commands",autoComplete:"off",spellCheck:!1,className:"w-full bg-transparent px-4 py-3 text-sm outline-hidden placeholder:text-muted-foreground"})}),m.jsx("div",{ref:d,"data-testid":"command-palette-list","data-empty":p.length===0?"true":"false",className:ce("max-h-[50vh] overflow-y-auto",p.length>0?"py-1":"","seeflow-no-scrollbar"),children:p.length===0?x?m.jsxs("div",{"data-testid":"command-palette-empty",className:"px-4 py-6 text-center text-sm text-muted-foreground",children:['No commands match "',o,'"']}):null:(()=>{let b=-1;return f.map(S=>m.jsxs("div",{className:"py-1",children:[m.jsx("div",{className:"px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:S.category}),S.rows.map(C=>{b+=1;const L=b,P=L===i;return m.jsxs("button",{type:"button","data-testid":`command-palette-row-${C.cmd.id}`,"data-command-row-index":L,"data-highlighted":P?"true":"false","aria-disabled":C.enabled?void 0:!0,disabled:!C.enabled,onMouseEnter:()=>{C.enabled&&s(L)},onClick:()=>w(L),className:ce("flex w-full items-center justify-between gap-3 px-3 py-2 text-left text-sm outline-hidden",C.enabled?"cursor-pointer text-foreground hover:bg-muted":"cursor-not-allowed text-muted-foreground/50",P&&C.enabled?"bg-muted":""),children:[m.jsxs("div",{className:"flex min-w-0 flex-col",children:[m.jsx("span",{className:"truncate font-medium",children:C.cmd.label}),C.cmd.description?m.jsx("span",{className:"truncate text-xs text-muted-foreground",children:C.cmd.description}):null]}),C.cmd.shortcut?m.jsx("kbd",{"data-testid":`command-palette-shortcut-${C.cmd.id}`,className:"shrink-0 rounded border bg-muted px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground",children:C.cmd.shortcut}):null]},C.cmd.id)})]},S.category))})()})]})})})}var cn=Uint8Array,Qn=Uint16Array,oU=Int32Array,aU=new cn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),iU=new cn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),dte=new cn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dde=function(e,t){for(var n=new Qn(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new oU(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)o[a]=a-n[r]<<5|r;return{b:n,r:o}},hde=dde(aU,2),wDe=hde.b,kB=hde.r;wDe[28]=258,kB[258]=28;var MDe=dde(iU,0),hte=MDe.r,vB=new Qn(32768);for(var Mt=0;Mt<32768;++Mt){var Ta=(Mt&43690)>>1|(Mt&21845)<<1;Ta=(Ta&52428)>>2|(Ta&13107)<<2,Ta=(Ta&61680)>>4|(Ta&3855)<<4,vB[Mt]=((Ta&65280)>>8|(Ta&255)<<8)>>1}var y2=function(e,t,n){for(var r=e.length,o=0,a=new Qn(t);o<r;++o)e[o]&&++a[e[o]-1];var i=new Qn(t);for(o=1;o<t;++o)i[o]=i[o-1]+a[o-1]<<1;var s;if(n){s=new Qn(1<<t);var c=15-t;for(o=0;o<r;++o)if(e[o])for(var l=o<<4|e[o],u=t-e[o],d=i[e[o]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[vB[d]>>c]=l}else for(s=new Qn(r),o=0;o<r;++o)e[o]&&(s[o]=vB[i[e[o]-1]++]>>15-e[o]);return s},_u=new cn(288);for(var Mt=0;Mt<144;++Mt)_u[Mt]=8;for(var Mt=144;Mt<256;++Mt)_u[Mt]=9;for(var Mt=256;Mt<280;++Mt)_u[Mt]=7;for(var Mt=280;Mt<288;++Mt)_u[Mt]=8;var wR=new cn(32);for(var Mt=0;Mt<32;++Mt)wR[Mt]=5;var bDe=y2(_u,9,0),CDe=y2(wR,5,0),fde=function(e){return(e+7)/8|0},pde=function(e,t,n){return(n==null||n>e.length)&&(n=e.length),new cn(e.subarray(t,n))},SDe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],XT=function(e,t,n){var r=new Error(t||SDe[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,XT),!n)throw r;return r},Bo=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},sh=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},wF=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var o=n.length,a=n.slice();if(!o)return{t:mde,l:0};if(o==1){var i=new cn(n[0].s+1);return i[n[0].s]=1,{t:i,l:1}}n.sort(function(S,C){return S.f-C.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=o-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<o;++r)a[r].s>f&&(f=a[r].s);var p=new Qn(f+1),y=xB(n[u-1],p,0);if(y>t){var r=0,k=0,w=y-t,v=1<<w;for(a.sort(function(C,L){return p[L.s]-p[C.s]||C.f-L.f});r<o;++r){var M=a[r].s;if(p[M]>t)k+=v-(1<<y-p[M]),p[M]=t;else break}for(k>>=w;k>0;){var x=a[r].s;p[x]<t?k-=1<<t-p[x]++-1:++r}for(;r>=0&&k;--r){var b=a[r].s;p[b]==t&&(--p[b],++k)}y=t}return{t:new cn(p),l:y}},xB=function(e,t,n){return e.s==-1?Math.max(xB(e.l,t,n+1),xB(e.r,t,n+1)):t[e.s]=n},fte=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new Qn(++t),r=0,o=e[0],a=1,i=function(c){n[r++]=c},s=1;s<=t;++s)if(e[s]==o&&s!=t)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=e[s]}return{c:n.subarray(0,r),n:t}},ch=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},yde=function(e,t,n){var r=n.length,o=fde(t+2);e[o]=r&255,e[o+1]=r>>8,e[o+2]=e[o]^255,e[o+3]=e[o+1]^255;for(var a=0;a<r;++a)e[o+a+4]=n[a];return(o+4+r)*8},pte=function(e,t,n,r,o,a,i,s,c,l,u){Bo(t,u++,n),++o[256];for(var d=wF(o,15),f=d.t,p=d.l,y=wF(a,15),k=y.t,w=y.l,v=fte(f),M=v.c,x=v.n,b=fte(k),S=b.c,C=b.n,L=new Qn(19),P=0;P<M.length;++P)++L[M[P]&31];for(var P=0;P<S.length;++P)++L[S[P]&31];for(var T=wF(L,7),_=T.t,A=T.l,I=19;I>4&&!_[dte[I-1]];--I);var V=l+5<<3,j=ch(o,_u)+ch(a,wR)+i,H=ch(o,f)+ch(a,k)+i+14+3*I+ch(L,_)+2*L[16]+3*L[17]+7*L[18];if(c>=0&&V<=j&&V<=H)return yde(t,u,e.subarray(c,c+l));var O,U,z,N;if(Bo(t,u,1+(H<j)),u+=2,H<j){O=y2(f,p,0),U=f,z=y2(k,w,0),N=k;var E=y2(_,A,0);Bo(t,u,x-257),Bo(t,u+5,C-1),Bo(t,u+10,I-4),u+=14;for(var P=0;P<I;++P)Bo(t,u+3*P,_[dte[P]]);u+=3*I;for(var W=[M,S],q=0;q<2;++q)for(var R=W[q],P=0;P<R.length;++P){var G=R[P]&31;Bo(t,u,E[G]),u+=_[G],G>15&&(Bo(t,u,R[P]>>5&127),u+=R[P]>>12)}}else O=bDe,U=_u,z=CDe,N=wR;for(var P=0;P<s;++P){var X=r[P];if(X>255){var G=X>>18&31;sh(t,u,O[G+257]),u+=U[G+257],G>7&&(Bo(t,u,X>>23&31),u+=aU[G]);var Y=X&31;sh(t,u,z[Y]),u+=N[Y],Y>3&&(sh(t,u,X>>5&8191),u+=iU[Y])}else sh(t,u,O[X]),u+=U[X]}return sh(t,u,O[256]),u+U[256]},LDe=new oU([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),mde=new cn(0),IDe=function(e,t,n,r,o,a){var i=a.z||e.length,s=new cn(r+i+5*(1+Math.ceil(i/7e3))+o),c=s.subarray(r,s.length-o),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=LDe[t-1],f=d>>13,p=d&8191,y=(1<<n)-1,k=a.p||new Qn(32768),w=a.h||new Qn(y+1),v=Math.ceil(n/3),M=2*v,x=function(te){return(e[te]^e[te+1]<<v^e[te+2]<<M)&y},b=new oU(25e3),S=new Qn(288),C=new Qn(32),L=0,P=0,T=a.i||0,_=0,A=a.w||0,I=0;T+2<i;++T){var V=x(T),j=T&32767,H=w[V];if(k[j]=H,w[V]=j,A<=T){var O=i-T;if((L>7e3||_>24576)&&(O>423||!l)){u=pte(e,c,0,b,S,C,P,_,I,T-I,u),_=L=P=0,I=T;for(var U=0;U<286;++U)S[U]=0;for(var U=0;U<30;++U)C[U]=0}var z=2,N=0,E=p,W=j-H&32767;if(O>2&&V==x(T-W))for(var q=Math.min(f,O)-1,R=Math.min(32767,T),G=Math.min(258,O);W<=R&&--E&&j!=H;){if(e[T+z]==e[T+z-W]){for(var X=0;X<G&&e[T+X]==e[T+X-W];++X);if(X>z){if(z=X,N=W,X>q)break;for(var Y=Math.min(W,X-2),oe=0,U=0;U<Y;++U){var ee=T-W+U&32767,ae=k[ee],ve=ee-ae&32767;ve>oe&&(oe=ve,H=ee)}}}j=H,H=k[j],W+=j-H&32767}if(N){b[_++]=268435456|kB[z]<<18|hte[N];var Se=kB[z]&31,be=hte[N]&31;P+=aU[Se]+iU[be],++S[257+Se],++C[be],A=T+z,++L}else b[_++]=e[T],++S[e[T]]}}for(T=Math.max(T,A);T<i;++T)b[_++]=e[T],++S[e[T]];u=pte(e,c,l,b,S,C,P,_,I,T-I,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=w,a.p=k,a.i=T,a.w=A)}else{for(var T=a.w||0;T<i+l;T+=65535){var we=T+65535;we>=i&&(c[u/8|0]=l,we=i),u=yde(c,u+1,e.subarray(T,we))}a.i=i}return pde(s,0,r+fde(u)+o)},EDe=function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e}(),ADe=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=EDe[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},gde=function(){var e=1,t=0;return{p:function(n){for(var r=e,o=t,a=n.length|0,i=0;i!=a;){for(var s=Math.min(i+2655,a);i<s;++i)o+=r+=n[i];r=(r&65535)+15*(r>>16),o=(o&65535)+15*(o>>16)}e=r,t=o},d:function(){return e%=65521,t%=65521,(e&255)<<24|(e&65280)<<8|(t&255)<<8|t>>8}}},kde=function(e,t,n,r,o){if(!o&&(o={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),i=new cn(a.length+e.length);i.set(a),i.set(e,a.length),e=i,o.w=a.length}return IDe(e,t.level==null?6:t.level,t.mem==null?o.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,o)},vde=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},$t=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},PDe=function(e,t){var n=t.level,r=n==0?0:n<6?1:n==9?3:2;if(e[0]=120,e[1]=r<<6|(t.dictionary&&32),e[1]|=31-(e[0]<<8|e[1])%31,t.dictionary){var o=gde();o.p(t.dictionary),$t(e,2,o.d())}};function _De(e,t){return kde(e,t||{},0,0)}function vqe(e,t){t||(t={});var n=gde();n.p(e);var r=kde(e,t,t.dictionary?6:2,4);return PDe(r,t),$t(r,r.length-4,n.d()),r}var xde=function(e,t,n,r){for(var o in e){var a=e[o],i=t+o,s=r;Array.isArray(a)&&(s=vde(r,a[1]),a=a[0]),a instanceof cn?n[i]=[a,s]:(n[i+="/"]=[new cn(0),s],xde(a,i,n,r))}},yte=typeof TextEncoder<"u"&&new TextEncoder,RDe=typeof TextDecoder<"u"&&new TextDecoder,TDe=0;try{RDe.decode(mde,{stream:!0}),TDe=1}catch{}function wB(e,t){var n;if(yte)return yte.encode(e);for(var r=e.length,o=new cn(e.length+(e.length>>1)),a=0,i=function(l){o[a++]=l},n=0;n<r;++n){if(a+5>o.length){var s=new cn(a+8+(r-n<<1));s.set(o),o=s}var c=e.charCodeAt(n);c<128||t?i(c):c<2048?(i(192|c>>6),i(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|e.charCodeAt(++n)&1023,i(240|c>>18),i(128|c>>12&63),i(128|c>>6&63),i(128|c&63)):(i(224|c>>12),i(128|c>>6&63),i(128|c&63))}return pde(o,0,a)}var MB=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&XT(9),t+=r+4}return t},mte=function(e,t,n,r,o,a,i,s){var c=r.length,l=n.extra,u=s&&s.length,d=MB(l);$t(e,t,i!=null?33639248:67324752),t+=4,i!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(a<0&&8),e[t++]=o&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),p=f.getFullYear()-1980;if((p<0||p>119)&&XT(10),$t(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&($t(e,t,n.crc),$t(e,t+4,a<0?-a-2:a),$t(e,t+8,n.size)),$t(e,t+12,c),$t(e,t+14,d),t+=16,i!=null&&($t(e,t,u),$t(e,t+6,n.attrs),$t(e,t+10,i),t+=14),e.set(r,t),t+=c,d)for(var y in l){var k=l[y],w=k.length;$t(e,t,+y),$t(e,t+2,w),e.set(k,t+4),t+=4+w}return u&&(e.set(s,t),t+=u),t},jDe=function(e,t,n,r,o){$t(e,t,101010256),$t(e,t+8,n),$t(e,t+10,n),$t(e,t+12,r),$t(e,t+16,o)};function NDe(e,t){t||(t={});var n={},r=[];xde(e,"",n,t);var o=0,a=0;for(var i in n){var s=n[i],c=s[0],l=s[1],u=l.level==0?0:8,d=wB(i),f=d.length,p=l.comment,y=p&&wB(p),k=y&&y.length,w=MB(l.extra);f>65535&&XT(11);var v=u?_De(c,l):c,M=v.length,x=ADe();x.p(c),r.push(vde(l,{size:c.length,crc:x.d(),c:v,f:d,m:y,u:f!=i.length||y&&p.length!=k,o,compression:u})),o+=30+f+w+M,a+=76+2*(f+w)+(k||0)+M}for(var b=new cn(a+22),S=o,C=a-o,L=0;L<r.length;++L){var d=r[L];mte(b,d.o,d,d.f,d.u,d.c.length);var P=30+d.f.length+MB(d.extra);b.set(d.c,d.o+P),mte(b,o,d,d.f,d.u,d.c.length,d.o,d.m),o+=16+P+(d.m?d.m.length:0)}return jDe(b,o,r.length,C,S),b}const zDe="https://seeflow.dev/api";async function DDe(e,t,n,r,o){const a=await Nre(e);if(!a.demo)throw new Error("Demo has no data");const i=a.demo,s=new Set,c=[];for(const y of i.nodes)y.type==="imageNode"&&y.data.path&&!s.has(y.data.path)?(s.add(y.data.path),c.push(y.data.path)):y.type==="htmlNode"&&y.data.htmlPath&&!s.has(y.data.htmlPath)&&(s.add(y.data.htmlPath),c.push(y.data.htmlPath));const u={[r==="link"?"seeflow.private.json":"seeflow.json"]:wB(JSON.stringify(i))};if(o){const y=o.split(",")[1];y&&(u["preview.png"]=Uint8Array.from(atob(y),k=>k.charCodeAt(0)))}for(const y of c){const k=await fetch(`/api/projects/${encodeURIComponent(e)}/files/${y}`);k.ok&&(u[`files/${y}`]=new Uint8Array(await k.arrayBuffer()))}const d=NDe(u),f=await fetch(`${zDe}/flows?email=${encodeURIComponent(t)}&name=${encodeURIComponent(n)}`,{method:"POST",headers:{"content-type":"application/zip"},body:d.buffer});if(!f.ok)throw new Error(`Export failed with status ${f.status}`);const p=await f.json();if(typeof p.url!="string")throw new Error("Invalid response from cloud API: missing url");return{shareUrl:p.url}}function qDe(e){return g.useCallback((t,n,r,o)=>DDe(e,t,n,r,o),[e])}const gte="seeflow.export.email",kte="seeflow.export.name",vte="seeflow.export.visibility";function ODe({open:e,onOpenChange:t,projectId:n,onCapturePreview:r}){const[o,a]=g.useState(""),[i,s]=g.useState(""),[c,l]=g.useState("public"),[u,d]=g.useState({kind:"idle"}),[f,p]=g.useState(!1),y=qDe(n);g.useEffect(()=>{e&&(a(localStorage.getItem(gte)??""),s(localStorage.getItem(kte)??""),l(localStorage.getItem(vte)??"public"),d({kind:"idle"}),p(!1))},[e]);const k=g.useCallback(async()=>{d({kind:"loading"});try{const x=await(r==null?void 0:r()),{shareUrl:b}=await y(o.trim(),i.trim(),c,x);localStorage.setItem(gte,o.trim()),localStorage.setItem(kte,i.trim()),localStorage.setItem(vte,c),d({kind:"done",shareUrl:b})}catch(x){d({kind:"error",message:x instanceof Error?x.message:String(x)})}},[y,o,i,c,r]),w=g.useCallback(async()=>{if(u.kind==="done")try{await navigator.clipboard.writeText(u.shareUrl),p(!0),setTimeout(()=>p(!1),2e3)}catch(x){console.error("Failed to copy to clipboard:",x)}},[u]),v=u.kind==="loading",M=o.trim().length>0&&i.trim().length>0;return m.jsx(RT,{open:e,onOpenChange:t,children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"export-dialog",onOpenAutoFocus:x=>{x.preventDefault();const b=document.querySelector('[data-testid="export-email-input"]');b==null||b.focus()},children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Export to seeflow.dev"}),m.jsx(Ef,{children:"Upload this diagram to the cloud and get a shareable link."})]}),u.kind!=="done"?m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex flex-col gap-4",children:[m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Email"}),m.jsx("input",{type:"email",required:!0,autoComplete:"email",value:o,onChange:x=>a(x.target.value),disabled:v,"data-testid":"export-email-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"}),m.jsx("span",{className:"text-xs text-muted-foreground",children:"We'll use this to let you manage your flows in the future."})]}),m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Flow Name"}),m.jsx("input",{type:"text",required:!0,value:i,onChange:x=>s(x.target.value),disabled:v,"data-testid":"export-name-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"})]}),m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Visibility"}),m.jsxs("select",{value:c,onChange:x=>l(x.target.value),disabled:v,"data-testid":"export-visibility-select",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",children:[m.jsx("option",{value:"public",children:"Public — anyone can discover it"}),m.jsx("option",{value:"link",children:"Anyone with the link"})]})]}),u.kind==="error"?m.jsx("div",{role:"alert","data-testid":"export-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:u.message}):null]}),m.jsx(fd,{children:u.kind==="error"?m.jsxs(m.Fragment,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),"data-testid":"export-cancel",children:"Cancel"}),m.jsx(Ft,{type:"button",onClick:()=>d({kind:"idle"}),"data-testid":"export-retry",children:"Try again"})]}):m.jsxs(m.Fragment,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:v,"data-testid":"export-cancel",children:"Cancel"}),m.jsx(Ft,{type:"button",onClick:k,disabled:v||!M,"data-testid":"export-submit",children:v?m.jsxs(m.Fragment,{children:[m.jsx(dr,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),m.jsx("span",{children:"Uploading…"})]}):"Export"})]})})]}):m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex flex-col gap-3",children:[m.jsx("p",{className:"text-sm text-muted-foreground",children:"Your diagram is live. Share this link:"}),m.jsxs("div",{className:"flex gap-2",children:[m.jsx("input",{type:"text",readOnly:!0,value:u.shareUrl,"data-testid":"export-share-url",className:"min-w-0 flex-1 rounded-md border bg-muted px-3 py-2 text-sm outline-hidden"}),m.jsx(Ft,{type:"button",variant:"outline",size:"icon",onClick:w,"aria-label":"Copy link","data-testid":"export-copy",children:f?m.jsx(Ja,{className:"h-4 w-4","aria-hidden":"true"}):m.jsx(T1,{className:"h-4 w-4","aria-hidden":"true"})}),m.jsx(Ft,{type:"button",variant:"outline",size:"icon",onClick:()=>window.open(u.shareUrl,"_blank"),"aria-label":"View in new tab","data-testid":"export-view",children:m.jsx(Fh,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),m.jsx(fd,{children:m.jsx(Ft,{type:"button",onClick:()=>t(!1),"data-testid":"export-done",children:"Done"})})]})]})})}const FDe=(e,t)=>{if(e.has(t))return e;const n=new Set(e);return n.add(t),n},HDe=(e,t)=>{if(t.length===0)return e;let n=!1;const r=new Set(e);for(const o of t)r.has(o)||(r.add(o),n=!0);return n?r:e},BDe=(e,t)=>{if(!e.has(t))return e;const n=new Set(e);return n.delete(t),n},VDe=(e,t)=>{if(t.length===0)return e;let n=!1;const r=new Set(e);for(const o of t)r.has(o)&&(r.delete(o),n=!0);return n?r:e},$De=(e,t)=>{if(e.size===0)return e;const n=new Set(t.map(a=>a.id));let r=!1;const o=new Set(e);for(const a of o)n.has(a)||(o.delete(a),r=!0);return r?o:e},xte=()=>{const[e,t]=g.useState(()=>new Set),n=g.useCallback(c=>{t(l=>FDe(l,c))},[]),r=g.useCallback(c=>{t(l=>HDe(l,c))},[]),o=g.useCallback(c=>{t(l=>BDe(l,c))},[]),a=g.useCallback(c=>{t(l=>VDe(l,c))},[]),i=g.useCallback(c=>{t(l=>$De(l,c))},[]),s=g.useCallback(()=>t(new Set),[]);return{ids:e,mark:n,markMany:r,unmark:o,unmarkMany:a,pruneAgainst:i,reset:s}},UDe=(e,t)=>e===t?!0:e==null||t==null||typeof e!=typeof t||typeof e!="object"?!1:JSON.stringify(e)===JSON.stringify(t),WDe=(e,t,n)=>({...e,[t]:{...e[t],...n}}),GDe=(e,t)=>{if(!(t in e))return e;const n={...e};return delete n[t],n},KDe=(e,t)=>{const n=Object.entries(e);if(n.length===0)return e;const r=new Map(t.map(i=>[i.id,i]));let o=!1;const a={...e};for(const[i,s]of n){const c=r.get(i);if(!c)continue;const l={};let u=!1;for(const d of Object.keys(s))UDe(s[d],c[d])?o=!0:(l[d]=s[d],u=!0);u?a[i]=l:(o=!0,delete a[i])}return o?a:e},wte=()=>{const[e,t]=g.useState({}),n=g.useCallback((i,s)=>{t(c=>WDe(c,i,s))},[]),r=g.useCallback(i=>{t(s=>GDe(s,i))},[]),o=g.useCallback(i=>{t(s=>KDe(s,i))},[]),a=g.useCallback(()=>t({}),[]);return{overrides:e,setOverride:n,dropOverride:r,pruneAgainst:o,reset:a}},ZDe=500,XDe=500,YDe={stack:[],cursor:0},QDe=(e,t,n)=>{const r=Date.now(),o=ZDe,a=XDe,{stack:i,cursor:s}=e;if(t.coalesceKey&&s>0){const u=i[s-1];if(u&&u.coalesceKey===t.coalesceKey&&r-u.capturedAt<=a){const d=i.slice(0,s);return d[s-1]={...u,do:t.do,capturedAt:r},{stack:d,cursor:s}}}const c=i.slice(0,s);c.push({...t,capturedAt:r});let l=s+1;for(;c.length>o;)c.shift(),l-=1;return l<0&&(l=0),{stack:c,cursor:l}},JDe=e=>e.cursor===0?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor-1},entry:e.stack[e.cursor-1]},eqe=e=>e.cursor===e.stack.length?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor+1},entry:e.stack[e.cursor]},tqe=()=>({stack:[],cursor:0}),nqe=e=>{if(e.cursor===0)return e;const t=e.stack.slice();return t.splice(e.cursor-1,1),{stack:t,cursor:e.cursor-1}},rqe=(e,t)=>t.state,oqe=()=>{const[e,t]=g.useReducer(rqe,YDe),n=g.useRef(e);n.current=e;const r=g.useRef(Promise.resolve()),o=g.useRef(0),a=g.useCallback(p=>{p!==n.current&&(n.current=p,t({type:"replace",state:p}))},[]),i=g.useCallback(p=>{const y={do:p.do,undo:p.undo,coalesceKey:p.coalesceKey,capturedAt:p.capturedAt??Date.now()};a(QDe(n.current,y))},[a]),s=g.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const y=JDe(n.current);if(y.entry)return a(y.state),{entry:y.entry}});return r.current=p.then(()=>{},()=>{}),p},[a]),c=g.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const y=eqe(n.current);if(y.entry)return a(y.state),{entry:y.entry}});return r.current=p.then(()=>{},()=>{}),p},[a]),l=g.useCallback(()=>{a(tqe())},[a]),u=g.useCallback(()=>{a(nqe(n.current))},[a]),d=g.useCallback(()=>{o.current=Date.now()},[]),f=g.useCallback(()=>o.current,[]);return{push:i,undo:s,redo:c,clear:l,dropTop:u,canUndo:e.cursor>0,canRedo:e.cursor<e.stack.length,markMutation:d,lastMutationAt:f}};function aqe({nodes:e,connectors:t,flowPos:n,nodeIdGen:r,connectorIdGen:o,defaultOffset:a={x:24,y:24}}){const i=new Map;for(const p of e)i.set(p.id,r(p.id));let s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;for(const p of e)p.position.x<s&&(s=p.position.x),p.position.y<c&&(c=p.position.y);Number.isFinite(s)||(s=0),Number.isFinite(c)||(c=0);const l=n?n.x-s:a.x,u=n?n.y-c:a.y,d=e.map(p=>{const y=i.get(p.id);if(y===void 0)throw new Error(`paste id missing for ${p.id}`);return{...p,id:y,position:{x:p.position.x+l,y:p.position.y+u}}}),f=t.map(p=>{const y=o(p.id);return{...p,id:y,source:i.get(p.source)??p.source,target:i.get(p.target)??p.target}});return{newNodes:d,newConnectors:f,idMap:i}}const iqe=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploading:!0}}),sqe=e=>({type:"imageNode",data:wde(e)}),cqe=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploadError:e.message}}),wde=e=>({...PMe(e.path,e.dims,e.lastUsed),alt:e.originalFilename}),lqe=async(e,t)=>{const{nodeId:n,demoId:r,file:o,originalFilename:a,position:i,dims:s,lastUsed:c}=e;t.rememberRetry(n,{file:o,originalFilename:a,position:i,dims:s}),t.setOverride(n,iqe({position:i,dims:s,originalFilename:a}));let l;try{l=(await t.upload(r,o,a)).path}catch(p){const y=p instanceof Error?p.message:String(p);throw t.setOverride(n,cqe({position:i,dims:s,originalFilename:a,message:y})),p}t.setOverride(n,sqe({path:l,dims:s,originalFilename:a,lastUsed:c}));const u=wde({path:l,dims:s,originalFilename:a,lastUsed:c}),d={id:n,type:"imageNode",position:i,data:u},{id:f}=await t.createNode(r,d);t.forgetRetry(n),t.pushUndo&&t.pushUndo({do:async()=>{await t.createNode(r,{...d,id:f})},undo:async()=>{await t.deleteNode(r,f)}})},uqe=new Set(["INPUT","TEXTAREA","SELECT"]),Pr=e=>e?uqe.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1,dqe=(e,t,n)=>{const r=e.indexOf(t);if(r<0)return null;const o=e.length,a=[...e];switch(n.op){case"forward":{if(r>=o-1)return null;const i=a[r],s=a[r+1];return i===void 0||s===void 0?null:(a[r]=s,a[r+1]=i,a)}case"backward":{if(r<=0)return null;const i=a[r],s=a[r-1];return i===void 0||s===void 0?null:(a[r]=s,a[r-1]=i,a)}case"toFront":{if(r===o-1)return null;const[i]=a.splice(r,1);return i===void 0?null:(a.push(i),a)}case"toBack":{if(r===0)return null;const[i]=a.splice(r,1);return i===void 0?null:(a.unshift(i),a)}case"toIndex":{const i=Math.min(Math.max(n.index,0),o-1);if(i===r)return null;const[s]=a.splice(r,1);return s===void 0?null:(a.splice(i,0,s),a)}}};function hqe({slug:e,demos:t,detail:n,loading:r,runs:o,nodeEvents:a,statusByNode:i,onPlayNode:s,onRestartDemo:c}){var Hd,dn;const l=t.find(F=>F.slug===e),[u,d]=g.useState([]),[f,p]=g.useState([]),[y,k]=g.useState(null),w=g.useRef(u),v=g.useRef(f);g.useEffect(()=>{w.current=u},[u]),g.useEffect(()=>{v.current=f},[f]);const M=g.useRef(null),x=g.useRef(null),b=g.useRef(null),S=wte(),C=wte(),L=xte(),P=xte(),[T,_]=g.useState(null),[A,I]=g.useState(null),[V,j]=g.useState(null),H=g.useRef(null);g.useEffect(()=>{H.current=V},[V]);const[O,U]=g.useState(!1),[z,N]=g.useState(0),E=g.useRef(null),W=g.useRef(null),q=g.useCallback(F=>{W.current=F},[]),R=oqe(),{push:G,dropTop:X,markMutation:Y,clear:oe,lastMutationAt:ee}=R,{reset:ae}=S,{reset:ve}=C,{reset:Se}=L,{reset:be}=P;g.useEffect(()=>{d([]),p([]),k(null),ae(),ve(),Se(),be(),_(null),I(null),va.current=null,bi(!1),to.current.clear(),R.clear()},[n==null?void 0:n.id]);const we=g.useCallback((F,B)=>{d(F),p(B)},[]),te=(Hd=n==null?void 0:n.demo)==null?void 0:Hd.nodes,ie=(dn=n==null?void 0:n.demo)==null?void 0:dn.connectors,{pruneAgainst:Te}=S,{pruneAgainst:Ae}=C,{pruneAgainst:at}=L,{pruneAgainst:Qe}=P;g.useEffect(()=>{te&&(Te(te),at(te)),Date.now()-ee()>2e3&&oe()},[te,Te,at,ee,oe]),g.useEffect(()=>{if(!te)return;const F=E.current,B=new Set(te.map(ne=>ne.id));if(E.current=B,F===null)return;const Z=S.overrides,$=L.ids;let D=!1;for(const ne of B)if(!F.has(ne)&&!(ne in Z)){D=!0;break}if(!D){for(const ne of F)if(!B.has(ne)&&!$.has(ne)){D=!0;break}}D&&N(ne=>ne+1)},[te]),g.useEffect(()=>{ie&&(Ae(ie),Qe(ie)),Date.now()-ee()>2e3&&oe()},[ie,Ae,Qe,ee,oe]),g.useEffect(()=>{if(!(!te||!T)&&te.length===T.length){for(let F=0;F<te.length;F++){const B=te[F],Z=T[F];if(!B||B.id!==Z)return}_(null)}},[te,T]);const le=(n==null?void 0:n.id)??null,Q=g.useMemo(()=>le?_Me({baseUrl:"",demoId:le}):null,[le]),[ue,ge]=g.useState(!1),{setOverride:Me,dropOverride:qe}=S,re=g.useRef(S.overrides);g.useEffect(()=>{re.current=S.overrides},[S.overrides]);const he=g.useCallback((F,B)=>{var $;if(!le||!Q)return;const Z=($=te==null?void 0:te.find(D=>D.id===F))==null?void 0:$.position;Me(F,{position:B}),I(null),Y(),Z&&G({do:async()=>{await Q.updateNodePosition(F,B)},undo:async()=>{await Q.updateNodePosition(F,Z)},coalesceKey:`node:${F}:position`}),Q.updateNodePosition(F,B).catch(D=>{qe(F),Z&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNodePosition failed",D)})},[le,Q,te,Me,qe,G,X,Y]),Ie=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=re.current,Z=F.map($=>{var Pe;const D=te==null?void 0:te.find(ke=>ke.id===$.id);if(!D)return null;const ne=((Pe=B[$.id])==null?void 0:Pe.position)??D.position;return{id:$.id,prev:ne,next:$.position}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Me($.id,{position:$.next});I(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNodePosition($.id,$.next)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNodePosition($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNodePosition($.id,$.next),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})}},[le,Q,te,Me,qe,G,Y]),He=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(ne=>ne.id===F),$=Z?{width:Z.data.width,height:Z.data.height,position:{x:Z.position.x,y:Z.position.y}}:void 0,D={width:B.width,height:B.height,position:{x:B.x,y:B.y}};Me(F,{position:D.position,data:{width:D.width,height:D.height}}),I(null),Y(),$&&G({do:async()=>{await Q.updateNode(F,D)},undo:async()=>{await Q.updateNode(F,$)},coalesceKey:`node:${F}:resize`}),Q.updateNode(F,D).catch(ne=>{qe(F),$&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateNode resize failed",ne)})},[le,Q,te,Me,qe,G,X,Y]),Ue=g.useCallback(F=>{if(!le||!Q)return;const B=te==null?void 0:te.find(D=>D.id===F);if(!B)return;const Z={autoSize:B.data.autoSize,width:B.data.width,height:B.data.height},$={autoSize:!0};Me(F,{data:{autoSize:!0,width:void 0,height:void 0}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,$)},undo:async()=>{await Q.updateNode(F,Z)},coalesceKey:`node:${F}:fit-to-content`}),Q.updateNode(F,$).catch(D=>{qe(F),X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode (fit-to-content) failed",D)})},[le,Q,te,Me,qe,G,X,Y]),Rt=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=[];for(const $ of F){const D=te==null?void 0:te.find(dt=>dt.id===$.id);if(!D)continue;const ne=D.data,Pe={position:{x:D.position.x,y:D.position.y}};ne.width!==void 0&&(Pe.width=ne.width),ne.height!==void 0&&(Pe.height=ne.height);const ke={position:$.position};$.width!==void 0&&(ke.width=$.width),$.height!==void 0&&(ke.height=$.height),B.push({id:$.id,prev:Pe,next:ke})}if(B.length===0)return;for(const $ of B){const D={};$.next.width!==void 0&&(D.width=$.next.width),$.next.height!==void 0&&(D.height=$.next.height),Me($.id,{position:$.next.position,...Object.keys(D).length>0?{data:D}:{}})}I(null),Y();const Z=B.map($=>$.id).sort();G({do:async()=>{await Promise.allSettled(B.map($=>Q.updateNode($.id,$.next)))},undo:async()=>{await Promise.allSettled(B.map($=>Q.updateNode($.id,$.prev)))},coalesceKey:`multi:resize:${Z.join(",")}`}),Promise.all(B.map(async $=>{try{return await Q.updateNode($.id,$.next),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})},[le,Q,te,Me,qe,G,Y]),{setOverride:Oe,dropOverride:je}=C,Pt=g.useCallback((F,B)=>{Me(F,{data:B})},[Me]),sr=g.useCallback((F,B)=>{for(const Z of F)Me(Z,{data:B})},[Me]),Dt=g.useCallback((F,B)=>{Oe(F,B)},[Oe]),Dn=g.useCallback((F,B)=>{if(!le||!Q)return;WQ(Ai,B);const Z=te==null?void 0:te.find(D=>D.id===F);let $=null;if(Z){$={};const D=Z.data;for(const ne of Object.keys(B))$[ne]=D[ne]}if(Me(F,{data:B}),I(null),Y(),$){const D=$;G({do:async()=>{await Q.updateNode(F,B)},undo:async()=>{await Q.updateNode(F,D)},coalesceKey:`node:${F}:style`})}Q.updateNode(F,B).catch(D=>{qe(F),$&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode style failed",D)})},[le,Q,te,Me,qe,G,X,Y]),en=g.useCallback((F,B)=>{if(!le||!Q||F.length===0)return;WQ(Ai,B);const Z=F.map($=>{const D=te==null?void 0:te.find(ke=>ke.id===$);if(!D)return null;const ne=D.data,Pe={};for(const ke of Object.keys(B))Pe[ke]=ne[ke];return{id:$,prev:Pe}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Me($.id,{data:B});I(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,B)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNode($.id,B),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})}},[le,Q,te,Me,qe,G,Y]),$u=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=F.map(D=>{const ne=te==null?void 0:te.find(ke=>ke.id===D);if(!ne)return null;const Pe=ne.data;return{id:D,prev:Pe.locked===!0}}).filter(D=>D!==null);if(B.length===0)return;const Z=B.some(D=>!D.prev),$=B.filter(D=>D.prev!==Z);if($.length!==0){for(const D of $)Me(D.id,{data:{locked:Z}});I(null),Y(),G({do:async()=>{await Promise.allSettled($.map(D=>Q.updateNode(D.id,{locked:Z})))},undo:async()=>{await Promise.allSettled($.map(D=>Q.updateNode(D.id,{locked:D.prev})))}}),Promise.all($.map(async D=>{try{return await Q.updateNode(D.id,{locked:Z}),null}catch(ne){return qe(D.id),ne instanceof Error?ne.message:String(ne)}})).then(D=>{const ne=D.find(Pe=>Pe!==null);ne&&I(ne)})}},[le,Q,te,Me,qe,G,Y]),Uu=g.useCallback((F,B)=>{if(!le||!Q)return;SMe(Ai,B);const Z=ie==null?void 0:ie.find(D=>D.id===F);let $=null;if(Z){$={};const D=Z;for(const ne of Object.keys(B))$[ne]=D[ne]}if(Oe(F,B),I(null),Y(),$){const D=$;G({do:async()=>{await Q.updateConnector(F,B)},undo:async()=>{await Q.updateConnector(F,D)},coalesceKey:`connector:${F}:style`})}Q.updateConnector(F,B).catch(D=>{je(F),$&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateConnector failed",D)})},[le,Q,ie,Oe,je,G,X,Y]),{mark:da,markMany:ha,unmark:Xr,unmarkMany:gi}=L,{mark:fa,markMany:xr,unmark:Yr,unmarkMany:wr}=P,Wu=g.useCallback(F=>{if(!le||!Q)return;const B=te==null?void 0:te.find(ke=>ke.id===F);if(!B||B.data.locked===!0)return;const Z=(ie??[]).filter(ke=>ke.source===F||ke.target===F),$=Z.map(ke=>ke.id),D=new Set($);I(null),da(F),$.length>0&&xr($),d(ke=>ke.filter(dt=>dt!==F)),p(ke=>ke.filter(dt=>!D.has(dt))),Y();const ne=B,Pe=Z;G({do:async()=>{da(F),$.length>0&&xr($),await Q.deleteNode(F)},undo:async()=>{Xr(F),$.length>0&&wr($),await Q.createNode({id:ne.id,type:ne.type,position:ne.position,data:ne.data});for(const ke of Pe)await Q.createConnector({...ke,id:ke.id})}}),Q.deleteNode(F).catch(ke=>{Xr(F),$.length>0&&wr($),X(),I(ke instanceof Error?ke.message:String(ke)),console.error("deleteNode failed",ke)})},[le,Q,te,ie,da,xr,Xr,wr,G,X,Y]),Ve=g.useCallback((F,B)=>{if(!le||!Q||!te)return;const Z=T??te.map(ne=>ne.id),$=dqe(Z,F,B);if(!$)return;const D=Z.indexOf(F);_($),I(null),Y(),G({do:async()=>{await Q.reorderNode(F,B)},undo:async()=>{await Q.reorderNode(F,{op:"toIndex",index:D})}}),Q.reorderNode(F,B).catch(ne=>{_(null),X(),I(ne instanceof Error?ne.message:String(ne)),console.error("reorderNode failed",ne)})},[le,Q,te,T,G,X,Y]);g.useCallback(F=>{if(!le||!Q)return;const B=ie==null?void 0:ie.find($=>$.id===F);if(!B)return;I(null),fa(F),p($=>$.filter(D=>D!==F)),Y();const Z=B;G({do:async()=>{fa(F),await Q.deleteConnector(F)},undo:async()=>{Yr(F),await Q.createConnector({...Z,id:Z.id})}}),Q.deleteConnector(F).catch($=>{Yr(F),X(),I($ instanceof Error?$.message:String($)),console.error("deleteConnector failed",$)})},[le,Q,ie,fa,Yr,G,X,Y]);const yt=g.useCallback((F,B)=>{if(!le||!Q||F.length===0&&B.length===0)return;const Z=F,$=new Set((te??[]).filter(_e=>_e.data.locked===!0).map(_e=>_e.id)),D=Z.filter(_e=>!$.has(_e)),ne=new Set(D),Pe=D.map(_e=>te==null?void 0:te.find(nt=>nt.id===_e)).filter(_e=>!!_e),ke=(ie??[]).filter(_e=>ne.has(_e.source)||ne.has(_e.target)),dt=new Set(ke.map(_e=>_e.id)),Tt=B.map(_e=>ie==null?void 0:ie.find(nt=>nt.id===_e)).filter(_e=>!!_e).filter(_e=>!dt.has(_e.id)).filter(_e=>!($.has(_e.source)&&$.has(_e.target)));if(Pe.length===0&&ke.length===0&&Tt.length===0)return;I(null);const Sn=Pe.map(_e=>_e.id),Kt=[...ke.map(_e=>_e.id),...Tt.map(_e=>_e.id)];Sn.length>0&&ha(Sn),Kt.length>0&&xr(Kt);const Lr=Pe;d(_e=>_e.filter(nt=>!ne.has(nt)));const wa=new Set(Tt.map(_e=>_e.id));p(_e=>_e.filter(nt=>!wa.has(nt)&&!dt.has(nt))),Y(),G({do:async()=>{Sn.length>0&&ha(Sn),Kt.length>0&&xr(Kt);for(const _e of Lr)await Q.deleteNode(_e.id).catch(()=>{});await Promise.allSettled(Tt.map(_e=>Q.deleteConnector(_e.id)))},undo:async()=>{Sn.length>0&&gi(Sn),Kt.length>0&&wr(Kt);for(let _e=Lr.length-1;_e>=0;_e--){const nt=Lr[_e];nt&&await Q.createNode({id:nt.id,type:nt.type,position:nt.position,data:nt.data})}for(const _e of[...ke,...Tt])await Q.createConnector({..._e,id:_e.id})}});const Zu=new Map;for(const _e of Pe)Zu.set(_e.id,ke.filter(nt=>nt.source===_e.id||nt.target===_e.id).map(nt=>nt.id));(async()=>{const _e=[];for(const Ne of Lr)try{await Q.deleteNode(Ne.id)}catch(it){Xr(Ne.id);const jt=Zu.get(Ne.id)??[];jt.length>0&&wr(jt),_e.push(it instanceof Error?it.message:String(it))}const nt=await Promise.all(Tt.map(async Ne=>{try{return await Q.deleteConnector(Ne.id),null}catch(it){return Yr(Ne.id),it instanceof Error?it.message:String(it)}}));for(const Ne of nt)Ne!==null&&_e.push(Ne);_e.length>0&&_e[0]!==void 0&&I(_e[0])})()},[le,Q,te,ie,ha,xr,Xr,gi,Yr,wr,G,Y]);g.useEffect(()=>{M.current=yt},[yt]),g.useEffect(()=>{const F=B=>{if(B.key!=="Delete"&&B.key!=="Backspace"||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current,$=v.current;Z.length===0&&$.length===0||(B.preventDefault(),yt(Z,$))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[yt]);const{undo:Qr,redo:Po,canUndo:qn,canRedo:xn}=R;g.useEffect(()=>{const F=async B=>{if((B.metaKey||B.ctrlKey)&&B.key.toLowerCase()==="z"&&!Pr(document.activeElement)){if(B.preventDefault(),B.shiftKey){if(!xn)return;try{const Z=await Po();Z!=null&&Z.entry&&await Z.entry.do()}catch(Z){I(Z instanceof Error?Z.message:String(Z)),console.error("redo failed",Z)}return}if(qn)try{const Z=await Qr();Z!=null&&Z.entry&&await Z.entry.undo()}catch(Z){I(Z instanceof Error?Z.message:String(Z)),console.error("undo failed",Z)}}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Qr,Po,qn,xn]);const _o=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(ne=>ne.id===F),D=(Z&&"name"in Z.data?Z.data.name:void 0)??"";Me(F,{data:{name:B}}),I(null),Y(),Z&&G({do:async()=>{await Q.updateNode(F,{name:B})},undo:async()=>{await Q.updateNode(F,{name:D})},coalesceKey:`node:${F}:name`}),Q.updateNode(F,{name:B}).catch(ne=>{Z&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateNode name failed",ne)})},[le,Q,te,Me,G,X,Y]),On=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $=Z.data.description??"";Me(F,{data:{description:B}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{description:B})},undo:async()=>{await Q.updateNode(F,{description:$})},coalesceKey:`node:${F}:description`}),Q.updateNode(F,{description:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode description failed",D)})},[le,Q,te,Me,G,X,Y]),Jr=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $=Z.data.detail??"";Me(F,{data:{detail:B}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{detail:B})},undo:async()=>{await Q.updateNode(F,{detail:$})},coalesceKey:`node:${F}:detail`}),Q.updateNode(F,{detail:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode detail failed",D)})},[le,Q,te,Me,G,X,Y]),un=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $="icon"in Z.data?Z.data.icon??null:null;Me(F,{data:{icon:B??void 0}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{icon:B})},undo:async()=>{await Q.updateNode(F,{icon:$})},coalesceKey:`node:${F}:icon`}),Q.updateNode(F,{icon:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode icon failed",D)})},[le,Q,te,Me,G,X,Y]),Gt=g.useCallback((F,B,Z)=>{if(!le||!Q)return;I(null);const $=`node-${crypto.randomUUID()}`,D=KQ(F,Z,C0(Ai).node),ne={id:$,type:"shapeNode",position:B,data:D};Me($,{id:$,type:"shapeNode",position:B,data:D}),Y(),Q.createNode(ne).then(({id:ke})=>{G({do:async()=>{await Q.createNode({...ne,id:ke})},undo:async()=>{await Q.deleteNode(ke)}})}).catch(ke=>{qe($),I(ke instanceof Error?ke.message:String(ke)),console.error("createNode failed",ke)})},[le,Q,Me,qe,G,Y]),eo=g.useCallback((F,B)=>{if(!le||!Q)return;I(null);const Z=`node-${crypto.randomUUID()}`,$={icon:F,width:ld.width,height:ld.height},D={id:Z,type:"iconNode",position:B,data:$};Me(Z,{id:Z,type:"iconNode",position:B,data:$}),d([Z]),Y(),Q.createNode(D).then(({id:Pe})=>{G({do:async()=>{await Q.createNode({...D,id:Pe})},undo:async()=>{await Q.deleteNode(Pe)}})}).catch(Pe=>{qe(Z),I(Pe instanceof Error?Pe.message:String(Pe)),console.error("createNode (icon) failed",Pe)})},[le,Q,Me,qe,G,Y]),pa=g.useCallback(F=>{if(!le||!Q)return;I(null);const B=`node-${crypto.randomUUID()}`,Z=`blocks/${B}.html`,$={id:B,type:"htmlNode",position:F.position,data:{}},D={id:B,type:"htmlNode",position:F.position,data:{htmlPath:Z}};Me(B,D),d([B]),Y(),Q.createNode($).then(({id:ne})=>{G({do:async()=>{await Q.createNode({...$,id:ne})},undo:async()=>{await Q.deleteNode(ne)}})}).catch(ne=>{qe(B),I(ne instanceof Error?ne.message:String(ne)),console.error("createNode (htmlNode) failed",ne)})},[le,Q,Me,qe,G,Y]),to=g.useRef(new Map),ki=g.useCallback((F,B)=>{to.current.set(F,B)},[]),vi=g.useCallback(F=>{to.current.delete(F)},[]),mt=g.useCallback(F=>{!le||!Q||(I(null),Y(),lqe({...F,demoId:le,lastUsed:C0(Ai).node},{upload:(B,Z,$)=>Q.uploadImage(Z,$),createNode:async(B,Z)=>{const{id:$}=await Q.createNode(Z);return{id:$}},deleteNode:async(B,Z)=>(await Q.deleteNode(Z),{ok:!0}),setOverride:Me,pushUndo:G,rememberRetry:ki,forgetRetry:vi}).catch(B=>{console.error("image-upload-flow failed",B)}))},[le,Q,Me,G,Y,ki,vi]),xi=g.useCallback(F=>{if(!le||!Q)return;const B=`node-${crypto.randomUUID()}`;mt({nodeId:B,...F})},[le,Q,mt]),ya=g.useCallback(F=>{const B=to.current.get(F);B&&mt({nodeId:F,...B})},[mt]),[Mr,br]=g.useState({open:!1,mode:"insert"}),cr=g.useCallback((F,B)=>{br({open:!0,mode:F,nodeId:B})},[]),ma=g.useCallback(()=>{br(F=>({...F,open:!1}))},[]),wi=g.useCallback(()=>{cr("insert")},[cr]),Mi=g.useCallback(F=>cr("replace",F),[cr]),ga=g.useCallback(F=>{if(yMe(F),Mr.mode==="replace"&&Mr.nodeId){if(le&&Q){const B=Mr.nodeId,Z=te==null?void 0:te.find(D=>D.id===B),$=(Z==null?void 0:Z.type)==="iconNode"?Z.data.icon:void 0;if(Me(B,{data:{icon:F}}),I(null),Y(),$!==void 0){const D=$;G({do:async()=>{await Q.updateNode(B,{icon:F})},undo:async()=>{await Q.updateNode(B,{icon:D})},coalesceKey:`node:${B}:icon`})}Q.updateNode(B,{icon:F}).catch(D=>{qe(B),$!==void 0&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode (icon replace) failed",D)})}}else{const B=W.current;if(B&&le){const Z=fMe(B,{width:window.innerWidth,height:window.innerHeight});eo(F,Z)}}ma()},[Mr.mode,Mr.nodeId,le,Q,te,Me,qe,G,X,Y,eo,ma]),wn=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(D=>D.id===F),$=Z==null?void 0:Z.label;Oe(F,{label:B}),I(null),Y(),Z&&G({do:async()=>{await Q.updateConnector(F,{label:B})},undo:async()=>{await Q.updateConnector(F,{label:$})},coalesceKey:`connector:${F}:label`}),Q.updateConnector(F,{label:B}).catch(D=>{Z&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateConnector label failed",D)})},[le,Q,ie,Oe,G,X,Y]),Ro=g.useCallback((F,B,Z)=>{if(!le||!Q)return;const $=`conn-${crypto.randomUUID()}`,D=Z==null?void 0:Z.targetPin,ne=C0(Ai).connector,Pe={id:$,source:F,target:B,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...D?{targetPin:D}:{},...ne,kind:"default"},ke={id:$,source:F,target:B,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...D?{targetPin:D}:{},...ne,kind:"default"};Oe($,Pe),I(null),Y(),Q.createConnector(ke).then(({id:dt})=>{G({do:async()=>{await Q.createConnector({...ke,id:dt})},undo:async()=>{await Q.deleteConnector(dt)}})}).catch(dt=>{je($),I(dt instanceof Error?dt.message:String(dt)),console.error("createConnector failed",dt)})},[le,Q,Oe,je,G,Y]),ka=g.useCallback(({sourceNodeId:F,position:B,shape:Z})=>{if(!le||!Q)return;I(null);const $=`node-${crypto.randomUUID()}`,D=`conn-${crypto.randomUUID()}`,ne=uR[Z],Pe=C0(Ai),ke=KQ(Z,ne,Pe.node),dt={id:$,type:"shapeNode",position:B,data:ke},Tt={id:D,source:F,target:$,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...Pe.connector,kind:"default"};Me($,{id:$,type:"shapeNode",position:B,data:ke}),Oe(D,Tt),k($),Y(),(async()=>{try{await Q.createNode(dt),await Q.createConnector(Tt),G({do:async()=>{await Q.createNode(dt),await Q.createConnector(Tt)},undo:async()=>{je(D),qe($),await Q.deleteConnector(D).catch(()=>{}),await Q.deleteNode($).catch(()=>{})}})}catch(Kt){qe($),je(D),I(Kt instanceof Error?Kt.message:String(Kt)),console.error("createAndConnectFromPane failed",Kt)}})()},[le,Q,Me,qe,Oe,je,G,Y]),va=g.useRef(null),[To,bi]=g.useState(!1),Mn=g.useCallback(F=>{if(!te)return;const B=new Set(F),Z=te.filter(D=>B.has(D.id));if(Z.length===0)return;const $=(ie??[]).filter(D=>B.has(D.source)&&B.has(D.target));va.current=JSON.parse(JSON.stringify({nodes:Z,connectors:$})),bi(!0)},[te,ie]),tn=g.useCallback(F=>{if(!le||!Q)return;const B=va.current;if(!B||B.nodes.length===0)return;const{newNodes:Z,newConnectors:$}=aqe({nodes:B.nodes,connectors:B.connectors,flowPos:F,nodeIdGen:()=>`node-${crypto.randomUUID()}`,connectorIdGen:()=>`conn-${crypto.randomUUID()}`});for(const D of Z)Me(D.id,D);for(const D of $)Oe(D.id,D);d(Z.map(D=>D.id)),p($.map(D=>D.id)),I(null),Y(),(async()=>{try{for(const D of Z)await Q.createNode({id:D.id,type:D.type,position:D.position,data:D.data});for(const D of $)await Q.createConnector(D);G({do:async()=>{for(const D of Z)await Q.createNode({id:D.id,type:D.type,position:D.position,data:D.data});for(const D of $)await Q.createConnector(D)},undo:async()=>{await Promise.allSettled($.map(D=>Q.deleteConnector(D.id))),await Promise.allSettled(Z.map(D=>Q.deleteNode(D.id)))}})}catch(D){for(const ne of Z)qe(ne.id);for(const ne of $)je(ne.id);I(D instanceof Error?D.message:String(D)),console.error("paste failed",D)}})()},[le,Q,Me,qe,Oe,je,Y,G]);g.useEffect(()=>{const F=B=>{const Z=bMe({event:B,isEditableActive:Pr(document.activeElement),hasNodes:!!te&&te.length>0,hasConnectors:!!ie&&ie.length>0,selectedIds:w.current,hasClipboard:!!va.current});if(Z.type!=="noop"&&!(Z.type==="copy"||Z.type==="paste")){if(B.preventDefault(),Z.type==="selectAll"){d((te??[]).map($=>$.id)),p((ie??[]).map($=>$.id));return}Mn([...Z.ids]),tn(null)}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[te,ie,Mn,tn]),g.useEffect(()=>{const F=B=>{const Z=xMe(B);if(!Z||Pr(document.activeElement))return;const $=w.current;if($.length===0)return;const D=S.overrides,ne=(te??[]).map(ke=>{var Tt;const dt=((Tt=D[ke.id])==null?void 0:Tt.position)??ke.position;return{id:ke.id,position:dt}}),Pe=MMe(Z,$,ne);if(Pe.length!==0)if(B.preventDefault(),Pe.length===1){const ke=Pe[0];ke&&he(ke.id,ke.position)}else Ie(Pe)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[te,S.overrides,he,Ie]),g.useEffect(()=>{const F=B=>{const Z=wMe(B);if(!Z||Pr(document.activeElement))return;B.preventDefault();const $=W.current;$&&(Z==="fit"?$.fitView({padding:.2,duration:200}):Z==="in"?$.zoomIn({duration:150}):$.zoomOut({duration:150}))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const Fn=g.useCallback(F=>{if(!le||!Q||!te)return;const B=S.overrides,Z=W.current,$=F==="selection"?new Set(w.current):null,D=$?te.filter(Ne=>$.has(Ne.id)):te;if(D.length<2)return;const ne=new Set(D.map(Ne=>Ne.id)),Pe=(ie??[]).filter(Ne=>ne.has(Ne.source)&&ne.has(Ne.target)),ke=D.map(Ne=>{var Si;const it=((Si=B[Ne.id])==null?void 0:Si.position)??Ne.position,jt=Z==null?void 0:Z.getInternalNode(Ne.id),Bn=jt==null?void 0:jt.measured,Vn=Ne.data,QT=(Bn==null?void 0:Bn.width)??Vn.width??200,JT=(Bn==null?void 0:Bn.height)??Vn.height??120;return{id:Ne.id,width:QT,height:JT,position:it}}),dt=Pe.map(Ne=>({source:Ne.source,target:Ne.target})),Tt=eae(ke,dt);let Sn=Number.POSITIVE_INFINITY,Kt=Number.POSITIVE_INFINITY,Lr=Number.POSITIVE_INFINITY,wa=Number.POSITIVE_INFINITY;for(const Ne of ke){Ne.position.x<Sn&&(Sn=Ne.position.x),Ne.position.y<Kt&&(Kt=Ne.position.y);const it=Tt.get(Ne.id);it&&(it.x<Lr&&(Lr=it.x),it.y<wa&&(wa=it.y))}const Zu=Number.isFinite(Sn)&&Number.isFinite(Lr)?Sn-Lr:0,_e=Number.isFinite(Kt)&&Number.isFinite(wa)?Kt-wa:0,nt=[];for(const Ne of ke){const it=Tt.get(Ne.id);if(!it)continue;const jt={x:it.x+Zu,y:it.y+_e},Bn=jt.x-Ne.position.x,Vn=jt.y-Ne.position.y;Math.abs(Bn)<1&&Math.abs(Vn)<1||nt.push({id:Ne.id,prev:Ne.position,next:jt})}if(nt.length!==0){I(null);for(const Ne of nt)Me(Ne.id,{position:Ne.next});Y(),G({do:async()=>{await Promise.allSettled(nt.map(Ne=>Q.updateNodePosition(Ne.id,Ne.next)))},undo:async()=>{await Promise.allSettled(nt.map(Ne=>Q.updateNodePosition(Ne.id,Ne.prev)))}}),Promise.all(nt.map(async Ne=>{try{return await Q.updateNodePosition(Ne.id,Ne.next),null}catch(it){return qe(Ne.id),it instanceof Error?it.message:String(it)}})).then(Ne=>{const it=Ne.filter(Bn=>Bn!==null),jt=it[0];jt&&(I(it.length===1?jt:`${it.length} node updates failed (first: ${jt})`),console.error("Tidy: some updateNodePosition calls failed",it))})}},[le,Q,te,ie,S.overrides,Me,qe,G,Y]);g.useEffect(()=>{const F=B=>{if(!(B.metaKey||B.ctrlKey)||!B.shiftKey||B.altKey||B.key.toLowerCase()!=="l"||Pr(document.activeElement))return;B.preventDefault();const Z=w.current.length>0?"selection":"all";Fn(Z)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Fn]);const no=g.useCallback(()=>{const F=w.current.length>0?"selection":"all";Fn(F)},[Fn]);g.useEffect(()=>{const F=B=>{if(Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=CMe(B);if(Z===null)return;const $=Z==="select"?null:Z;if(H.current===$){j(null);return}j($)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{B.key==="Escape"&&(Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]')||(w.current.length>0&&d([]),v.current.length>0&&p([]),H.current!==null&&j(null)))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{if(B.key.toLowerCase()!=="f"||B.metaKey||B.ctrlKey||B.shiftKey||B.altKey||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current;if(Z.length===0)return;const $=W.current;$&&$.fitView({nodes:Z.map(D=>({id:D})),padding:.2,duration:200})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{if(B.key!=="1"||B.metaKey||B.ctrlKey||B.shiftKey||B.altKey||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=W.current;if(!Z)return;const{x:$,y:D}=Z.getViewport();Z.setViewport({x:$,y:D,zoom:1},{duration:150})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const jo=g.useCallback(F=>{var B,Z,$;switch(F){case"tool.select":j(null);return;case"tool.rectangle":j("rectangle");return;case"tool.ellipse":j("ellipse");return;case"tool.text":j("text");return;case"tool.sticky":j("sticky");return;case"tool.database":j("database");return;case"edit.undo":{if(!qn)return;(async()=>{try{const D=await Qr();D!=null&&D.entry&&await D.entry.undo()}catch(D){I(D instanceof Error?D.message:String(D)),console.error("undo failed",D)}})();return}case"edit.redo":{if(!xn)return;(async()=>{try{const D=await Po();D!=null&&D.entry&&await D.entry.do()}catch(D){I(D instanceof Error?D.message:String(D)),console.error("redo failed",D)}})();return}case"edit.copy":{const D=w.current;if(D.length===0)return;Mn([...D]);return}case"edit.paste":tn(null);return;case"edit.duplicate":{const D=w.current;if(D.length===0)return;Mn([...D]),tn(null);return}case"edit.delete":{const D=w.current,ne=v.current;if(D.length===0&&ne.length===0)return;yt([...D],[...ne]);return}case"edit.selectAll":d((te??[]).map(D=>D.id)),p((ie??[]).map(D=>D.id));return;case"view.fit":{const D=W.current;if(!D)return;D.fitView({padding:.2,duration:200});return}case"view.zoomIn":{const D=W.current;if(!D)return;D.zoomIn({duration:150});return}case"view.zoomOut":{const D=W.current;if(!D)return;D.zoomOut({duration:150});return}case"view.zoom100":{const D=W.current;if(!D)return;const{x:ne,y:Pe}=D.getViewport();D.setViewport({x:ne,y:Pe,zoom:1},{duration:150});return}case"view.zoomToSelection":{const D=w.current;if(D.length===0)return;const ne=W.current;if(!ne)return;ne.fitView({nodes:D.map(Pe=>({id:Pe})),padding:.2,duration:200});return}case"layout.tidy":{const D=w.current.length>0?"selection":"all";Fn(D);return}case"selection.deselect":w.current.length>0&&d([]),v.current.length>0&&p([]),H.current!==null&&j(null);return;case"help.commandPalette":U(!0);return;case"export.pdf":{(B=b.current)==null||B.exportPdf();return}case"export.png":{(Z=b.current)==null||Z.exportPng();return}case"session.reset":{($=x.current)==null||$.call(x);return}}},[qn,xn,Qr,Po,Mn,tn,yt,te,ie,Fn]);g.useEffect(()=>{const F=B=>{(B.metaKey||B.ctrlKey)&&(B.shiftKey||B.altKey||B.key.toLowerCase()==="p"&&(B.preventDefault(),!Pr(document.activeElement)&&jo("help.commandPalette")))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[jo]),g.useEffect(()=>{x.current=c??null},[c]);const Hn=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(ne=>ne.id===F),$=Z?{source:Z.source,target:Z.target,sourceHandle:Z.sourceHandle,targetHandle:Z.targetHandle,sourceHandleAutoPicked:Z.sourceHandleAutoPicked,targetHandleAutoPicked:Z.targetHandleAutoPicked,sourcePin:Z.sourcePin??null,targetPin:Z.targetPin??null}:null,D={...B.source!==void 0?{source:B.source}:{},...B.target!==void 0?{target:B.target}:{},...B.sourceHandle!==void 0?{sourceHandle:B.sourceHandle===null?void 0:B.sourceHandle}:{},...B.targetHandle!==void 0?{targetHandle:B.targetHandle===null?void 0:B.targetHandle}:{},...B.sourceHandleAutoPicked!==void 0?{sourceHandleAutoPicked:B.sourceHandleAutoPicked}:{},...B.targetHandleAutoPicked!==void 0?{targetHandleAutoPicked:B.targetHandleAutoPicked}:{},...B.sourcePin!==void 0?{sourcePin:B.sourcePin===null?void 0:B.sourcePin}:{},...B.targetPin!==void 0?{targetPin:B.targetPin===null?void 0:B.targetPin}:{}};if(Oe(F,D),I(null),Y(),$){const ne=$;G({do:async()=>{await Q.updateConnector(F,B)},undo:async()=>{await Q.updateConnector(F,ne)},coalesceKey:`connector:${F}:reconnect`})}Q.updateConnector(F,B).catch(ne=>{je(F),$&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateConnector reconnect failed",ne)})},[le,Q,ie,Oe,je,G,X,Y]),xa=g.useCallback((F,B,Z)=>{if(!le||!Q)return;const $=ie==null?void 0:ie.find(Pe=>Pe.id===F),D=$?B==="source"?$.sourcePin:$.targetPin:void 0,ne=B==="source"?"sourcePin":"targetPin";if(Oe(F,{[ne]:Z}),I(null),Y(),$){const Pe={[ne]:D??null};G({do:async()=>{await Q.updateConnector(F,{[ne]:Z})},undo:async()=>{await Q.updateConnector(F,Pe)},coalesceKey:`connector:${F}:${ne}`})}Q.updateConnector(F,{[ne]:Z}).catch(Pe=>{je(F),$&&X(),I(Pe instanceof Error?Pe.message:String(Pe)),console.error("updateConnector pin failed",Pe)})},[le,Q,ie,Oe,je,G,X,Y]),Cr=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(ne=>ne.id===F),$=Z?B==="source"?Z.sourcePin:Z.targetPin:void 0;if(!$)return;const D=B==="source"?"sourcePin":"targetPin";Oe(F,{[D]:void 0}),I(null),Y(),G({do:async()=>{await Q.updateConnector(F,{[D]:null})},undo:async()=>{await Q.updateConnector(F,{[D]:$})}}),Q.updateConnector(F,{[D]:null}).catch(ne=>{je(F),X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateConnector unpin failed",ne)})},[le,Q,ie,Oe,je,G,X,Y]),st=n==null?void 0:n.demo,Sr=S.overrides,bn=C.overrides,Cn=L.ids,Ci=P.ids,Gu=g.useMemo(()=>{if(!st||u.length===0)return[];const F=new Map(st.nodes.map(Z=>[Z.id,Z])),B=[];for(const Z of u){const $=F.get(Z);if(!$)continue;const D=Sr[Z];if(!D){B.push($);continue}const ne=D.data?{...$.data,...D.data}:$.data;B.push({...$,...D,data:ne})}return B},[st,u,Sr]),YT=g.useMemo(()=>{if(!st||f.length===0)return[];const F=new Map(st.connectors.map(Z=>[Z.id,Z])),B=[];for(const Z of f){const $=F.get(Z);if(!$)continue;const D=bn[Z];B.push(D?{...$,...D}:$)}return B},[st,f,bn]),ro=g.useMemo(()=>{if(!st)return null;if(!T)return st.nodes;const F=new Map(st.nodes.map($=>[$.id,$])),B=[],Z=new Set;for(const $ of T){const D=F.get($);D&&(B.push(D),Z.add($))}for(const $ of st.nodes)Z.has($.id)||B.push($);return B},[st,T]),Ku=g.useMemo(()=>{const F=ro??(st==null?void 0:st.nodes)??null;return F?Cn.size===0?F:F.filter(B=>!Cn.has(B.id)):null},[ro,st,Cn]),Of=g.useMemo(()=>{const F=(st==null?void 0:st.connectors)??null;return F?Ci.size===0&&Cn.size===0?F:F.filter(B=>!Ci.has(B.id)&&!Cn.has(B.source)&&!Cn.has(B.target)):null},[st,Ci,Cn]);if(!l)return m.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 bg-background p-6 text-center",children:[m.jsxs("p",{className:"text-sm font-medium",children:["Unknown demo: ",e]}),m.jsx("p",{className:"text-xs text-muted-foreground",children:"The slug may have been removed. Re-register from the project repo to bring it back."})]});if(r&&!n)return m.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"Loading demo…"});const No=u[0],Ff=No?i[No]:void 0;return m.jsxs("div",{className:"relative h-full w-full",children:[n&&!n.valid?m.jsxs("div",{"data-testid":"demo-error-banner",className:"absolute inset-x-0 top-0 z-10 border-b border-rose-500/40 bg-rose-50 px-4 py-2 text-xs text-rose-900 shadow-xs dark:bg-rose-950/40 dark:text-rose-100",children:[m.jsx("span",{className:"font-medium uppercase tracking-wide",children:"Invalid demo: "}),m.jsx("span",{className:"font-mono",children:n.error})]}):null,st&&Q?m.jsx(Xze,{ref:b,mode:"edit",adapter:Q,projectId:le??void 0,enableEmbed:!1,onExportToCloud:le?()=>ge(!0):void 0,onRestartDemo:c,nodes:Ku??st.nodes,connectors:Of??st.connectors,selectedNodeIds:u,selectedConnectorIds:f,onSelectionChange:we,runtime:{runs:o,statuses:i,pendingOverrides:{nodes:Sr,connectors:bn}},onPlayNode:s,onNodePositionChange:he,onNodePositionsChange:Ie,onNodeResize:He,onHtmlNodeFitToContent:Ue,onMultiResize:Rt,onNodeNameChange:_o,onNodeDescriptionChange:On,onConnectorLabelChange:wn,onCreateShapeNode:Gt,onCreateImageFromFile:le?xi:void 0,onRetryImageUpload:le?ya:void 0,onCreateHtmlNode:le?pa:void 0,iconPickerOpen:Mr.open,onOpenIconPicker:le?wi:void 0,onCloseIconPicker:le?ma:void 0,onPickIcon:le?ga:void 0,onRequestIconReplace:le?Mi:void 0,onCreateConnector:Ro,onReconnectConnector:Hn,onPinEndpoint:le?xa:void 0,onUnpinEndpoint:le?Cr:void 0,onReorderNode:Ve,onDeleteNode:Wu,onCopyNode:F=>Mn([F]),onPasteAt:tn,onCopySelection:le?Mn:void 0,onPasteSelection:le?()=>tn(null):void 0,onToggleNodeLock:le?$u:void 0,hasClipboard:To,selectedNodes:Gu,selectedConnectors:YT,onStyleNode:Dn,onStyleNodePreview:Pt,onStyleNodes:en,onStyleNodesPreview:sr,onStyleConnector:Uu,onStyleConnectorPreview:Dt,onRfInit:q,onTidy:te?no:void 0,onCreateAndConnectFromPane:ka,pendingEditNodeId:y,activeShape:V,onSelectShape:j,statusReport:Ff,onNameChange:_o,onDescriptionChange:On,onDetailChange:Jr,onIconChange:un,autoFitView:!0,autoFitViewSignal:z}):m.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"No demo data yet."}),A?m.jsxs("div",{"data-testid":"edit-error-banner",className:"absolute inset-x-0 bottom-4 z-20 mx-auto w-fit max-w-[80%] rounded-md border border-rose-500/50 bg-rose-50 px-3 py-2 text-xs text-rose-900 shadow-md dark:bg-rose-950/60 dark:text-rose-100",children:[m.jsx("span",{className:"font-medium",children:"Couldn't save change: "}),m.jsx("span",{className:"font-mono",children:A}),m.jsx("button",{type:"button",className:"ml-3 underline underline-offset-2",onClick:()=>I(null),children:"Dismiss"})]}):null,m.jsx(xDe,{open:O,onOpenChange:U,runCommand:jo,ctx:{hasSelection:u.length>0||f.length>0,canUndo:qn,canRedo:xn,hasClipboard:To,canExportDemo:!!le,canResetSession:!!c}}),le?m.jsx(ODe,{open:ue,onOpenChange:ge,projectId:le,onCapturePreview:()=>{var F;return((F=b.current)==null?void 0:F.capturePreview())??Promise.resolve(void 0)}}):null]})}const Mte="npx seeflow register --path .";function fqe(){const[e,t]=g.useState(!1),n=async()=>{try{await navigator.clipboard.writeText(Mte),t(!0),setTimeout(()=>t(!1),1200)}catch(r){console.error("[empty-state] copy failed",r)}};return m.jsx("div",{"data-testid":"seeflow-empty-state",className:"flex h-full w-full items-center justify-center bg-background p-6",children:m.jsxs("div",{className:"flex max-w-lg flex-col items-center gap-6 text-center",children:[m.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-muted",children:m.jsx(o2,{className:"h-6 w-6 text-muted-foreground"})}),m.jsxs("div",{className:"space-y-2",children:[m.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:"No demos registered yet"}),m.jsxs("p",{className:"text-sm text-muted-foreground",children:["Point SeeFlow at any folder containing a"," ",m.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:".seeflow/seeflow.json"})," ","file and it'll appear here."]})]}),m.jsxs("div",{className:"flex w-full items-center gap-2 rounded-md border border-border bg-card px-3 py-2 font-mono text-sm",children:[m.jsx("span",{className:"text-muted-foreground select-none",children:"$"}),m.jsx("code",{className:"flex-1 truncate text-left",children:Mte}),m.jsx(Ft,{type:"button",variant:"ghost",size:"sm",onClick:n,"aria-label":"Copy register command",children:e?m.jsx(Ja,{className:"h-4 w-4"}):m.jsx(T1,{className:"h-4 w-4"})})]})]})})}function pqe({demos:e}){return e.length===0?m.jsx(fqe,{}):m.jsx("div",{className:"flex h-full w-full items-start justify-center overflow-y-auto bg-background p-8",children:m.jsxs("div",{"data-testid":"studio-home-picker",className:"flex w-full max-w-2xl flex-col gap-6 pt-8",children:[m.jsxs("div",{className:"space-y-1",children:[m.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Open a demo"}),m.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.length," demos registered — pick one to load its canvas."]})]}),m.jsx("ul",{className:"flex flex-col gap-2",children:e.map(t=>m.jsx("li",{children:m.jsxs("button",{type:"button",onClick:()=>md(`/d/${t.slug}`),"data-testid":`studio-home-demo-${t.slug}`,className:"flex w-full flex-col items-start gap-0.5 rounded-lg border border-border bg-card px-4 py-3 text-left transition-colors hover:border-input",style:{boxShadow:"var(--shadow-card)"},children:[m.jsx("span",{className:"text-sm font-medium",children:t.name}),m.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t.repoPath})]})},t.id))})]})})}const yqe=e=>{if(!e.startsWith("/d/"))return null;const t=e.slice(3);return t.length>0?decodeURIComponent(t):null};function mqe(){const e=Jze(),{demos:t,refresh:n}=rDe(),r=yqe(e),o=r?(t??[]).find(C=>C.slug===r):void 0,a=(o==null?void 0:o.id)??null,{detail:i,loading:s,refresh:c}=nDe(a),{runs:l,apply:u}=lDe(a),{events:d,apply:f}=sDe(a),{statusByNode:p,apply:y,reset:k}=fDe(a),w=g.useCallback(()=>{k(),c(),n()},[c,n,k]),v=g.useCallback(C=>{u(C),f(C),y(C)},[u,f,y]);pDe(a,{onReload:w,onEvent:v});const M=g.useCallback(async()=>{if(a)try{await Efe(a)}catch(C){console.error("Failed to restart demo:",C)}},[a]),x=g.useCallback(C=>{ste(C.id),n()},[n]),b=g.useCallback(async C=>{await n(),a===C&&md("/")},[n,a]);g.useEffect(()=>{if(e!=="/"||t===null)return;const C=mDe(t,yDe());C&&md(`/d/${C.slug}`)},[e,t]),g.useEffect(()=>{o&&ste(o.id)},[o]);const S=g.useCallback(C=>{a&&Afe(a,C).catch(L=>{u({type:"node:error",nodeId:C,message:L instanceof Error?L.message:String(L),ts:Date.now()})})},[a,u]);return t===null?m.jsx("div",{className:"flex h-full w-full items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):m.jsx(d2,{delayDuration:150,children:m.jsxs("div",{className:"flex h-full w-full flex-col bg-background text-foreground",children:[m.jsx(tDe,{demos:t,currentSlug:r??void 0,onProjectCreated:x,onProjectUnregistered:b}),m.jsx("main",{className:"min-h-0 flex-1",children:r?m.jsx(hqe,{slug:r,demos:t,detail:i,loading:s,runs:l,nodeEvents:d,statusByNode:p,onPlayNode:S,onRestartDemo:a?M:void 0}):m.jsx(pqe,{demos:t})})]})})}const Mde=document.getElementById("root");if(!Mde)throw new Error("Root element #root not found");MF.createRoot(Mde).render(m.jsx(ho.StrictMode,{children:m.jsx(mqe,{})}));export{PNe as _,Ba as c,gd as g,vqe as z};
7838
+ `)}async function xze(e,t){const n=t.fontEmbedCSS!=null?t.fontEmbedCSS:t.skipFonts?null:await vze(e,t);if(n){const r=document.createElement("style"),o=document.createTextNode(n);r.appendChild(o),e.firstChild?e.insertBefore(r,e.firstChild):e.appendChild(r)}}async function wze(e,t={}){const{width:n,height:r}=Y1e(e,t),o=await ZT(e,t,!0);return await xze(o,t),await rde(o,t),pze(o,t),await qNe(o,n,r)}async function Mze(e,t={}){const{width:n,height:r}=Y1e(e,t),o=await wze(e,t),a=await xR(o),i=document.createElement("canvas"),s=i.getContext("2d"),c=t.pixelRatio||NNe(),l=t.canvasWidth||n,u=t.canvasHeight||r;return i.width=l*c,i.height=u*c,t.skipAutoScale||zNe(i),i.style.width=`${l}`,i.style.height=`${u}`,t.backgroundColor&&(s.fillStyle=t.backgroundColor,s.fillRect(0,0,i.width,i.height)),s.drawImage(a,0,0,i.width,i.height),i}async function bze(e,t={}){return(await Mze(e,t)).toDataURL()}const Cze=e=>e instanceof Element?!(e.classList.contains("react-flow__minimap")||e.classList.contains("react-flow__controls")||e.classList.contains("react-flow__panel")):!0,Sze=async e=>{const t=await bze(e,{cacheBust:!0,filter:Cze}),n=await new Promise((r,o)=>{const a=new Image;a.onload=()=>r({width:a.naturalWidth,height:a.naturalHeight}),a.onerror=()=>o(new Error("Failed to decode captured image")),a.src=t});return{dataUrl:t,...n}},Lze=(e,t)=>{const n=document.createElement("a");n.href=e,n.download=t,n.rel="noopener",document.body.appendChild(n),n.click(),n.remove()},Ize=e=>{const t=e.replace(/[^A-Za-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"");return t.length>0?t.slice(0,80):"canvas"},Qee=(e,t)=>`${Ize(e??"canvas")}.${t}`,Eze=({projectId:e,getReactFlow:t})=>{const[n,r]=g.useState(null),o=g.useCallback(()=>r(null),[]),a=g.useCallback(async()=>{const l=t();if(!l)return null;const u=document.querySelector(".react-flow__viewport");if(!u)return null;const d=l.getViewport();try{return await l.fitView({duration:0,padding:.1}),await new Promise(f=>requestAnimationFrame(()=>f())),await Sze(u)}finally{l.setViewport(d,{duration:0})}},[t]),i=g.useCallback(async()=>{r(null);try{const l=await a();if(!l)return;Lze(l.dataUrl,Qee(e,"png"))}catch(l){r(l instanceof Error?l.message:String(l))}},[a,e]),s=g.useCallback(async()=>{r(null);try{const l=await a();if(!l)return;const{jsPDF:u}=await PNe(async()=>{const{jsPDF:p}=await import("./jspdf.es.min-xZpq8bcn.js").then(y=>y.j);return{jsPDF:p}},[]),d=l.width>l.height?"landscape":"portrait",f=new u({orientation:d,unit:"px",format:[l.width,l.height],hotfixes:["px_scaling"]});f.addImage(l.dataUrl,"PNG",0,0,l.width,l.height),f.save(Qee(e,"pdf"))}catch(l){r(l instanceof Error?l.message:String(l))}},[a,e]),c=g.useCallback(async()=>{const l=await a();return l==null?void 0:l.dataUrl},[a]);return{exportPdf:s,exportPng:i,capturePreview:c,lastError:n,clearError:o}},Aze={showToolbar:!0,showStyleStrip:!0,showDetailPanel:!0,showStatusBadges:!0,showResizeHandles:!0,showControls:!0,showShareMenu:!0,showRestart:!0,enableKeyboard:!0,enableContextMenu:!0,enableDragDrop:!0,enableImageDrop:!0,enableZoom:!0,enablePan:!0,enableSelection:!0,enableNodeMove:!0,enableEmbed:!1},Pze={showToolbar:!1,showStyleStrip:!1,showDetailPanel:!1,showStatusBadges:!0,showResizeHandles:!1,showControls:!0,showShareMenu:!0,showRestart:!1,enableKeyboard:!1,enableContextMenu:!1,enableDragDrop:!1,enableImageDrop:!1,enableZoom:!0,enablePan:!0,enableSelection:!0,enableNodeMove:!0,enableEmbed:!1},_ze={showToolbar:!1,showStyleStrip:!1,showDetailPanel:!1,showStatusBadges:!1,showResizeHandles:!1,showControls:!1,showShareMenu:!1,showRestart:!1,enableKeyboard:!1,enableContextMenu:!1,enableDragDrop:!1,enableImageDrop:!1,enableZoom:!1,enablePan:!1,enableSelection:!1,enableNodeMove:!1,enableEmbed:!1};function Rze(e){const t=e.mode==="edit"?Aze:e.mode==="mini"?_ze:Pze;return{showToolbar:e.showToolbar??t.showToolbar,showStyleStrip:e.showStyleStrip??t.showStyleStrip,showDetailPanel:e.showDetailPanel??t.showDetailPanel,showStatusBadges:e.showStatusBadges??t.showStatusBadges,showResizeHandles:e.showResizeHandles??t.showResizeHandles,showControls:e.showControls??t.showControls,showShareMenu:e.showShareMenu??t.showShareMenu,showRestart:e.showRestart??t.showRestart,enableKeyboard:e.enableKeyboard??t.enableKeyboard,enableContextMenu:e.enableContextMenu??t.enableContextMenu,enableDragDrop:e.enableDragDrop??t.enableDragDrop,enableImageDrop:e.enableImageDrop??t.enableImageDrop,enableZoom:e.enableZoom??t.enableZoom,enablePan:e.enablePan??t.enablePan,enableSelection:e.enableSelection??t.enableSelection,enableNodeMove:e.enableNodeMove??t.enableNodeMove,enableEmbed:e.enableEmbed??t.enableEmbed}}const Jee=40,ih={padding:.15,duration:300,includeHiddenNodes:!1};function Tze(e){return e===void 0||e===!1?{onMount:!1,onExternalNodeChange:!1}:e===!0?{onMount:!0,onExternalNodeChange:!0}:{onMount:e.onMount??!0,onExternalNodeChange:e.onExternalNodeChange??!0}}const ete=e=>{if("clientX"in e)return{clientX:e.clientX,clientY:e.clientY};const t=e.changedTouches[0]??e.touches[0];return t?{clientX:t.clientX,clientY:t.clientY}:null},jze=(e,t)=>{var r;const n=document.elementsFromPoint(e,t);for(const o of n){const a=(r=o.closest)==null?void 0:r.call(o,".react-flow__node");if(a)return a}return null},ade=15,xF=(e,t,n)=>{const r=jze(t,n);if(r)return r;if(!e)return null;let o=null,a=ade;const i=e.querySelectorAll(".react-flow__node");for(const s of i){const c=s.getBoundingClientRect();if(c.width===0||c.height===0)continue;const l=Math.max(c.left-t,0,t-c.right),u=Math.max(c.top-n,0,n-c.bottom),d=Math.hypot(l,u);d<=a&&(o=s,a=d)}return o};function tte(e,t,n,r,o){if(e==="source"?(r==null?void 0:r.targetPin)!==void 0||(r==null?void 0:r.targetHandleAutoPicked)===!1:(r==null?void 0:r.sourcePin)!==void 0||(r==null?void 0:r.sourceHandleAutoPicked)===!1)return;const i=e==="source"?n:t,s=e==="source"?t:n,c=o(i),l=o(s);if(!c||!l)return;const u=c.measured.width??c.width??0,d=c.measured.height??c.height??0,f=l.measured.width??l.width??0,p=l.measured.height??l.height??0;if(u===0||d===0||f===0||p===0)return;const y={x:c.internals.positionAbsolute.x,y:c.internals.positionAbsolute.y,w:u,h:d},k={x:l.internals.positionAbsolute.x+f/2,y:l.internals.positionAbsolute.y+p/2};return tMe(y,rR(y,k))}function Nze(e,t,n,r){if(r===null)return"no-op";const o=e==="source"?t:n;return r===(e==="source"?n:t)?"self-loop":r===o?"pin-own":"reconnect-and-pin"}const zze=(e,t)=>{if(!t)return e;const n=t.data?{...e.data,...t.data}:e.data;return{...e,...t,data:n}},Dze=(e,t)=>t?{...e,...t}:e,qze={playNode:dCe,stateNode:RCe,shapeNode:CCe,imageNode:tbe,iconNode:hMe,htmlNode:XMe},Oze={editableEdge:jCe},Fze={zIndex:0},Hze=8,nte=(e,t)=>e?typeof e=="string"?`url('#${e}')`:`url('#${`${t?`${t}__`:""}${Object.keys(e).sort().map(o=>`${o}=${e[o]}`).join("&")}`}')`:void 0,Bze=e=>function({fromX:n,fromY:r,toX:o,toY:a,fromPosition:i,toPosition:s,connectionLineStyle:c}){const l=Fe(W=>e.current?W.edges.find(q=>q.reconnectable===!0)??null:null),u=l==null?void 0:l.data,d=Fe(W=>{var R;const q=W.connection;return((R=q==null?void 0:q.fromHandle)==null?void 0:R.nodeId)??null}),f=Fe(W=>l!=null&&l.source?W.nodeLookup.get(l.source)??null:null),p=Fe(W=>l!=null&&l.target?W.nodeLookup.get(l.target)??null:null),y=Fe(W=>d?W.nodeLookup.get(d)??null:null),k=(l==null?void 0:l.source)===d,w=l?k?f:p:y,v=k?p:f,M=k?u==null?void 0:u.sourcePin:u==null?void 0:u.targetPin,x=k?u==null?void 0:u.sourceHandleAutoPicked:u==null?void 0:u.targetHandleAutoPicked;let b=n,S=r,C=i;if(w){const W=w.measured.width??w.width??0,q=w.measured.height??w.height??0;if(W>0&&q>0){const R={x:w.internals.positionAbsolute.x,y:w.internals.positionAbsolute.y,w:W,h:q};let G=null;if(M)G=oR(R,M);else if(x!==!1&&v){const X=v.measured.width??v.width??0,Y=v.measured.height??v.height??0;if(X>0&&Y>0){const oe={x:v.internals.positionAbsolute.x+X/2,y:v.internals.positionAbsolute.y+Y/2};G=rR(R,oe)}}G&&(b=G.x,S=G.y,C=rte[G.side])}}const L=Fe(W=>W.transform[2]),P=Fe(W=>W.nodeLookup),T=Fe(W=>{var q;return((q=W.connection.toHandle)==null?void 0:q.nodeId)??null});let _=o,A=a,I=s;if(L>0){const W=ade/L,q=l?k?l.target:l.source:null;let R=null;if(T&&T!==q){const G=P.get(T)??null;G&&(R=G)}if(!R){let G=W;for(const X of P.values()){if(q&&X.id===q||w&&X.id===w.id)continue;const Y=X.measured.width??X.width??0,oe=X.measured.height??X.height??0;if(Y===0||oe===0)continue;const ee=X.internals.positionAbsolute.x,ae=X.internals.positionAbsolute.y,ve=Math.max(ee-o,0,o-(ee+Y)),Se=Math.max(ae-a,0,a-(ae+oe)),be=Math.hypot(ve,Se);be<=G&&(G=be,R=X)}}if(!R&&l&&w){const G=w.measured.width??w.width??0,X=w.measured.height??w.height??0;if(G>0&&X>0){const Y=w.internals.positionAbsolute.x,oe=w.internals.positionAbsolute.y,ee=Math.max(Y-o,0,o-(Y+G)),ae=Math.max(oe-a,0,a-(oe+X));Math.hypot(ee,ae)<=W&&(R=w)}}if(R){const G=R.measured.width??R.width??0,X=R.measured.height??R.height??0;if(G>0&&X>0){const Y=DH({x:R.internals.positionAbsolute.x,y:R.internals.positionAbsolute.y,w:G,h:X},{x:o,y:a}),oe=oR({x:R.internals.positionAbsolute.x,y:R.internals.positionAbsolute.y,w:G,h:X},Y);_=oe.x,A=oe.y,I=rte[oe.side]}}}const V=(u==null?void 0:u.path)==="step",[j]=V?H2({sourceX:b,sourceY:S,sourcePosition:C,targetX:_,targetY:A,targetPosition:I,borderRadius:Hze}):uT({sourceX:b,sourceY:S,sourcePosition:C,targetX:_,targetY:A,targetPosition:I}),H=(l==null?void 0:l.style)??c??void 0,O=Fe(W=>W.rfId),U=k?l==null?void 0:l.markerStart:l==null?void 0:l.markerEnd,z=k?l==null?void 0:l.markerEnd:l==null?void 0:l.markerStart,N=nte(U,O),E=nte(z,O);return m.jsx("path",{d:j,fill:"none",className:"react-flow__connection-path",style:H,markerStart:N,markerEnd:E})},rte={top:me.Top,right:me.Right,bottom:me.Bottom,left:me.Left};function Vze({storeApiRef:e}){const t=vt();return g.useEffect(()=>(e.current=t,()=>{e.current===t&&(e.current=null)}),[t,e]),null}function $ze({wrapperRef:e}){const t=Fe(r=>r.transform[2]),n=e.current;return n&&n.style.setProperty("--rf-zoom",String(t)),null}const Uze=new Set(["INPUT","TEXTAREA","SELECT"]),ide=e=>e?Uze.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1;function Wze(e){const{event:t,selectedNodeIds:n,hasClipboard:r,activeElement:o,onCopySelection:a,onPasteSelection:i}=e;if(!(t.metaKey||t.ctrlKey)||t.shiftKey||t.altKey)return!1;const s=t.key.toLowerCase();return s!=="c"&&s!=="v"||ide(o)?!1:s==="c"?n.length===0||!a?!1:(t.preventDefault(),a([...n]),!0):!r||!i?!1:(t.preventDefault(),i(),!0)}const ote=(e,t)=>{var n;return((n=e==null?void 0:e[t])==null?void 0:n.status)??"idle"},Gze=(e,t)=>{var n;return(n=e==null?void 0:e[t])==null?void 0:n.status},Kze=(e,t)=>{var n,r;return((n=e==null?void 0:e[t])==null?void 0:n.status)==="error"?(r=e[t])==null?void 0:r.error:void 0};function Zze(e,t){var mU,gU;const{mode:n,adapter:r,projectId:o,nodes:a,connectors:i,selectedNodeIds:s,selectedConnectorIds:c,onSelectionChange:l,runtime:u,onPlayNode:d,onNodePositionChange:f,onNodePositionsChange:p,onNodeResize:y,onHtmlNodeFitToContent:k,onMultiResize:w,onNodeNameChange:v,onNodeDescriptionChange:M,onConnectorLabelChange:x,onCreateShapeNode:b,onCreateImageFromFile:S,onRetryImageUpload:C,onCreateHtmlNode:L,onCreateConnector:P,onReconnectConnector:T,onReorderNode:_,onDeleteNode:A,onCopyNode:I,onPasteAt:V,hasClipboard:j,onCopySelection:H,onPasteSelection:O,selectedNodes:U,selectedConnectors:z,onStyleNode:N,onStyleNodePreview:E,onStyleNodes:W,onStyleNodesPreview:q,onStyleConnector:R,onStyleConnectorPreview:G,onRfInit:X,onTidy:Y,onNodeClick:oe,onConnectorClick:ee,onPaneClick:ae,onCreateAndConnectFromPane:ve,pendingEditNodeId:Se,iconPickerOpen:be,onOpenIconPicker:we,onCloseIconPicker:te,onPickIcon:ie,onRequestIconReplace:Te,onPinEndpoint:Ae,onUnpinEndpoint:at,onToggleNodeLock:Qe,activeShape:le,onSelectShape:Q,disableSidebar:ue,statusReport:ge,onNameChange:Me,onDescriptionChange:qe,onDetailChange:re,onIconChange:he,autoFitView:Ie,autoFitViewSignal:He,customIcons:Ue,onExportToCloud:Rt,onRestartDemo:Oe,showToolbar:je,showStyleStrip:Pt,showDetailPanel:sr,showStatusBadges:Dt,showResizeHandles:Dn,showControls:en,showShareMenu:$u,showRestart:Uu,enableKeyboard:da,enableContextMenu:ha,enableDragDrop:Xr,enableImageDrop:gi,enableZoom:fa,enablePan:xr,enableSelection:Yr,enableNodeMove:wr,enableEmbed:Wu}=e,Ve=g.useMemo(()=>Rze({mode:n,showToolbar:je,showStyleStrip:Pt,showDetailPanel:sr,showStatusBadges:Dt,showResizeHandles:Dn,showControls:en,showShareMenu:$u,showRestart:Uu,enableKeyboard:da,enableContextMenu:ha,enableDragDrop:Xr,enableImageDrop:gi,enableZoom:fa,enablePan:xr,enableSelection:Yr,enableNodeMove:wr,enableEmbed:Wu}),[n,je,Pt,sr,Dt,Dn,en,$u,Uu,da,ha,Xr,gi,fa,xr,Yr,wr,Wu]),yt=n==="edit",Qr=g.useRef(Ve);g.useEffect(()=>{Qr.current=Ve},[Ve]);const Po=Ie??(n==="mini"?!0:void 0),qn=g.useMemo(()=>Tze(Po),[Po]),xn=u==null?void 0:u.runs,_o=u==null?void 0:u.statuses,On=(mU=u==null?void 0:u.pendingOverrides)==null?void 0:mU.nodes,Jr=(gU=u==null?void 0:u.pendingOverrides)==null?void 0:gU.connectors,un=g.useRef(null),Gt=g.useRef(null),eo=g.useRef(!1),pa=g.useRef(!1),to=g.useRef(!1),ki=g.useRef(qn);ki.current=qn,g.useEffect(()=>{if(eo.current||!qn.onMount||a.length===0)return;const K=Gt.current;K&&(K.fitView(ih),eo.current=!0)},[a,qn.onMount]);const vi=g.useRef(null),mt=le,xi=Q,ya=g.useRef(new Map),Mr=g.useCallback((K,J)=>(ya.current.set(K,J),()=>{ya.current.get(K)===J&&ya.current.delete(K)}),[]),[br,cr]=g.useState(!1),ma=g.useRef(!1);g.useEffect(()=>{ma.current=br},[br]);const wi=g.useRef(!1),Mi=g.useRef(!1),ga=g.useRef(!1),[wn,Ro]=g.useState(null),ka=g.useRef(null);g.useEffect(()=>{ka.current=wn},[wn]),g.useCallback(()=>{Ro(null)},[]);const va=g.useMemo(()=>Bze(ga),[]),To=g.useRef(null),bi=g.useRef(null),Mn=g.useCallback(K=>{const J=un.current;if(!J){To.current=K;return}const se=To.current;if(se&&se!==K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);de==null||de.removeAttribute("data-connect-source")}if(K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);de==null||de.setAttribute("data-connect-source","true")}To.current=K},[]),tn=g.useCallback(K=>{const J=un.current,se=bi.current;if(se!==K){if(J&&se){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(se)}"]`);de==null||de.removeAttribute("data-connect-target")}if(J&&K){const de=J.querySelector(`.react-flow__node[data-id="${CSS.escape(K)}"]`);de==null||de.setAttribute("data-connect-target","true")}bi.current=K}},[]),Fn=g.useCallback(()=>{Mn(null),tn(null)},[Mn,tn]);g.useEffect(()=>{if(!br){tn(null);return}const K=J=>{const se=xF(un.current,J.clientX,J.clientY),de=(se==null?void 0:se.getAttribute("data-id"))??null;if(de&&de===To.current){tn(null);return}tn(de)};return document.addEventListener("pointermove",K),()=>{document.removeEventListener("pointermove",K)}},[br,tn]);const[no,jo]=g.useState(null),[Hn,xa]=g.useState(null),Cr=g.useRef(null),st=g.useRef(null),Sr=g.useRef(null),bn=g.useRef(!1);g.useEffect(()=>{Cr.current=mt},[mt]);const Cn=g.useCallback(()=>{xi(null),jo(null),xa(null),Cr.current=null,st.current=null,Sr.current=null,bn.current=!1},[xi]);g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=J=>{var ye,ze;if(J.key!=="Escape"||ide(document.activeElement))return;if(Cr.current){J.preventDefault(),Cn();return}if(ma.current){J.preventDefault(),wi.current=!0,Mi.current=!0;try{(ye=vi.current)==null||ye.getState().cancelConnection()}catch{}document.dispatchEvent(new MouseEvent("mouseup",{bubbles:!0,cancelable:!0,button:0})),cr(!1);return}if(ka.current){J.preventDefault(),Ro(null);return}const se=Ir.current.size>0,de=zo.current.size>0;(se||de)&&(J.preventDefault(),(ze=oo.current)==null||ze.call(oo,[],[]))};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[Cn,Ve.enableKeyboard]),g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=J=>{Wze({event:J,selectedNodeIds:s,hasClipboard:!!j,activeElement:document.activeElement,onCopySelection:H,onPasteSelection:O})};return window.addEventListener("keydown",K),()=>window.removeEventListener("keydown",K)},[s,j,H,O,Ve.enableKeyboard]);const Ci=g.useCallback(K=>{var de,ye;if(!Cr.current)return;const J=K.target;if(!(J!=null&&J.classList.contains("react-flow__pane")))return;const se={x:K.clientX,y:K.clientY};bn.current=!0,st.current=se,Sr.current=se,jo(se),xa(se);try{(ye=(de=K.currentTarget).setPointerCapture)==null||ye.call(de,K.pointerId)}catch{}K.preventDefault(),K.stopPropagation()},[]),Gu=g.useCallback(K=>{if(!bn.current)return;const J={x:K.clientX,y:K.clientY};Sr.current=J,xa(J)},[]),YT=g.useCallback(K=>{var Sa,kU;if(!bn.current)return;bn.current=!1;try{(kU=(Sa=K.currentTarget).releasePointerCapture)==null||kU.call(Sa,K.pointerId)}catch{}const J=st.current,se=Sr.current,de=Cr.current,ye=Gt.current;if(Cn(),!J||!se||!de||!ye)return;const ze=Math.min(J.x,se.x),xe=Math.min(J.y,se.y),Ee=Math.max(J.x,se.x),Je=Math.max(J.y,se.y),ht=Ee-ze,qt=Je-xe,Re=ye.screenToFlowPosition({x:ze,y:xe}),rt=ye.screenToFlowPosition({x:Ee,y:Je}),Ze=rt.x-Re.x,Ei=rt.y-Re.y,Ca=ht<Jee||qt<Jee,Do=Ca?uR[de].width:Ze,Zf=Ca?uR[de].height:Ei;b==null||b(de,Re,{width:Do,height:Zf})},[Cn,b]),ro=g.useRef(!1),Ku=g.useRef(!1),Of=g.useRef(new Map),No=g.useCallback(()=>{var K;pa.current&&(Ku.current||ro.current||(pa.current=!1,(K=Gt.current)==null||K.fitView(ih)))},[]),Ff=g.useCallback(K=>{Ku.current=K,K||No()},[No]);g.useEffect(()=>{var K;if(!to.current){to.current=!0;return}if(ki.current.onExternalNodeChange){if(Ku.current||ro.current){pa.current=!0;return}(K=Gt.current)==null||K.fitView(ih)}},[He]);const Hd=!!_||!!A||!!I||!!V||!!at,[dn,F]=g.useState(null),[B,Z]=g.useState(!1),[$,D]=g.useState(null),[ne,Pe]=g.useState(null),ke=g.useRef(null),dt=g.useRef(null);g.useEffect(()=>{if(!dn)return;const K=dt.current;if(!K)return;const J=new MouseEvent("contextmenu",{clientX:dn.x,clientY:dn.y,bubbles:!0,cancelable:!0,button:2,buttons:2});K.dispatchEvent(J)},[dn]);const Tt=g.useCallback(K=>{const J=ke.current;!J||!_||_(J,K)},[_]),Sn=g.useCallback(()=>{const K=ke.current;!K||!A||A(K)},[A]),Kt=g.useCallback(()=>{const K=ke.current;!K||!I||I(K)},[I]),Lr=g.useCallback(()=>{const K=ke.current;!K||!Te||Te(K)},[Te]),wa=g.useCallback(()=>{if(!Qe)return;const K=ke.current,J=K?[K]:[...s];J.length!==0&&Qe(J)},[Qe,s]);g.useCallback((K,J,se,de,ye)=>{Qr.current.enableContextMenu&&(ke.current=null,Z(!1),D(null),Pe({connectorId:K,kind:J,pinned:se}),F({x:de,y:ye}))},[]);const Zu=g.useCallback(()=>{const K=ne;!K||!at||at(K.connectorId,K.kind)},[ne,at]),_e=g.useCallback(()=>{if(!V)return;const K=dn,J=Gt.current;if(!K||!J)return;const se=J.screenToFlowPosition({x:K.x,y:K.y});V(se)},[dn,V]),nt=typeof navigator<"u"&&/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent||""),Ne=nt?"⌘C":"Ctrl+C",it=nt?"⌘V":"Ctrl+V",jt=g.useMemo(()=>new Set(s),[s]),Bn=g.useMemo(()=>{const K=new Set;for(const J of a)J.data.locked===!0&&K.add(J.id);return K},[a]),Vn=g.useMemo(()=>new Set(c),[c]),QT=g.useMemo(()=>{if(s.length<2)return[];const K=On,J=[];for(const se of s){const de=a.find(Ee=>Ee.id===se);if(!de)continue;const ye=K==null?void 0:K[se],ze=(ye==null?void 0:ye.data)??{},xe=de.data;J.push({id:se,position:(ye==null?void 0:ye.position)??de.position,data:{width:ze.width??xe.width,height:ze.height??xe.height,locked:ze.locked??xe.locked}})}return J},[a,On,s]),JT=U??[],Si=g.useMemo(()=>{const K=ye=>{const ze=yt?void 0:Of.current.get(ye.id),xe={id:ye.id,type:ye.type,position:ze??ye.position,data:{...ye.data,projectId:o,onRetryUpload:C,status:Gze(xn,ye.id),errorMessage:Kze(xn,ye.id),statusReport:_o==null?void 0:_o[ye.id],onPlay:d,onResize:y,setResizing:Ff,onFitToContent:ye.type==="htmlNode"?k:void 0,onNameChange:(()=>{if(yt&&!(ye.type==="shapeNode"&&ye.data.shape==="ellipse"))return v})(),onDescriptionChange:(()=>{if(yt){if(ye.type==="shapeNode"){const Ee=ye.data.shape;return Ee==="rectangle"||Ee==="ellipse"||Ee==="sticky"?M:void 0}if(!(ye.type==="imageNode"||ye.type==="iconNode"))return M}})(),onIconChange:(()=>{if(yt&&!(ye.type!=="playNode"&&ye.type!=="stateNode"))return he})(),autoEditOnMount:Se===ye.id?!0:void 0},selected:jt.has(ye.id)};return ye.data.width!==void 0&&(xe.width=ye.data.width),ye.data.height!==void 0&&(xe.height=ye.data.height),jt.has(ye.id)||(xe.connectable=!1),ye.data.locked===!0&&(xe.draggable=!1),xe},J=a.map(ye=>K(zze(ye,On==null?void 0:On[ye.id]))),se=new Set(a.map(ye=>ye.id)),de=[];if(On)for(const[ye,ze]of Object.entries(On)){if(se.has(ye))continue;const xe=ze;typeof xe.type!="string"||!xe.position||!xe.data||de.push(K({...xe,id:ye}))}return[...J,...de]},[o,a,jt,xn,_o,d,y,k,Ff,On,v,M,he,C,Se,yt]),[ej,tj]=g.useState(Si);g.useEffect(()=>{ro.current||Ku.current||tj(Si)},[Si]),g.useEffect(()=>{Bd.current=ej},[ej]);const Ir=g.useRef(jt);g.useEffect(()=>{Ir.current=jt},[jt]);const oo=g.useRef(l);g.useEffect(()=>{oo.current=l},[l]);const zo=g.useRef(Vn);g.useEffect(()=>{zo.current=Vn},[Vn]);const Bd=g.useRef(Si),Li=g.useRef(!1),Hf=g.useRef(new Set),Bf=g.useRef(new Set),nj=g.useRef(new Set),rj=g.useRef(new Set),Ma=g.useRef(null),bde=g.useCallback(K=>{var rt;const J=Li.current?nj.current:(rt=Ma.current)!=null&&rt.shift?Ma.current.nodeIds:null,se=J&&J.size>0?K.filter(Ze=>Ze.type!=="select"?!0:!(Ze.selected===!1&&J.has(Ze.id))):K,de=new Set;for(const Ze of se)Ze.type==="select"&&de.add(Ze.id);const ye=Mie(se,Bd.current),ze=Ir.current,xe=Li.current||ze.size===0?ye:ye.map(Ze=>ze.has(Ze.id)&&!de.has(Ze.id)&&!Ze.selected?{...Ze,selected:!0}:Ze);if(Bd.current=xe,tj(xe),de.size===0)return;if(Li.current){for(const Ze of se)Ze.type==="select"&&(Ze.selected?Hf.current.add(Ze.id):Hf.current.delete(Ze.id));return}const Ee=oo.current;if(!Ee)return;const Je=xe.filter(Ze=>Ze.selected).map(Ze=>Ze.id),ht=Ir.current;ht.size===Je.length&&Je.every(Ze=>ht.has(Ze))||(Ir.current=new Set(Je),Ee(Je,[...zo.current]))},[]),Vf=g.useRef([]),Cde=g.useCallback(K=>{var qt;const J=Li.current?rj.current:(qt=Ma.current)!=null&&qt.shift?Ma.current.edgeIds:null,se=J&&J.size>0?K.filter(Re=>Re.type!=="select"?!0:!(Re.selected===!1&&J.has(Re.id))):K,de=new Set;for(const Re of se)Re.type==="select"&&de.add(Re.id);if(de.size===0)return;if(Li.current){for(const Re of se)Re.type==="select"&&(Re.selected?Bf.current.add(Re.id):Bf.current.delete(Re.id));return}const ye=oo.current;if(!ye)return;const xe=bie(se,Vf.current).filter(Re=>Re.selected).map(Re=>Re.id),Ee=zo.current;Ee.size===xe.length&&xe.every(Re=>Ee.has(Re))||(zo.current=new Set(xe),ye([...Ir.current],xe))},[]),Sde=g.useCallback(K=>{Li.current=!0;const J=Ma.current,se=(J==null?void 0:J.shift)??(K.shiftKey||K.metaKey||K.ctrlKey);nj.current=se?new Set((J==null?void 0:J.nodeIds)??Ir.current):new Set,rj.current=se?new Set((J==null?void 0:J.edgeIds)??zo.current):new Set,Hf.current=new Set(nj.current),Bf.current=new Set(rj.current)},[]),Lde=g.useCallback(()=>{Li.current=!1,Ma.current=null;const K=oo.current;if(!K)return;const J=[...Hf.current],se=new Set(J),de=new Set(Bf.current);for(const Je of Vf.current)se.has(Je.source)&&se.has(Je.target)&&de.add(Je.id);const ye=Ir.current,ze=zo.current,xe=ye.size===se.size&&J.every(Je=>ye.has(Je)),Ee=ze.size===de.size&&[...de].every(Je=>ze.has(Je));xe&&Ee||(Ir.current=new Set(J),zo.current=new Set(de),K(J,[...de]))},[]),Ide=g.useCallback(K=>{if(Ma.current=null,Cr.current||K.button!==0)return;const J=K.target;J!=null&&J.classList.contains("react-flow__pane")&&(Ma.current={shift:K.shiftKey||K.metaKey||K.ctrlKey,nodeIds:new Set(Ir.current),edgeIds:new Set(zo.current)})},[]),Ede=g.useCallback(K=>{if(!Qr.current.enableContextMenu||Ir.current.size<2)return;const se=K.target;se!==dt.current&&(se!=null&&se.closest(".seeflow-connector-endpoint-dot")||(K.preventDefault(),K.stopPropagation(),ke.current=null,Z(!0),D(null),Pe(null),F({x:K.clientX,y:K.clientY})))},[]),Ade=g.useCallback(K=>{const J=K.dataTransfer;if(!J)return;const se=J.types?Array.from(J.types):[],de=se.includes("Files"),ye=se.includes(zJ),ze=de&&!!S&&Ve.enableImageDrop,xe=ye&&!!L&&Ve.enableDragDrop;if(!(!ze&&!xe)){K.preventDefault();try{J.dropEffect="copy"}catch{}}},[S,L,Ve.enableImageDrop,Ve.enableDragDrop]),Pde=g.useCallback(K=>{const J=K.dataTransfer;if((J!=null&&J.types?Array.from(J.types):[]).includes(zJ)&&L&&Ve.enableDragDrop){K.preventDefault();const ze=Gt.current;if(!ze)return;const xe=ze.screenToFlowPosition({x:K.clientX,y:K.clientY});L({position:xe});return}if(!S||!Ve.enableImageDrop)return;const ye={x:K.clientX,y:K.clientY};K.preventDefault(),Vke({dataTransfer:J,clientPos:ye,rfInstance:Gt.current,computeDims:$ke,dispatch:S})},[S,L,Ve.enableImageDrop,Ve.enableDragDrop]),sU=!!T,cU=Vn.size===1?[...Vn][0]:null,oj=g.useMemo(()=>{const K=Ee=>{const Je=ote(xn,Ee.source)==="running"||ote(xn,Ee.target)==="running",ht=Vn.has(Ee.id),qt=X8e(Ee,Je,ht);ht&&(qt.selected=!0);const Re=sU&&Ee.id===cU,rt=Re?{...qt,reconnectable:!0}:qt;return{...rt,data:{...rt.data,onLabelChange:yt?x:void 0,reconnectable:Re,registerEditHandle:Mr}}},J=new Set(i.map(Ee=>Ee.id)),se=i.map(Ee=>K(Dze(Ee,Jr==null?void 0:Jr[Ee.id]))),de=[];if(Jr)for(const[Ee,Je]of Object.entries(Jr)){if(J.has(Ee))continue;const ht=Je;typeof ht.source!="string"||typeof ht.target!="string"||typeof ht.kind!="string"||de.push(K({...ht,id:Ee}))}const ye=[...se,...de],ze=[],xe=[];for(const Ee of ye)Vn.has(Ee.id)?xe.push(Ee):ze.push(Ee);return[...ze,...xe]},[i,xn,Vn,cU,Jr,x,sU,Mr,yt]);g.useEffect(()=>{Vf.current=oj},[oj]);const _de=g.useCallback(()=>{const K=Gt.current,J=Bd.current;if(J.length<2)return;const se=J.map(Re=>{var Do;const rt=(Do=K==null?void 0:K.getInternalNode(Re.id))==null?void 0:Do.measured,Ze=Re.data,Ei=(rt==null?void 0:rt.width)??Ze.width??200,Ca=(rt==null?void 0:rt.height)??Ze.height??120;return{id:Re.id,width:Ei,height:Ca,position:Re.position}}),de=Vf.current.map(Re=>({source:Re.source,target:Re.target})),ye=eae(se,de);let ze=Number.POSITIVE_INFINITY,xe=Number.POSITIVE_INFINITY,Ee=Number.POSITIVE_INFINITY,Je=Number.POSITIVE_INFINITY;for(const Re of se){Re.position.x<ze&&(ze=Re.position.x),Re.position.y<xe&&(xe=Re.position.y);const rt=ye.get(Re.id);rt&&(rt.x<Ee&&(Ee=rt.x),rt.y<Je&&(Je=rt.y))}const ht=Number.isFinite(ze)&&Number.isFinite(Ee)?ze-Ee:0,qt=Number.isFinite(xe)&&Number.isFinite(Je)?xe-Je:0;tj(Re=>Re.map(rt=>{const Ze=ye.get(rt.id);return Ze?{...rt,position:{x:Ze.x+ht,y:Ze.y+qt}}:rt}))},[]),$f=Y??(yt?void 0:_de),Uf=g.useRef(!1),lU=g.useRef(null),Rde=g.useCallback(K=>{var Ee;if(!yt||!P)return;const{source:J,target:se}=K;if(!J||!se||J===se)return;Uf.current=!0;const de=((Ee=lU.current)==null?void 0:Ee.nodeId)??null,ye=de!==null&&de===se&&de!==J;P(ye?se:J,ye?J:se)},[P,yt]),aj=g.useCallback(K=>{const J=se=>{if(!se)return!1;const de=Bd.current.find(ye=>ye.id===se);return de?de.type==="shapeNode"&&de.data.shape==="text":!1};return!J(K.source)&&!J(K.target)},[]),Tde=g.useCallback((K,J)=>{var qt;cr(!1),Fn();const se=Uf.current;if(Uf.current=!1,se||ga.current)return;if(wi.current){wi.current=!1;return}if(!P)return;const de=(qt=J.fromNode)==null?void 0:qt.id,ye=J.fromHandle;if(!de||!ye)return;const ze=ete(K);if(!ze)return;const xe=xF(un.current,ze.clientX,ze.clientY);if(!xe)return;const Ee=xe.getAttribute("data-id");if(!Ee||Ee===de||!aj({source:de,target:Ee,sourceHandle:null,targetHandle:null}))return;let Je;const ht=Gt.current;if(ht){const Re=ht.getInternalNode(Ee);if(Re){const rt=Re.measured.width??Re.width??0,Ze=Re.measured.height??Re.height??0;if(rt>0&&Ze>0){const Ei=ht.screenToFlowPosition({x:ze.clientX,y:ze.clientY});Je=DH({x:Re.internals.positionAbsolute.x,y:Re.internals.positionAbsolute.y,w:rt,h:Ze},Ei)}}}P(de,Ee,Je?{targetPin:Je}:void 0)},[P,Fn,aj]),Wf=g.useRef(!1),jde=g.useCallback((K,J)=>{if(!T)return;const{source:se,target:de,sourceHandle:ye,targetHandle:ze}=J;if(!se||!de||se===de)return;const xe={};if(se!==K.source&&(xe.source=se),de!==K.target&&(xe.target=de),typeof ye=="string"&&ye!==K.sourceHandle&&(xe.sourceHandle=ye),typeof ze=="string"&&ze!==K.targetHandle&&(xe.targetHandle=ze),xe.source===void 0&&xe.target===void 0&&xe.sourceHandle===void 0&&xe.targetHandle===void 0)return;(xe.source!==void 0||xe.sourceHandle!==void 0)&&(xe.sourceHandleAutoPicked=!1),(xe.target!==void 0||xe.targetHandle!==void 0)&&(xe.targetHandleAutoPicked=!1);const Ee=Gt.current;if(!(xe.source===void 0&&xe.target===void 0)&&Ee){const ht=xe.source!==void 0?"source":"target",qt=tte(ht,K.source,K.target,K.data,Re=>Ee.getInternalNode(Re)??null);qt&&(ht==="source"?xe.targetPin=qt:xe.sourcePin=qt)}Wf.current=!0,T(K.id,xe)},[T]),Nde=g.useCallback((K,J,se,de)=>{var Zf;cr(!1),Fn(),ga.current=!1;const ye=Wf.current;if(Wf.current=!1,ye)return;if(Mi.current){Mi.current=!1;return}if(!T)return;const ze=ete(K);let xe=((Zf=de.toNode)==null?void 0:Zf.id)??null;if(!xe&&ze){const Sa=xF(un.current,ze.clientX,ze.clientY);xe=(Sa==null?void 0:Sa.getAttribute("data-id"))??null}const Ee=se==="source"?"target":"source",Je=Nze(Ee,J.source,J.target,xe);if(Je==="no-op"||Je==="self-loop"||!ze)return;const ht=Gt.current;if(!ht)return;const qt=Je==="pin-own"?Ee==="source"?J.source:J.target:xe,Re=ht.getInternalNode(qt);if(!Re)return;const rt=Re.measured.width??Re.width??0,Ze=Re.measured.height??Re.height??0;if(rt===0||Ze===0)return;const Ei=ht.screenToFlowPosition({x:ze.clientX,y:ze.clientY}),Ca=DH({x:Re.internals.positionAbsolute.x,y:Re.internals.positionAbsolute.y,w:rt,h:Ze},Ei);if(Je==="pin-own"){if(!Ae)return;Ae(J.id,Ee,Ca);return}const Do=tte(Ee,J.source,J.target,J.data,Sa=>ht.getInternalNode(Sa)??null);Ee==="source"?T(J.id,{source:xe,sourceHandle:null,sourceHandleAutoPicked:!1,sourcePin:Ca,...Do?{targetPin:Do}:{}}):T(J.id,{target:xe,targetHandle:null,targetHandleAutoPicked:!1,targetPin:Ca,...Do?{sourcePin:Do}:{}})},[T,Fn,Ae]),Ii=g.useMemo(()=>{var Ee;if(!no||!Hn)return null;const K=(Ee=un.current)==null?void 0:Ee.getBoundingClientRect(),J=(K==null?void 0:K.left)??0,se=(K==null?void 0:K.top)??0,de=Math.min(no.x,Hn.x),ye=Math.min(no.y,Hn.y),ze=Math.abs(Hn.x-no.x),xe=Math.abs(Hn.y-no.y);return{left:de-J,top:ye-se,width:ze,height:xe}},[no,Hn]),zde=mt?nce(mt):"",Dde=mt?rce(mt):void 0,qde=mt==="text",[uU,dU]=g.useState(!1),[Ode,Gf]=g.useState(!1),[Fde,hU]=g.useState(!1),ba=Eze({projectId:o,getReactFlow:()=>Gt.current});g.useImperativeHandle(t,()=>({exportPdf:ba.exportPdf,exportPng:ba.exportPng,openEmbedDialog:()=>hU(!0),capturePreview:ba.capturePreview}),[ba.exportPdf,ba.exportPng,ba.capturePreview]),g.useEffect(()=>{if(!Ve.enableKeyboard)return;const K=de=>{if(!de)return!1;const ye=de.tagName;return ye==="INPUT"||ye==="TEXTAREA"||ye==="SELECT"?!0:de instanceof HTMLElement&&de.isContentEditable},J=de=>{de.code==="Space"&&(K(document.activeElement)||(de.preventDefault(),dU(!0)))},se=de=>{de.code==="Space"&&(dU(!1),Gf(!1))};return window.addEventListener("keydown",J),window.addEventListener("keyup",se),()=>{window.removeEventListener("keydown",J),window.removeEventListener("keyup",se)}},[Ve.enableKeyboard]);const Kf=g.useCallback(K=>{if(K.length!==0){if(!yt){const J=Of.current;for(const se of K)J.set(se.id,{x:se.position.x,y:se.position.y});return}if(K.length===1){const J=K[0];J&&f&&f(J.id,{x:J.position.x,y:J.position.y});return}if(p){p(K.map(J=>({id:J.id,position:{x:J.position.x,y:J.position.y}})));return}if(f)for(const J of K)f(J.id,{x:J.position.x,y:J.position.y})}},[f,p,yt]),Hde=g.useCallback((K,J,se)=>{ro.current=!1,Kf(se),No()},[Kf,No]),Bde=g.useCallback(()=>{ro.current=!0},[]),Vde=g.useCallback((K,J)=>{ro.current=!1,Kf(J),No()},[Kf,No]),$de=g.useCallback((K,J)=>{oe==null||oe(J.id)},[oe]),Ude=g.useCallback(K=>{ae==null||ae()},[ae]),Wde=g.useCallback((K,J)=>{ee==null||ee(J.id)},[ee]),fU=mt?"crosshair":uU?Ode?"grabbing":"grab":void 0,pU=s[0],yU=c[0],Gde=pU?a.find(K=>K.id===pU)??null:null,Kde=yU?i.find(K=>K.id===yU)??null:null,Zde=o??null,Xde=Ve.showDetailPanel&&!ue,Yde=g.useMemo(()=>({custom:Ue??{}}),[Ue]);return m.jsx(VMe,{value:Yde,children:m.jsx("div",{"data-testid":"seeflow-canvas","data-mode":n,ref:un,className:"seeflow-canvas-root sf:relative sf:h-full sf:w-full",style:fU?{cursor:fU}:void 0,onPointerDownCapture:Ide,onPointerDown:K=>{uU&&Gf(!0),Ci(K)},onPointerMove:Gu,onPointerUp:K=>{Gf(!1),YT(K)},onPointerCancel:()=>{bn.current=!1,st.current=null,Sr.current=null,jo(null),xa(null),Gf(!1)},onContextMenuCapture:Ede,onDragOver:Ade,onDrop:Pde,children:m.jsxs($9e,{containerRef:un,children:[m.jsxs(h8e,{nodes:ej,edges:oj,onNodesChange:bde,nodeTypes:qze,edgeTypes:Oze,proOptions:{hideAttribution:!0},fitView:!0,minZoom:n==="mini"?.05:.5,nodesDraggable:(yt?!!f:!0)&&!mt&&Ve.enableNodeMove,nodesConnectable:yt&&!!P&&!mt,deleteKeyCode:yt?["Backspace","Delete"]:null,zoomOnScroll:Ve.enableZoom,zoomOnPinch:Ve.enableZoom,className:br?"seeflow-connecting":void 0,onConnect:yt?Rde:void 0,isValidConnection:aj,onConnectStart:(K,J)=>{cr(!0),Uf.current=!1,lU.current={nodeId:J.nodeId??null,handleType:J.handleType??null},Mn(J.nodeId??null)},onConnectEnd:Tde,onReconnect:yt&&T?jde:void 0,onReconnectStart:(K,J,se)=>{cr(!0),Wf.current=!1,ga.current=!0;const de=se==="source"?J.source:J.target;Mn(de)},onReconnectEnd:Nde,connectionLineComponent:va,connectionLineStyle:{strokeWidth:2},connectionRadius:32,reconnectRadius:10,edgesReconnectable:!1,elevateNodesOnSelect:!1,elementsSelectable:!mt&&Ve.enableSelection,selectNodesOnDrag:!1,nodeClickDistance:5,selectionOnDrag:!mt&&Ve.enableSelection,panOnDrag:mt?!1:Ve.enablePan?[1,2]:!1,selectionMode:rd.Partial,selectionKeyCode:null,multiSelectionKeyCode:mt?null:["Meta","Shift"],panActivationKeyCode:mt?null:"Space",onSelectionStart:Sde,onSelectionEnd:Lde,defaultEdgeOptions:Fze,zoomOnDoubleClick:!1,onInit:K=>{Gt.current=K;const J=un.current;J&&J.style.setProperty("--rf-zoom",String(K.getZoom())),!eo.current&&qn.onMount&&a.length>0&&(K.fitView(ih),eo.current=!0),X==null||X(K)},onMove:(K,J)=>{ka.current&&Ro(null);const se=un.current;se&&se.style.setProperty("--rf-zoom",String(J.zoom))},onEdgesChange:Cde,onNodeDragStart:()=>{ro.current=!0},onNodeDragStop:Hde,onSelectionDragStart:Bde,onSelectionDragStop:Vde,onNodeClick:$de,onEdgeClick:Wde,onEdgeDoubleClick:(K,J)=>{var se;(se=ya.current.get(J.id))==null||se()},onPaneClick:Ude,onNodeContextMenu:Ve.enableContextMenu&&Hd?(K,J)=>{K.preventDefault(),ke.current=J.id,Z(!0),D(J.type??null),Pe(null),F({x:K.clientX,y:K.clientY})}:void 0,onPaneContextMenu:Ve.enableContextMenu&&V?K=>{K.preventDefault(),ke.current=null,Z(!1),D(null),Pe(null),F({x:K.clientX,y:K.clientY})}:void 0,children:[m.jsx(Vze,{storeApiRef:vi}),m.jsx($ze,{wrapperRef:un}),m.jsx(M8e,{gap:12,size:.6}),Ve.showControls?m.jsxs(A8e,{showInteractive:!1,showFitView:!1,children:[m.jsx(S1,{"data-testid":"controls-fit-view","aria-label":"Fit view",title:"Fit view",disabled:a.length===0,onClick:()=>{var K;(K=Gt.current)==null||K.fitView(ih)},children:m.jsx(j1,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})}),m.jsx(S1,{"data-testid":"controls-tidy","aria-label":"Tidy layout (⌘⇧L)",title:"Tidy layout (⌘⇧L)",disabled:!$f,onClick:()=>$f==null?void 0:$f(),children:m.jsx(Uh,{className:"sf:h-3 sf:w-3","aria-hidden":"true"})})]}):null,Ve.showResizeHandles?m.jsx(CNe,{selectedNodes:QT,onMultiResize:w}):null,Ve.showToolbar&&b||Ve.showStyleStrip&&N&&R?m.jsx(cd,{position:"top-left",children:m.jsxs("div",{className:"sf:flex sf:flex-col sf:gap-2",children:[Ve.showToolbar&&b?m.jsx(rEe,{activeShape:mt,onSelectShape:xi,iconPickerOpen:be??!1,onOpenIconPicker:we,onCloseIconPicker:te,onPickIcon:ie}):null,Ve.showStyleStrip&&N&&R?m.jsx(LNe,{nodes:JT,connectors:z??[],onStyleNode:N,onStyleNodePreview:E,onStyleNodes:W,onStyleNodesPreview:q,onStyleConnector:R,onStyleConnectorPreview:G,onRequestIconReplace:Te}):null]})}):null,Ve.showShareMenu||Ve.showRestart&&Oe?m.jsx(cd,{position:"top-right",children:m.jsxs("div",{className:"sf:flex sf:items-center sf:gap-1",children:[Ve.showRestart&&Oe?m.jsx(xNe,{onRestartDemo:Oe}):null,Ve.showShareMenu?m.jsx(vNe,{mode:n==="mini"?"view":n,projectId:o,enableEmbed:Ve.enableEmbed,onDownloadPdf:ba.exportPdf,onDownloadPng:ba.exportPng,onExportToCloud:Rt,embedOpen:Fde,onEmbedOpenChange:hU}):null]})}):null]}),Ii?m.jsx("div",{"data-testid":"canvas-draw-ghost","data-ghost-shape":mt??void 0,"aria-hidden":!0,className:ce("sf:pointer-events-none sf:absolute sf:z-10",zde,qde?"sf:rounded-sm sf:border sf:border-dashed sf:border-muted-foreground/40":""),style:{...Dde,left:Ii.left,top:Ii.top,width:Ii.width,height:Ii.height},children:(()=>{const K=mt?v$[mt]:void 0;return K?m.jsx(K,{width:Ii.width,height:Ii.height,borderColor:ct(void 0,"node").borderColor,backgroundColor:ef,borderSize:o$}):null})()}):null,Ve.enableContextMenu&&Hd?m.jsxs(ILe,{onOpenChange:K=>{K||(F(null),ke.current=null,D(null),Pe(null))},children:[m.jsx(ELe,{asChild:!0,children:m.jsx("div",{ref:dt,"data-testid":"node-context-menu-trigger","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(dn==null?void 0:dn.x)??0,top:(dn==null?void 0:dn.y)??0,width:0,height:0}})}),m.jsxs(Dle,{"data-testid":"node-context-menu",children:[ne!=null&&ne.pinned&&at?m.jsx(_r,{"data-testid":"connector-endpoint-context-menu-unpin",onSelect:Zu,children:"Unpin"}):null,B&&I?m.jsxs(_r,{"data-testid":"node-context-menu-copy",onSelect:Kt,children:["Copy",m.jsx(XH,{children:Ne})]}):null,V?m.jsxs(_r,{"data-testid":"node-context-menu-paste",disabled:!j,onSelect:_e,children:["Paste",m.jsx(XH,{children:it})]}):null,B&&(I||V)&&($==="iconNode"&&Te||_||A)?m.jsx(Mh,{}):null,B&&$==="iconNode"&&Te?m.jsx(_r,{"data-testid":"node-context-menu-change-icon",onSelect:Lr,children:"Change icon"}):null,B&&$==="iconNode"&&Te&&(_||A)?m.jsx(Mh,{}):null,B&&_?m.jsxs(m.Fragment,{children:[m.jsx(_r,{"data-testid":"node-context-menu-to-front",onSelect:()=>Tt({op:"toFront"}),children:"Bring to front"}),m.jsx(_r,{"data-testid":"node-context-menu-forward",onSelect:()=>Tt({op:"forward"}),children:"Bring forward"}),m.jsx(_r,{"data-testid":"node-context-menu-backward",onSelect:()=>Tt({op:"backward"}),children:"Send backward"}),m.jsx(_r,{"data-testid":"node-context-menu-to-back",onSelect:()=>Tt({op:"toBack"}),children:"Send to back"})]}):null,B&&_&&(Qe||A)?m.jsx(Mh,{}):null,B&&Qe?(()=>{const K=ke.current,J=K?[K]:s,se=J.length>0&&J.every(de=>Bn.has(de))?"Unlock":"Lock";return m.jsx(_r,{"data-testid":"node-context-menu-toggle-lock",onSelect:wa,disabled:J.length===0,children:se})})():null,B&&Qe&&A?m.jsx(Mh,{}):null,B&&A?m.jsx(_r,{"data-testid":"node-context-menu-delete",onSelect:Sn,disabled:ke.current?Bn.has(ke.current):!1,children:"Delete"}):null]})]}):null,ve?m.jsxs(Nd,{open:!!wn,onOpenChange:K=>{K||Ro(null)},children:[m.jsx(U9e,{asChild:!0,children:m.jsx("div",{"data-testid":"drop-popover-anchor","aria-hidden":!0,className:"sf:pointer-events-none sf:fixed",style:{left:(wn==null?void 0:wn.clientX)??0,top:(wn==null?void 0:wn.clientY)??0,width:0,height:0}})}),m.jsx(Fu,{"data-testid":"drop-popover",align:"start",side:"bottom",sideOffset:4,className:"sf:w-auto sf:p-1",onOpenAutoFocus:K=>{K.preventDefault()},children:m.jsx("div",{role:"menu","aria-label":"Create connected node",className:"sf:flex sf:flex-col sf:gap-0.5",children:nEe.map(({shape:K,label:J,Icon:se})=>m.jsxs("button",{type:"button",role:"menuitem","data-testid":`drop-popover-shape-${K}`,onClick:()=>{const de=wn;de&&(ve({sourceNodeId:de.sourceNodeId,position:{x:de.flowX,y:de.flowY},shape:K}),Ro(null))},className:ce("sf:flex sf:items-center sf:gap-2 sf:rounded-sm sf:px-2 sf:py-1.5 sf:text-left sf:text-sm","sf:hover:bg-accent sf:hover:text-accent-foreground","sf:focus:bg-accent sf:focus:text-accent-foreground sf:focus:outline-hidden"),children:[m.jsx(se,{className:"sf:h-4 sf:w-4 sf:text-muted-foreground","aria-hidden":"true"}),m.jsx("span",{children:J})]},K))})})]}):null,Xde?m.jsx(Xje,{demoId:Zde,node:Gde,connector:Kde,adapter:r??null,statusReport:ge,onNameChange:Me,onDescriptionChange:qe,onDetailChange:re,onIconChange:he,onClose:()=>{var K;(K=oo.current)==null||K.call(oo,[],[])}}):null]})})})}const Xze=g.forwardRef(Zze);function Yze({open:e,onOpenChange:t,onCreated:n}){const[r,o]=g.useState(""),[a,i]=g.useState(null),[s,c]=g.useState(!1);g.useEffect(()=>{e&&(o(""),i(null),c(!1))},[e]);const l=r.trim(),u=l.length>0&&!s,d=async f=>{if(f.preventDefault(),!!u){c(!0),i(null);try{const p=await Ife({name:l});n(p),t(!1)}catch(p){i(p instanceof Error?p.message:String(p)),c(!1)}}};return m.jsx(RT,{open:e,onOpenChange:t,children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"create-project-dialog",onOpenAutoFocus:f=>{f.preventDefault();const p=document.querySelector('[data-testid="create-project-name-input"]');p==null||p.focus()},children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Create new project"}),m.jsxs(Ef,{children:["The project will be created at ",m.jsx("code",{children:"~/.seeflow/<slug>"}),"."]})]}),m.jsxs("form",{onSubmit:d,className:"flex flex-col gap-4",children:[m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Project name"}),m.jsx("input",{type:"text",required:!0,autoComplete:"off",spellCheck:!1,value:r,onChange:f=>o(f.target.value),"data-testid":"create-project-name-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2"})]}),a?m.jsx("div",{role:"alert","data-testid":"create-project-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:a}):null,m.jsxs(fd,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:s,children:"Cancel"}),m.jsx(Ft,{type:"submit",disabled:!u,"data-testid":"create-project-submit",children:s?"Creating…":"Create project"})]})]})]})})}const gB="seeflow:navigate",Qze=e=>(window.addEventListener("popstate",e),window.addEventListener(gB,e),()=>{window.removeEventListener("popstate",e),window.removeEventListener(gB,e)}),ate=()=>window.location.pathname,Jze=()=>g.useSyncExternalStore(Qze,ate,ate),md=e=>{e!==window.location.pathname&&(window.history.pushState({},"",e),window.dispatchEvent(new Event(gB)))};function eDe({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){const[o,a]=g.useState(!1),[i,s]=g.useState(!1),[c,l]=g.useState(null),[u,d]=g.useState(!1),[f,p]=g.useState(null);g.useEffect(()=>{const x=b=>{b.key==="k"&&(b.metaKey||b.ctrlKey)&&(b.preventDefault(),a(S=>!S))};return document.addEventListener("keydown",x),()=>document.removeEventListener("keydown",x)},[]);const y=e.find(x=>x.slug===t),k=x=>{n==null||n(x),md(`/d/${x.slug}`)},w=x=>{l(x),p(null)},v=()=>{u||(l(null),p(null))},M=async()=>{if(c){d(!0),p(null);try{await Lfe(c.id);const x=c.id;l(null),r==null||r(x)}catch(x){p(x instanceof Error?x.message:String(x))}finally{d(!1)}}};return m.jsxs(m.Fragment,{children:[m.jsxs(Nd,{open:o,onOpenChange:a,children:[m.jsx(kf,{asChild:!0,children:m.jsxs(Ft,{type:"button",variant:"outline",size:"sm","aria-label":"Switch demo","aria-expanded":o,className:"gap-2","data-testid":"project-switcher-trigger",children:[m.jsx("span",{className:"max-w-[180px] truncate text-sm",children:(y==null?void 0:y.name)??"Select demo"}),m.jsx(jce,{children:"⌘K"}),m.jsx(zh,{className:"h-3.5 w-3.5 opacity-60"})]})}),m.jsx(Fu,{align:"end",sideOffset:6,className:"w-[320px] p-0","data-testid":"project-switcher-popover",children:m.jsxs(Ace,{children:[m.jsx(Pce,{placeholder:"Search demos..."}),m.jsxs(_ce,{children:[m.jsx(Rce,{children:"No demos."}),e.length>0?m.jsx(WH,{heading:"Demos",children:e.map(x=>m.jsxs(GH,{value:`${x.name} ${x.slug}`,onSelect:()=>{a(!1),md(`/d/${x.slug}`)},className:"group flex items-center justify-between gap-2",children:[m.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-0.5",children:[m.jsx("span",{className:"font-medium",children:x.name}),m.jsx("span",{className:"w-full truncate text-xs text-muted-foreground",children:x.repoPath})]}),m.jsx("button",{type:"button","aria-label":`Unregister ${x.name}`,className:"shrink-0 rounded p-0.5 opacity-0 transition-opacity hover:text-destructive group-hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring",onClick:b=>{b.stopPropagation(),a(!1),w(x)},children:m.jsx(a2,{className:"h-3.5 w-3.5"})})]},x.id))}):null,e.length>0?m.jsx(Tce,{}):null,m.jsx(WH,{children:m.jsxs(GH,{value:"+ create new project",onSelect:()=>{a(!1),s(!0)},"data-testid":"project-switcher-create",className:"flex items-center gap-2 text-sm",children:[m.jsx(Yh,{className:"h-4 w-4 opacity-70"}),m.jsx("span",{className:"font-medium",children:"Create new project"})]})})]})]})})]}),m.jsx(Yze,{open:i,onOpenChange:s,onCreated:k}),m.jsx(RT,{open:c!==null,onOpenChange:x=>{x||v()},children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"unregister-project-dialog",children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Unregister project?"}),m.jsxs(Ef,{children:["This removes ",m.jsx("strong",{children:c==null?void 0:c.name})," from SeeFlow. Your files at"," ",m.jsx("code",{className:"text-xs",children:c==null?void 0:c.repoPath})," will not be deleted."]})]}),f?m.jsx("div",{role:"alert","data-testid":"unregister-project-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:f}):null,m.jsxs(fd,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:v,disabled:u,children:"Cancel"}),m.jsx(Ft,{type:"button",variant:"destructive",onClick:M,disabled:u,"data-testid":"unregister-project-confirm",children:u?"Unregistering…":"Unregister"})]})]})})]})}function tDe({demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r}){return m.jsxs("header",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border bg-background px-4",children:[m.jsxs("button",{type:"button",onClick:()=>md("/"),style:{display:"flex",alignItems:"center",gap:6,fontWeight:700,fontSize:16,letterSpacing:"-0.02em",background:"none",border:"none",cursor:"pointer",padding:0},children:[m.jsx(c2,{size:20,strokeWidth:2,className:"text-emerald-400"}),"SeeFlow"]}),m.jsx("div",{className:"flex items-center gap-3",children:m.jsx(eDe,{demos:e,currentSlug:t,onProjectCreated:n,onProjectUnregistered:r})})]})}const nDe=e=>{const[t,n]=g.useState(null),[r,o]=g.useState(e!==null),[a,i]=g.useState(null),s=g.useCallback(()=>{e&&(o(!0),Nre(e).then(c=>{n(c),i(null)}).catch(c=>{console.error("[useDemoData] failed",c),i(String(c))}).finally(()=>o(!1)))},[e]);return g.useEffect(()=>{if(!e){n(null),o(!1);return}s()},[e,s]),{detail:t,loading:r,error:a,refresh:s}},rDe=()=>{const[e,t]=g.useState(null),[n,r]=g.useState(null),o=g.useCallback(()=>Sfe().then(a=>{t(a),r(null)}).catch(a=>{console.error("[useDemos] failed",a),t([]),r(String(a))}),[]);return g.useEffect(()=>{o()},[o]),{demos:e,error:n,refresh:o}},oDe=5,aDe={"node:running":"running","node:done":"done","node:error":"error"},iDe=(e,t)=>{if(t.type==="reset")return{};const n=e[t.nodeId]??[],r=[t.entry,...n].slice(0,oDe);return{...e,[t.nodeId]:r}},sDe=e=>{const[t,n]=g.useReducer(iDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{const s=aDe[i.type];if(!s)return;const c=typeof i.nodeId=="string"?i.nodeId:null;if(!c)return;const l=typeof i.runId=="string"?i.runId:void 0,u=typeof i.ts=="number"?i.ts:Date.now();r.current({type:"append",nodeId:c,entry:{status:s,ts:u,runId:l}})},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{events:t,apply:o,reset:a}},cDe=(e,t)=>{var n,r;switch(t.type){case"reset":return{};case"running":return{...e,[t.nodeId]:{status:"running",runId:t.runId,ts:t.ts??Date.now()}};case"done":return{...e,[t.nodeId]:{...e[t.nodeId],status:"done",runId:t.runId??((n=e[t.nodeId])==null?void 0:n.runId),responseStatus:t.responseStatus,body:t.body,ts:t.ts??Date.now()}};case"error":return{...e,[t.nodeId]:{...e[t.nodeId],status:"error",runId:t.runId??((r=e[t.nodeId])==null?void 0:r.runId),error:t.message,ts:t.ts??Date.now()}}}},lDe=e=>{const[t,n]=g.useReducer(cDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{const s=typeof i.nodeId=="string"?i.nodeId:null;if(!s)return;const c=typeof i.runId=="string"?i.runId:void 0;if(i.type==="node:running"){r.current({type:"running",nodeId:s,runId:c,ts:i.ts});return}if(i.type==="node:done"){const l=typeof i.status=="number"?i.status:void 0;r.current({type:"done",nodeId:s,runId:c,responseStatus:l,body:i.body,ts:i.ts});return}if(i.type==="node:error"){const l=typeof i.message=="string"?i.message:void 0;r.current({type:"error",nodeId:s,runId:c,message:l,ts:i.ts})}},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{runs:t,apply:o,reset:a}},uDe=new Set(["ok","warn","error","pending"]),dDe=(e,t)=>{if(t.type!=="node:status")return e;const n=typeof t.nodeId=="string"?t.nodeId:null;if(!n||typeof t.state!="string"||!uDe.has(t.state))return e;const r=typeof t.summary=="string"?t.summary:void 0,o=typeof t.detail=="string"?t.detail:void 0,a=t.data&&typeof t.data=="object"&&!Array.isArray(t.data)?t.data:void 0,i=typeof t.ts=="number"?t.ts:Date.now();return{...e,[n]:{state:t.state,summary:r,detail:o,data:a,ts:i}}},hDe=(e,t)=>{switch(t.type){case"reset":return{};case"event":return dDe(e,t.event)}},fDe=e=>{const[t,n]=g.useReducer(hDe,{}),r=g.useRef(n);r.current=n,g.useEffect(()=>{r.current({type:"reset"})},[e]);const o=g.useCallback(i=>{r.current({type:"event",event:i})},[]),a=g.useCallback(()=>{r.current({type:"reset"})},[]);return{statusByNode:t,apply:o,reset:a}},pDe=(e,t={})=>{const[n,r]=g.useState(null),[o,a]=g.useState(!1),{onReload:i,onEvent:s}=t;return g.useEffect(()=>{if(!e){r(null),a(!1);return}const c=`/api/events?demoId=${encodeURIComponent(e)}`,l=new EventSource(c);l.addEventListener("open",()=>a(!0)),l.addEventListener("error",()=>a(!1)),l.addEventListener("hello",()=>{i==null||i()}),l.addEventListener("demo:reload",u=>{const d=ite(u,"demo:reload");r(d),s==null||s(d),i==null||i()});for(const u of["node:running","node:done","node:error","node:status"])l.addEventListener(u,d=>{s==null||s(ite(d,u))});return()=>{l.close()}},[e,i,s]),{lastReload:n,connected:o}},ite=(e,t)=>{try{const n=JSON.parse(e.data);return{type:t,ts:Date.now(),...n}}catch{return{type:t,ts:Date.now()}}},sde="seeflow:last-project",yDe=()=>{if(typeof window>"u")return null;try{return window.localStorage.getItem(sde)}catch{return null}},ste=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(sde,e)}catch{}},mDe=(e,t)=>{if(e.length===0)return null;if(e.length===1)return e[0]??null;if(t){const n=e.find(r=>r.id===t);if(n)return n}return null},cte=["File","Edit","View","Tools","Layout","Selection","Help"],cde="seeflow:command-palette:recent",lde=5,ude=new Map(n$.map(e=>[e.id,e])),gDe=e=>typeof e=="string"&&ude.has(e),lte=()=>{if(typeof window>"u")return[];try{const e=window.localStorage.getItem(cde);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t.filter(gDe).slice(0,lde):[]}catch{return[]}},kDe=e=>{if(!(typeof window>"u"))try{window.localStorage.setItem(cde,JSON.stringify(e))}catch{}},ute=(e,t)=>e.enabled?e.enabled(t):!0,vDe=(e,t)=>t.length===0?!0:`${e.label} ${e.description??""}`.toLowerCase().includes(t);function xDe({open:e,onOpenChange:t,runCommand:n,ctx:r}){const[o,a]=g.useState(""),[i,s]=g.useState(0),[c,l]=g.useState(()=>lte()),u=g.useRef(null),d=g.useRef(null);g.useEffect(()=>{e&&(a(""),s(0),l(lte()))},[e]);const{groups:f,flat:p}=g.useMemo(()=>{const b=o.trim().toLowerCase();if(b.length===0){if(c.length===0)return{groups:[],flat:[]};const T=[];for(const A of c){const I=ude.get(A);I&&T.push({cmd:I,enabled:ute(I,r)})}return{groups:[{category:"Recent",rows:T}],flat:T}}const S=new Map;for(const T of n$){if(!vDe(T,b))continue;const _={cmd:T,enabled:ute(T,r)},A=S.get(T.category);A?A.push(_):S.set(T.category,[_])}const L=[...cte.filter(T=>S.has(T)),...Array.from(S.keys()).filter(T=>!cte.includes(T))].map(T=>({category:T,rows:S.get(T)??[]})),P=L.flatMap(T=>T.rows);return{groups:L,flat:P}},[o,r,c]);g.useEffect(()=>{if(p.length===0){s(0);return}s(b=>{var C;let S=b;if(S>=p.length&&(S=0),!((C=p[S])!=null&&C.enabled)){const L=p.findIndex(P=>P.enabled);L!==-1&&(S=L)}return S})},[p]);const y=g.useCallback(b=>{p.length!==0&&s(S=>{var L;let C=S;for(let P=0;P<p.length;P++)if(C=(C+b+p.length)%p.length,(L=p[C])!=null&&L.enabled)return C;return S})},[p]),k=g.useCallback(b=>{l(S=>{const C=[b,...S.filter(L=>L!==b)].slice(0,lde);return kDe(C),C})},[]),w=g.useCallback(b=>{const S=p[b];!S||!S.enabled||(k(S.cmd.id),n(S.cmd.id),t(!1))},[p,t,k,n]),v=g.useCallback(b=>{if(b.key==="ArrowDown"){b.preventDefault(),y(1);return}if(b.key==="ArrowUp"){b.preventDefault(),y(-1);return}b.key==="Enter"&&(b.preventDefault(),w(i))},[w,i,y]);g.useEffect(()=>{if(!e)return;const b=d.current;if(!b)return;const S=b.querySelector(`[data-command-row-index="${i}"]`);S&&typeof S.scrollIntoView=="function"&&S.scrollIntoView({block:"nearest"})},[i,e]);const x=o.trim().length>0;return m.jsx(IT,{open:e,onOpenChange:t,children:m.jsx(ET,{children:m.jsxs(zd,{className:ce("fixed left-0 right-0 top-[20%] z-50 mx-auto w-[480px] max-w-[90vw] border border-border bg-card shadow-lg duration-200","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0","sm:rounded-lg"),"data-testid":"command-palette",onOpenAutoFocus:b=>{var S;b.preventDefault(),(S=u.current)==null||S.focus()},children:[m.jsx("div",{className:ce("border-b",p.length===0&&!x&&"border-b-0"),children:m.jsx("input",{ref:u,type:"text",value:o,onChange:b=>a(b.target.value),onKeyDown:v,placeholder:"Type a command…","data-testid":"command-palette-input","aria-label":"Search commands",autoComplete:"off",spellCheck:!1,className:"w-full bg-transparent px-4 py-3 text-sm outline-hidden placeholder:text-muted-foreground"})}),m.jsx("div",{ref:d,"data-testid":"command-palette-list","data-empty":p.length===0?"true":"false",className:ce("max-h-[50vh] overflow-y-auto",p.length>0?"py-1":"","seeflow-no-scrollbar"),children:p.length===0?x?m.jsxs("div",{"data-testid":"command-palette-empty",className:"px-4 py-6 text-center text-sm text-muted-foreground",children:['No commands match "',o,'"']}):null:(()=>{let b=-1;return f.map(S=>m.jsxs("div",{className:"py-1",children:[m.jsx("div",{className:"px-3 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:S.category}),S.rows.map(C=>{b+=1;const L=b,P=L===i;return m.jsxs("button",{type:"button","data-testid":`command-palette-row-${C.cmd.id}`,"data-command-row-index":L,"data-highlighted":P?"true":"false","aria-disabled":C.enabled?void 0:!0,disabled:!C.enabled,onMouseEnter:()=>{C.enabled&&s(L)},onClick:()=>w(L),className:ce("flex w-full items-center justify-between gap-3 px-3 py-2 text-left text-sm outline-hidden",C.enabled?"cursor-pointer text-foreground hover:bg-muted":"cursor-not-allowed text-muted-foreground/50",P&&C.enabled?"bg-muted":""),children:[m.jsxs("div",{className:"flex min-w-0 flex-col",children:[m.jsx("span",{className:"truncate font-medium",children:C.cmd.label}),C.cmd.description?m.jsx("span",{className:"truncate text-xs text-muted-foreground",children:C.cmd.description}):null]}),C.cmd.shortcut?m.jsx("kbd",{"data-testid":`command-palette-shortcut-${C.cmd.id}`,className:"shrink-0 rounded border bg-muted px-1.5 py-0.5 font-mono text-[11px] text-muted-foreground",children:C.cmd.shortcut}):null]},C.cmd.id)})]},S.category))})()})]})})})}var cn=Uint8Array,Qn=Uint16Array,oU=Int32Array,aU=new cn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),iU=new cn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),dte=new cn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),dde=function(e,t){for(var n=new Qn(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var o=new oU(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)o[a]=a-n[r]<<5|r;return{b:n,r:o}},hde=dde(aU,2),wDe=hde.b,kB=hde.r;wDe[28]=258,kB[258]=28;var MDe=dde(iU,0),hte=MDe.r,vB=new Qn(32768);for(var Mt=0;Mt<32768;++Mt){var Ta=(Mt&43690)>>1|(Mt&21845)<<1;Ta=(Ta&52428)>>2|(Ta&13107)<<2,Ta=(Ta&61680)>>4|(Ta&3855)<<4,vB[Mt]=((Ta&65280)>>8|(Ta&255)<<8)>>1}var y2=function(e,t,n){for(var r=e.length,o=0,a=new Qn(t);o<r;++o)e[o]&&++a[e[o]-1];var i=new Qn(t);for(o=1;o<t;++o)i[o]=i[o-1]+a[o-1]<<1;var s;if(n){s=new Qn(1<<t);var c=15-t;for(o=0;o<r;++o)if(e[o])for(var l=o<<4|e[o],u=t-e[o],d=i[e[o]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[vB[d]>>c]=l}else for(s=new Qn(r),o=0;o<r;++o)e[o]&&(s[o]=vB[i[e[o]-1]++]>>15-e[o]);return s},_u=new cn(288);for(var Mt=0;Mt<144;++Mt)_u[Mt]=8;for(var Mt=144;Mt<256;++Mt)_u[Mt]=9;for(var Mt=256;Mt<280;++Mt)_u[Mt]=7;for(var Mt=280;Mt<288;++Mt)_u[Mt]=8;var wR=new cn(32);for(var Mt=0;Mt<32;++Mt)wR[Mt]=5;var bDe=y2(_u,9,0),CDe=y2(wR,5,0),fde=function(e){return(e+7)/8|0},pde=function(e,t,n){return(n==null||n>e.length)&&(n=e.length),new cn(e.subarray(t,n))},SDe=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],XT=function(e,t,n){var r=new Error(t||SDe[e]);if(r.code=e,Error.captureStackTrace&&Error.captureStackTrace(r,XT),!n)throw r;return r},Bo=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},sh=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},wF=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var o=n.length,a=n.slice();if(!o)return{t:mde,l:0};if(o==1){var i=new cn(n[0].s+1);return i[n[0].s]=1,{t:i,l:1}}n.sort(function(S,C){return S.f-C.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=o-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<o;++r)a[r].s>f&&(f=a[r].s);var p=new Qn(f+1),y=xB(n[u-1],p,0);if(y>t){var r=0,k=0,w=y-t,v=1<<w;for(a.sort(function(C,L){return p[L.s]-p[C.s]||C.f-L.f});r<o;++r){var M=a[r].s;if(p[M]>t)k+=v-(1<<y-p[M]),p[M]=t;else break}for(k>>=w;k>0;){var x=a[r].s;p[x]<t?k-=1<<t-p[x]++-1:++r}for(;r>=0&&k;--r){var b=a[r].s;p[b]==t&&(--p[b],++k)}y=t}return{t:new cn(p),l:y}},xB=function(e,t,n){return e.s==-1?Math.max(xB(e.l,t,n+1),xB(e.r,t,n+1)):t[e.s]=n},fte=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new Qn(++t),r=0,o=e[0],a=1,i=function(c){n[r++]=c},s=1;s<=t;++s)if(e[s]==o&&s!=t)++a;else{if(!o&&a>2){for(;a>138;a-=138)i(32754);a>2&&(i(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(i(o),--a;a>6;a-=6)i(8304);a>2&&(i(a-3<<5|8208),a=0)}for(;a--;)i(o);a=1,o=e[s]}return{c:n.subarray(0,r),n:t}},ch=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},yde=function(e,t,n){var r=n.length,o=fde(t+2);e[o]=r&255,e[o+1]=r>>8,e[o+2]=e[o]^255,e[o+3]=e[o+1]^255;for(var a=0;a<r;++a)e[o+a+4]=n[a];return(o+4+r)*8},pte=function(e,t,n,r,o,a,i,s,c,l,u){Bo(t,u++,n),++o[256];for(var d=wF(o,15),f=d.t,p=d.l,y=wF(a,15),k=y.t,w=y.l,v=fte(f),M=v.c,x=v.n,b=fte(k),S=b.c,C=b.n,L=new Qn(19),P=0;P<M.length;++P)++L[M[P]&31];for(var P=0;P<S.length;++P)++L[S[P]&31];for(var T=wF(L,7),_=T.t,A=T.l,I=19;I>4&&!_[dte[I-1]];--I);var V=l+5<<3,j=ch(o,_u)+ch(a,wR)+i,H=ch(o,f)+ch(a,k)+i+14+3*I+ch(L,_)+2*L[16]+3*L[17]+7*L[18];if(c>=0&&V<=j&&V<=H)return yde(t,u,e.subarray(c,c+l));var O,U,z,N;if(Bo(t,u,1+(H<j)),u+=2,H<j){O=y2(f,p,0),U=f,z=y2(k,w,0),N=k;var E=y2(_,A,0);Bo(t,u,x-257),Bo(t,u+5,C-1),Bo(t,u+10,I-4),u+=14;for(var P=0;P<I;++P)Bo(t,u+3*P,_[dte[P]]);u+=3*I;for(var W=[M,S],q=0;q<2;++q)for(var R=W[q],P=0;P<R.length;++P){var G=R[P]&31;Bo(t,u,E[G]),u+=_[G],G>15&&(Bo(t,u,R[P]>>5&127),u+=R[P]>>12)}}else O=bDe,U=_u,z=CDe,N=wR;for(var P=0;P<s;++P){var X=r[P];if(X>255){var G=X>>18&31;sh(t,u,O[G+257]),u+=U[G+257],G>7&&(Bo(t,u,X>>23&31),u+=aU[G]);var Y=X&31;sh(t,u,z[Y]),u+=N[Y],Y>3&&(sh(t,u,X>>5&8191),u+=iU[Y])}else sh(t,u,O[X]),u+=U[X]}return sh(t,u,O[256]),u+U[256]},LDe=new oU([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),mde=new cn(0),IDe=function(e,t,n,r,o,a){var i=a.z||e.length,s=new cn(r+i+5*(1+Math.ceil(i/7e3))+o),c=s.subarray(r,s.length-o),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=LDe[t-1],f=d>>13,p=d&8191,y=(1<<n)-1,k=a.p||new Qn(32768),w=a.h||new Qn(y+1),v=Math.ceil(n/3),M=2*v,x=function(te){return(e[te]^e[te+1]<<v^e[te+2]<<M)&y},b=new oU(25e3),S=new Qn(288),C=new Qn(32),L=0,P=0,T=a.i||0,_=0,A=a.w||0,I=0;T+2<i;++T){var V=x(T),j=T&32767,H=w[V];if(k[j]=H,w[V]=j,A<=T){var O=i-T;if((L>7e3||_>24576)&&(O>423||!l)){u=pte(e,c,0,b,S,C,P,_,I,T-I,u),_=L=P=0,I=T;for(var U=0;U<286;++U)S[U]=0;for(var U=0;U<30;++U)C[U]=0}var z=2,N=0,E=p,W=j-H&32767;if(O>2&&V==x(T-W))for(var q=Math.min(f,O)-1,R=Math.min(32767,T),G=Math.min(258,O);W<=R&&--E&&j!=H;){if(e[T+z]==e[T+z-W]){for(var X=0;X<G&&e[T+X]==e[T+X-W];++X);if(X>z){if(z=X,N=W,X>q)break;for(var Y=Math.min(W,X-2),oe=0,U=0;U<Y;++U){var ee=T-W+U&32767,ae=k[ee],ve=ee-ae&32767;ve>oe&&(oe=ve,H=ee)}}}j=H,H=k[j],W+=j-H&32767}if(N){b[_++]=268435456|kB[z]<<18|hte[N];var Se=kB[z]&31,be=hte[N]&31;P+=aU[Se]+iU[be],++S[257+Se],++C[be],A=T+z,++L}else b[_++]=e[T],++S[e[T]]}}for(T=Math.max(T,A);T<i;++T)b[_++]=e[T],++S[e[T]];u=pte(e,c,l,b,S,C,P,_,I,T-I,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=w,a.p=k,a.i=T,a.w=A)}else{for(var T=a.w||0;T<i+l;T+=65535){var we=T+65535;we>=i&&(c[u/8|0]=l,we=i),u=yde(c,u+1,e.subarray(T,we))}a.i=i}return pde(s,0,r+fde(u)+o)},EDe=function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e}(),ADe=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=EDe[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},gde=function(){var e=1,t=0;return{p:function(n){for(var r=e,o=t,a=n.length|0,i=0;i!=a;){for(var s=Math.min(i+2655,a);i<s;++i)o+=r+=n[i];r=(r&65535)+15*(r>>16),o=(o&65535)+15*(o>>16)}e=r,t=o},d:function(){return e%=65521,t%=65521,(e&255)<<24|(e&65280)<<8|(t&255)<<8|t>>8}}},kde=function(e,t,n,r,o){if(!o&&(o={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),i=new cn(a.length+e.length);i.set(a),i.set(e,a.length),e=i,o.w=a.length}return IDe(e,t.level==null?6:t.level,t.mem==null?o.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,o)},vde=function(e,t){var n={};for(var r in e)n[r]=e[r];for(var r in t)n[r]=t[r];return n},$t=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},PDe=function(e,t){var n=t.level,r=n==0?0:n<6?1:n==9?3:2;if(e[0]=120,e[1]=r<<6|(t.dictionary&&32),e[1]|=31-(e[0]<<8|e[1])%31,t.dictionary){var o=gde();o.p(t.dictionary),$t(e,2,o.d())}};function _De(e,t){return kde(e,t||{},0,0)}function vqe(e,t){t||(t={});var n=gde();n.p(e);var r=kde(e,t,t.dictionary?6:2,4);return PDe(r,t),$t(r,r.length-4,n.d()),r}var xde=function(e,t,n,r){for(var o in e){var a=e[o],i=t+o,s=r;Array.isArray(a)&&(s=vde(r,a[1]),a=a[0]),a instanceof cn?n[i]=[a,s]:(n[i+="/"]=[new cn(0),s],xde(a,i,n,r))}},yte=typeof TextEncoder<"u"&&new TextEncoder,RDe=typeof TextDecoder<"u"&&new TextDecoder,TDe=0;try{RDe.decode(mde,{stream:!0}),TDe=1}catch{}function wB(e,t){var n;if(yte)return yte.encode(e);for(var r=e.length,o=new cn(e.length+(e.length>>1)),a=0,i=function(l){o[a++]=l},n=0;n<r;++n){if(a+5>o.length){var s=new cn(a+8+(r-n<<1));s.set(o),o=s}var c=e.charCodeAt(n);c<128||t?i(c):c<2048?(i(192|c>>6),i(128|c&63)):c>55295&&c<57344?(c=65536+(c&1047552)|e.charCodeAt(++n)&1023,i(240|c>>18),i(128|c>>12&63),i(128|c>>6&63),i(128|c&63)):(i(224|c>>12),i(128|c>>6&63),i(128|c&63))}return pde(o,0,a)}var MB=function(e){var t=0;if(e)for(var n in e){var r=e[n].length;r>65535&&XT(9),t+=r+4}return t},mte=function(e,t,n,r,o,a,i,s){var c=r.length,l=n.extra,u=s&&s.length,d=MB(l);$t(e,t,i!=null?33639248:67324752),t+=4,i!=null&&(e[t++]=20,e[t++]=n.os),e[t]=20,t+=2,e[t++]=n.flag<<1|(a<0&&8),e[t++]=o&&8,e[t++]=n.compression&255,e[t++]=n.compression>>8;var f=new Date(n.mtime==null?Date.now():n.mtime),p=f.getFullYear()-1980;if((p<0||p>119)&&XT(10),$t(e,t,p<<25|f.getMonth()+1<<21|f.getDate()<<16|f.getHours()<<11|f.getMinutes()<<5|f.getSeconds()>>1),t+=4,a!=-1&&($t(e,t,n.crc),$t(e,t+4,a<0?-a-2:a),$t(e,t+8,n.size)),$t(e,t+12,c),$t(e,t+14,d),t+=16,i!=null&&($t(e,t,u),$t(e,t+6,n.attrs),$t(e,t+10,i),t+=14),e.set(r,t),t+=c,d)for(var y in l){var k=l[y],w=k.length;$t(e,t,+y),$t(e,t+2,w),e.set(k,t+4),t+=4+w}return u&&(e.set(s,t),t+=u),t},jDe=function(e,t,n,r,o){$t(e,t,101010256),$t(e,t+8,n),$t(e,t+10,n),$t(e,t+12,r),$t(e,t+16,o)};function NDe(e,t){t||(t={});var n={},r=[];xde(e,"",n,t);var o=0,a=0;for(var i in n){var s=n[i],c=s[0],l=s[1],u=l.level==0?0:8,d=wB(i),f=d.length,p=l.comment,y=p&&wB(p),k=y&&y.length,w=MB(l.extra);f>65535&&XT(11);var v=u?_De(c,l):c,M=v.length,x=ADe();x.p(c),r.push(vde(l,{size:c.length,crc:x.d(),c:v,f:d,m:y,u:f!=i.length||y&&p.length!=k,o,compression:u})),o+=30+f+w+M,a+=76+2*(f+w)+(k||0)+M}for(var b=new cn(a+22),S=o,C=a-o,L=0;L<r.length;++L){var d=r[L];mte(b,d.o,d,d.f,d.u,d.c.length);var P=30+d.f.length+MB(d.extra);b.set(d.c,d.o+P),mte(b,o,d,d.f,d.u,d.c.length,d.o,d.m),o+=16+P+(d.m?d.m.length:0)}return jDe(b,o,r.length,C,S),b}const zDe="https://seeflow.dev/api";async function DDe(e,t,n,r,o){const a=await Nre(e);if(!a.demo)throw new Error("Demo has no data");const i=a.demo,s=new Set,c=[];for(const y of i.nodes)y.type==="imageNode"&&y.data.path&&!s.has(y.data.path)?(s.add(y.data.path),c.push(y.data.path)):y.type==="htmlNode"&&y.data.htmlPath&&!s.has(y.data.htmlPath)&&(s.add(y.data.htmlPath),c.push(y.data.htmlPath));const u={[r==="link"?"seeflow.private.json":"seeflow.json"]:wB(JSON.stringify(i))};if(o){const y=o.split(",")[1];y&&(u["preview.png"]=Uint8Array.from(atob(y),k=>k.charCodeAt(0)))}for(const y of c){const k=await fetch(`/api/projects/${encodeURIComponent(e)}/files/${y}`);k.ok&&(u[`files/${y}`]=new Uint8Array(await k.arrayBuffer()))}const d=NDe(u),f=await fetch(`${zDe}/flows?email=${encodeURIComponent(t)}&name=${encodeURIComponent(n)}`,{method:"POST",headers:{"content-type":"application/zip"},body:d.buffer});if(!f.ok)throw new Error(`Export failed with status ${f.status}`);const p=await f.json();if(typeof p.url!="string")throw new Error("Invalid response from cloud API: missing url");return{shareUrl:p.url}}function qDe(e){return g.useCallback((t,n,r,o)=>DDe(e,t,n,r,o),[e])}const gte="seeflow.export.email",kte="seeflow.export.name",vte="seeflow.export.visibility";function ODe({open:e,onOpenChange:t,projectId:n,onCapturePreview:r}){const[o,a]=g.useState(""),[i,s]=g.useState(""),[c,l]=g.useState("public"),[u,d]=g.useState({kind:"idle"}),[f,p]=g.useState(!1),y=qDe(n);g.useEffect(()=>{e&&(a(localStorage.getItem(gte)??""),s(localStorage.getItem(kte)??""),l(localStorage.getItem(vte)??"public"),d({kind:"idle"}),p(!1))},[e]);const k=g.useCallback(async()=>{d({kind:"loading"});try{const x=await(r==null?void 0:r()),{shareUrl:b}=await y(o.trim(),i.trim(),c,x);localStorage.setItem(gte,o.trim()),localStorage.setItem(kte,i.trim()),localStorage.setItem(vte,c),d({kind:"done",shareUrl:b})}catch(x){d({kind:"error",message:x instanceof Error?x.message:String(x)})}},[y,o,i,c,r]),w=g.useCallback(async()=>{if(u.kind==="done")try{await navigator.clipboard.writeText(u.shareUrl),p(!0),setTimeout(()=>p(!1),2e3)}catch(x){console.error("Failed to copy to clipboard:",x)}},[u]),v=u.kind==="loading",M=o.trim().length>0&&i.trim().length>0;return m.jsx(RT,{open:e,onOpenChange:t,children:m.jsxs(Sf,{className:"sm:max-w-md","data-testid":"export-dialog",onOpenAutoFocus:x=>{x.preventDefault();const b=document.querySelector('[data-testid="export-email-input"]');b==null||b.focus()},children:[m.jsxs(Lf,{children:[m.jsx(If,{children:"Export to seeflow.dev"}),m.jsx(Ef,{children:"Upload this diagram to the cloud and get a shareable link."})]}),u.kind!=="done"?m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex flex-col gap-4",children:[m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Email"}),m.jsx("input",{type:"email",required:!0,autoComplete:"email",value:o,onChange:x=>a(x.target.value),disabled:v,"data-testid":"export-email-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"}),m.jsx("span",{className:"text-xs text-muted-foreground",children:"We'll use this to let you manage your flows in the future."})]}),m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Flow Name"}),m.jsx("input",{type:"text",required:!0,value:i,onChange:x=>s(x.target.value),disabled:v,"data-testid":"export-name-input",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50"})]}),m.jsxs("label",{className:"flex flex-col gap-1.5 text-sm",children:[m.jsx("span",{className:"font-medium",children:"Visibility"}),m.jsxs("select",{value:c,onChange:x=>l(x.target.value),disabled:v,"data-testid":"export-visibility-select",className:"rounded-md border bg-background px-3 py-2 text-sm outline-hidden ring-offset-background focus:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",children:[m.jsx("option",{value:"public",children:"Public — anyone can discover it"}),m.jsx("option",{value:"link",children:"Anyone with the link"})]})]}),u.kind==="error"?m.jsx("div",{role:"alert","data-testid":"export-error",className:"rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",children:u.message}):null]}),m.jsx(fd,{children:u.kind==="error"?m.jsxs(m.Fragment,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),"data-testid":"export-cancel",children:"Cancel"}),m.jsx(Ft,{type:"button",onClick:()=>d({kind:"idle"}),"data-testid":"export-retry",children:"Try again"})]}):m.jsxs(m.Fragment,{children:[m.jsx(Ft,{type:"button",variant:"ghost",onClick:()=>t(!1),disabled:v,"data-testid":"export-cancel",children:"Cancel"}),m.jsx(Ft,{type:"button",onClick:k,disabled:v||!M,"data-testid":"export-submit",children:v?m.jsxs(m.Fragment,{children:[m.jsx(dr,{className:"h-4 w-4 animate-spin","aria-hidden":"true"}),m.jsx("span",{children:"Uploading…"})]}):"Export"})]})})]}):m.jsxs(m.Fragment,{children:[m.jsxs("div",{className:"flex flex-col gap-3",children:[m.jsx("p",{className:"text-sm text-muted-foreground",children:"Your diagram is live. Share this link:"}),m.jsxs("div",{className:"flex gap-2",children:[m.jsx("input",{type:"text",readOnly:!0,value:u.shareUrl,"data-testid":"export-share-url",className:"min-w-0 flex-1 rounded-md border bg-muted px-3 py-2 text-sm outline-hidden"}),m.jsx(Ft,{type:"button",variant:"outline",size:"icon",onClick:w,"aria-label":"Copy link","data-testid":"export-copy",children:f?m.jsx(Ja,{className:"h-4 w-4","aria-hidden":"true"}):m.jsx(T1,{className:"h-4 w-4","aria-hidden":"true"})}),m.jsx(Ft,{type:"button",variant:"outline",size:"icon",onClick:()=>window.open(u.shareUrl,"_blank"),"aria-label":"View in new tab","data-testid":"export-view",children:m.jsx(Fh,{className:"h-4 w-4","aria-hidden":"true"})})]})]}),m.jsx(fd,{children:m.jsx(Ft,{type:"button",onClick:()=>t(!1),"data-testid":"export-done",children:"Done"})})]})]})})}const FDe=(e,t)=>{if(e.has(t))return e;const n=new Set(e);return n.add(t),n},HDe=(e,t)=>{if(t.length===0)return e;let n=!1;const r=new Set(e);for(const o of t)r.has(o)||(r.add(o),n=!0);return n?r:e},BDe=(e,t)=>{if(!e.has(t))return e;const n=new Set(e);return n.delete(t),n},VDe=(e,t)=>{if(t.length===0)return e;let n=!1;const r=new Set(e);for(const o of t)r.has(o)&&(r.delete(o),n=!0);return n?r:e},$De=(e,t)=>{if(e.size===0)return e;const n=new Set(t.map(a=>a.id));let r=!1;const o=new Set(e);for(const a of o)n.has(a)||(o.delete(a),r=!0);return r?o:e},xte=()=>{const[e,t]=g.useState(()=>new Set),n=g.useCallback(c=>{t(l=>FDe(l,c))},[]),r=g.useCallback(c=>{t(l=>HDe(l,c))},[]),o=g.useCallback(c=>{t(l=>BDe(l,c))},[]),a=g.useCallback(c=>{t(l=>VDe(l,c))},[]),i=g.useCallback(c=>{t(l=>$De(l,c))},[]),s=g.useCallback(()=>t(new Set),[]);return{ids:e,mark:n,markMany:r,unmark:o,unmarkMany:a,pruneAgainst:i,reset:s}},UDe=(e,t)=>e===t?!0:e==null||t==null||typeof e!=typeof t||typeof e!="object"?!1:JSON.stringify(e)===JSON.stringify(t),WDe=(e,t,n)=>({...e,[t]:{...e[t],...n}}),GDe=(e,t)=>{if(!(t in e))return e;const n={...e};return delete n[t],n},KDe=(e,t)=>{const n=Object.entries(e);if(n.length===0)return e;const r=new Map(t.map(i=>[i.id,i]));let o=!1;const a={...e};for(const[i,s]of n){const c=r.get(i);if(!c)continue;const l={};let u=!1;for(const d of Object.keys(s))UDe(s[d],c[d])?o=!0:(l[d]=s[d],u=!0);u?a[i]=l:(o=!0,delete a[i])}return o?a:e},wte=()=>{const[e,t]=g.useState({}),n=g.useCallback((i,s)=>{t(c=>WDe(c,i,s))},[]),r=g.useCallback(i=>{t(s=>GDe(s,i))},[]),o=g.useCallback(i=>{t(s=>KDe(s,i))},[]),a=g.useCallback(()=>t({}),[]);return{overrides:e,setOverride:n,dropOverride:r,pruneAgainst:o,reset:a}},ZDe=500,XDe=500,YDe={stack:[],cursor:0},QDe=(e,t,n)=>{const r=Date.now(),o=ZDe,a=XDe,{stack:i,cursor:s}=e;if(t.coalesceKey&&s>0){const u=i[s-1];if(u&&u.coalesceKey===t.coalesceKey&&r-u.capturedAt<=a){const d=i.slice(0,s);return d[s-1]={...u,do:t.do,capturedAt:r},{stack:d,cursor:s}}}const c=i.slice(0,s);c.push({...t,capturedAt:r});let l=s+1;for(;c.length>o;)c.shift(),l-=1;return l<0&&(l=0),{stack:c,cursor:l}},JDe=e=>e.cursor===0?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor-1},entry:e.stack[e.cursor-1]},eqe=e=>e.cursor===e.stack.length?{state:e,entry:void 0}:{state:{...e,cursor:e.cursor+1},entry:e.stack[e.cursor]},tqe=()=>({stack:[],cursor:0}),nqe=e=>{if(e.cursor===0)return e;const t=e.stack.slice();return t.splice(e.cursor-1,1),{stack:t,cursor:e.cursor-1}},rqe=(e,t)=>t.state,oqe=()=>{const[e,t]=g.useReducer(rqe,YDe),n=g.useRef(e);n.current=e;const r=g.useRef(Promise.resolve()),o=g.useRef(0),a=g.useCallback(p=>{p!==n.current&&(n.current=p,t({type:"replace",state:p}))},[]),i=g.useCallback(p=>{const y={do:p.do,undo:p.undo,coalesceKey:p.coalesceKey,capturedAt:p.capturedAt??Date.now()};a(QDe(n.current,y))},[a]),s=g.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const y=JDe(n.current);if(y.entry)return a(y.state),{entry:y.entry}});return r.current=p.then(()=>{},()=>{}),p},[a]),c=g.useCallback(()=>{o.current=Date.now();const p=r.current.then(()=>{const y=eqe(n.current);if(y.entry)return a(y.state),{entry:y.entry}});return r.current=p.then(()=>{},()=>{}),p},[a]),l=g.useCallback(()=>{a(tqe())},[a]),u=g.useCallback(()=>{a(nqe(n.current))},[a]),d=g.useCallback(()=>{o.current=Date.now()},[]),f=g.useCallback(()=>o.current,[]);return{push:i,undo:s,redo:c,clear:l,dropTop:u,canUndo:e.cursor>0,canRedo:e.cursor<e.stack.length,markMutation:d,lastMutationAt:f}};function aqe({nodes:e,connectors:t,flowPos:n,nodeIdGen:r,connectorIdGen:o,defaultOffset:a={x:24,y:24}}){const i=new Map;for(const p of e)i.set(p.id,r(p.id));let s=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;for(const p of e)p.position.x<s&&(s=p.position.x),p.position.y<c&&(c=p.position.y);Number.isFinite(s)||(s=0),Number.isFinite(c)||(c=0);const l=n?n.x-s:a.x,u=n?n.y-c:a.y,d=e.map(p=>{const y=i.get(p.id);if(y===void 0)throw new Error(`paste id missing for ${p.id}`);return{...p,id:y,position:{x:p.position.x+l,y:p.position.y+u}}}),f=t.map(p=>{const y=o(p.id);return{...p,id:y,source:i.get(p.source)??p.source,target:i.get(p.target)??p.target}});return{newNodes:d,newConnectors:f,idMap:i}}const iqe=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploading:!0}}),sqe=e=>({type:"imageNode",data:wde(e)}),cqe=e=>({type:"imageNode",position:e.position,data:{path:"",alt:e.originalFilename,width:e.dims.width,height:e.dims.height,_uploadError:e.message}}),wde=e=>({...PMe(e.path,e.dims,e.lastUsed),alt:e.originalFilename}),lqe=async(e,t)=>{const{nodeId:n,demoId:r,file:o,originalFilename:a,position:i,dims:s,lastUsed:c}=e;t.rememberRetry(n,{file:o,originalFilename:a,position:i,dims:s}),t.setOverride(n,iqe({position:i,dims:s,originalFilename:a}));let l;try{l=(await t.upload(r,o,a)).path}catch(p){const y=p instanceof Error?p.message:String(p);throw t.setOverride(n,cqe({position:i,dims:s,originalFilename:a,message:y})),p}t.setOverride(n,sqe({path:l,dims:s,originalFilename:a,lastUsed:c}));const u=wde({path:l,dims:s,originalFilename:a,lastUsed:c}),d={id:n,type:"imageNode",position:i,data:u},{id:f}=await t.createNode(r,d);t.forgetRetry(n),t.pushUndo&&t.pushUndo({do:async()=>{await t.createNode(r,{...d,id:f})},undo:async()=>{await t.deleteNode(r,f)}})},uqe=new Set(["INPUT","TEXTAREA","SELECT"]),Pr=e=>e?uqe.has(e.tagName)?!0:e instanceof HTMLElement&&e.isContentEditable:!1,dqe=(e,t,n)=>{const r=e.indexOf(t);if(r<0)return null;const o=e.length,a=[...e];switch(n.op){case"forward":{if(r>=o-1)return null;const i=a[r],s=a[r+1];return i===void 0||s===void 0?null:(a[r]=s,a[r+1]=i,a)}case"backward":{if(r<=0)return null;const i=a[r],s=a[r-1];return i===void 0||s===void 0?null:(a[r]=s,a[r-1]=i,a)}case"toFront":{if(r===o-1)return null;const[i]=a.splice(r,1);return i===void 0?null:(a.push(i),a)}case"toBack":{if(r===0)return null;const[i]=a.splice(r,1);return i===void 0?null:(a.unshift(i),a)}case"toIndex":{const i=Math.min(Math.max(n.index,0),o-1);if(i===r)return null;const[s]=a.splice(r,1);return s===void 0?null:(a.splice(i,0,s),a)}}};function hqe({slug:e,demos:t,detail:n,loading:r,runs:o,nodeEvents:a,statusByNode:i,onPlayNode:s,onRestartDemo:c}){var Hd,dn;const l=t.find(F=>F.slug===e),[u,d]=g.useState([]),[f,p]=g.useState([]),[y,k]=g.useState(null),w=g.useRef(u),v=g.useRef(f);g.useEffect(()=>{w.current=u},[u]),g.useEffect(()=>{v.current=f},[f]);const M=g.useRef(null),x=g.useRef(null),b=g.useRef(null),S=wte(),C=wte(),L=xte(),P=xte(),[T,_]=g.useState(null),[A,I]=g.useState(null),[V,j]=g.useState(null),H=g.useRef(null);g.useEffect(()=>{H.current=V},[V]);const[O,U]=g.useState(!1),[z,N]=g.useState(0),E=g.useRef(null),W=g.useRef(null),q=g.useCallback(F=>{W.current=F},[]),R=oqe(),{push:G,dropTop:X,markMutation:Y,clear:oe,lastMutationAt:ee}=R,{reset:ae}=S,{reset:ve}=C,{reset:Se}=L,{reset:be}=P;g.useEffect(()=>{d([]),p([]),k(null),ae(),ve(),Se(),be(),_(null),I(null),va.current=null,bi(!1),to.current.clear(),R.clear()},[n==null?void 0:n.id]);const we=g.useCallback((F,B)=>{d(F),p(B)},[]),te=(Hd=n==null?void 0:n.demo)==null?void 0:Hd.nodes,ie=(dn=n==null?void 0:n.demo)==null?void 0:dn.connectors,{pruneAgainst:Te}=S,{pruneAgainst:Ae}=C,{pruneAgainst:at}=L,{pruneAgainst:Qe}=P;g.useEffect(()=>{te&&(Te(te),at(te)),Date.now()-ee()>2e3&&oe()},[te,Te,at,ee,oe]),g.useEffect(()=>{if(!te)return;const F=E.current,B=new Set(te.map(ne=>ne.id));if(E.current=B,F===null)return;const Z=S.overrides,$=L.ids;let D=!1;for(const ne of B)if(!F.has(ne)&&!(ne in Z)){D=!0;break}if(!D){for(const ne of F)if(!B.has(ne)&&!$.has(ne)){D=!0;break}}D&&N(ne=>ne+1)},[te]),g.useEffect(()=>{ie&&(Ae(ie),Qe(ie)),Date.now()-ee()>2e3&&oe()},[ie,Ae,Qe,ee,oe]),g.useEffect(()=>{if(!(!te||!T)&&te.length===T.length){for(let F=0;F<te.length;F++){const B=te[F],Z=T[F];if(!B||B.id!==Z)return}_(null)}},[te,T]);const le=(n==null?void 0:n.id)??null,Q=g.useMemo(()=>le?_Me({baseUrl:"",demoId:le}):null,[le]),[ue,ge]=g.useState(!1),{setOverride:Me,dropOverride:qe}=S,re=g.useRef(S.overrides);g.useEffect(()=>{re.current=S.overrides},[S.overrides]);const he=g.useCallback((F,B)=>{var $;if(!le||!Q)return;const Z=($=te==null?void 0:te.find(D=>D.id===F))==null?void 0:$.position;Me(F,{position:B}),I(null),Y(),Z&&G({do:async()=>{await Q.updateNodePosition(F,B)},undo:async()=>{await Q.updateNodePosition(F,Z)},coalesceKey:`node:${F}:position`}),Q.updateNodePosition(F,B).catch(D=>{qe(F),Z&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNodePosition failed",D)})},[le,Q,te,Me,qe,G,X,Y]),Ie=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=re.current,Z=F.map($=>{var Pe;const D=te==null?void 0:te.find(ke=>ke.id===$.id);if(!D)return null;const ne=((Pe=B[$.id])==null?void 0:Pe.position)??D.position;return{id:$.id,prev:ne,next:$.position}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Me($.id,{position:$.next});I(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNodePosition($.id,$.next)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNodePosition($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNodePosition($.id,$.next),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})}},[le,Q,te,Me,qe,G,Y]),He=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(ne=>ne.id===F),$=Z?{width:Z.data.width,height:Z.data.height,position:{x:Z.position.x,y:Z.position.y}}:void 0,D={width:B.width,height:B.height,position:{x:B.x,y:B.y}};Me(F,{position:D.position,data:{width:D.width,height:D.height}}),I(null),Y(),$&&G({do:async()=>{await Q.updateNode(F,D)},undo:async()=>{await Q.updateNode(F,$)},coalesceKey:`node:${F}:resize`}),Q.updateNode(F,D).catch(ne=>{qe(F),$&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateNode resize failed",ne)})},[le,Q,te,Me,qe,G,X,Y]),Ue=g.useCallback(F=>{if(!le||!Q)return;const B=te==null?void 0:te.find(D=>D.id===F);if(!B)return;const Z={autoSize:B.data.autoSize,width:B.data.width,height:B.data.height},$={autoSize:!0};Me(F,{data:{autoSize:!0,width:void 0,height:void 0}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,$)},undo:async()=>{await Q.updateNode(F,Z)},coalesceKey:`node:${F}:fit-to-content`}),Q.updateNode(F,$).catch(D=>{qe(F),X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode (fit-to-content) failed",D)})},[le,Q,te,Me,qe,G,X,Y]),Rt=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=[];for(const $ of F){const D=te==null?void 0:te.find(dt=>dt.id===$.id);if(!D)continue;const ne=D.data,Pe={position:{x:D.position.x,y:D.position.y}};ne.width!==void 0&&(Pe.width=ne.width),ne.height!==void 0&&(Pe.height=ne.height);const ke={position:$.position};$.width!==void 0&&(ke.width=$.width),$.height!==void 0&&(ke.height=$.height),B.push({id:$.id,prev:Pe,next:ke})}if(B.length===0)return;for(const $ of B){const D={};$.next.width!==void 0&&(D.width=$.next.width),$.next.height!==void 0&&(D.height=$.next.height),Me($.id,{position:$.next.position,...Object.keys(D).length>0?{data:D}:{}})}I(null),Y();const Z=B.map($=>$.id).sort();G({do:async()=>{await Promise.allSettled(B.map($=>Q.updateNode($.id,$.next)))},undo:async()=>{await Promise.allSettled(B.map($=>Q.updateNode($.id,$.prev)))},coalesceKey:`multi:resize:${Z.join(",")}`}),Promise.all(B.map(async $=>{try{return await Q.updateNode($.id,$.next),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})},[le,Q,te,Me,qe,G,Y]),{setOverride:Oe,dropOverride:je}=C,Pt=g.useCallback((F,B)=>{Me(F,{data:B})},[Me]),sr=g.useCallback((F,B)=>{for(const Z of F)Me(Z,{data:B})},[Me]),Dt=g.useCallback((F,B)=>{Oe(F,B)},[Oe]),Dn=g.useCallback((F,B)=>{if(!le||!Q)return;WQ(Ai,B);const Z=te==null?void 0:te.find(D=>D.id===F);let $=null;if(Z){$={};const D=Z.data;for(const ne of Object.keys(B))$[ne]=D[ne]}if(Me(F,{data:B}),I(null),Y(),$){const D=$;G({do:async()=>{await Q.updateNode(F,B)},undo:async()=>{await Q.updateNode(F,D)},coalesceKey:`node:${F}:style`})}Q.updateNode(F,B).catch(D=>{qe(F),$&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode style failed",D)})},[le,Q,te,Me,qe,G,X,Y]),en=g.useCallback((F,B)=>{if(!le||!Q||F.length===0)return;WQ(Ai,B);const Z=F.map($=>{const D=te==null?void 0:te.find(ke=>ke.id===$);if(!D)return null;const ne=D.data,Pe={};for(const ke of Object.keys(B))Pe[ke]=ne[ke];return{id:$,prev:Pe}}).filter($=>$!==null);if(Z.length!==0){for(const $ of Z)Me($.id,{data:B});I(null),Y(),G({do:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,B)))},undo:async()=>{await Promise.allSettled(Z.map($=>Q.updateNode($.id,$.prev)))}}),Promise.all(Z.map(async $=>{try{return await Q.updateNode($.id,B),null}catch(D){return qe($.id),D instanceof Error?D.message:String(D)}})).then($=>{const D=$.find(ne=>ne!==null);D&&I(D)})}},[le,Q,te,Me,qe,G,Y]),$u=g.useCallback(F=>{if(!le||!Q||F.length===0)return;const B=F.map(D=>{const ne=te==null?void 0:te.find(ke=>ke.id===D);if(!ne)return null;const Pe=ne.data;return{id:D,prev:Pe.locked===!0}}).filter(D=>D!==null);if(B.length===0)return;const Z=B.some(D=>!D.prev),$=B.filter(D=>D.prev!==Z);if($.length!==0){for(const D of $)Me(D.id,{data:{locked:Z}});I(null),Y(),G({do:async()=>{await Promise.allSettled($.map(D=>Q.updateNode(D.id,{locked:Z})))},undo:async()=>{await Promise.allSettled($.map(D=>Q.updateNode(D.id,{locked:D.prev})))}}),Promise.all($.map(async D=>{try{return await Q.updateNode(D.id,{locked:Z}),null}catch(ne){return qe(D.id),ne instanceof Error?ne.message:String(ne)}})).then(D=>{const ne=D.find(Pe=>Pe!==null);ne&&I(ne)})}},[le,Q,te,Me,qe,G,Y]),Uu=g.useCallback((F,B)=>{if(!le||!Q)return;SMe(Ai,B);const Z=ie==null?void 0:ie.find(D=>D.id===F);let $=null;if(Z){$={};const D=Z;for(const ne of Object.keys(B))$[ne]=D[ne]}if(Oe(F,B),I(null),Y(),$){const D=$;G({do:async()=>{await Q.updateConnector(F,B)},undo:async()=>{await Q.updateConnector(F,D)},coalesceKey:`connector:${F}:style`})}Q.updateConnector(F,B).catch(D=>{je(F),$&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateConnector failed",D)})},[le,Q,ie,Oe,je,G,X,Y]),{mark:da,markMany:ha,unmark:Xr,unmarkMany:gi}=L,{mark:fa,markMany:xr,unmark:Yr,unmarkMany:wr}=P,Wu=g.useCallback(F=>{if(!le||!Q)return;const B=te==null?void 0:te.find(ke=>ke.id===F);if(!B||B.data.locked===!0)return;const Z=(ie??[]).filter(ke=>ke.source===F||ke.target===F),$=Z.map(ke=>ke.id),D=new Set($);I(null),da(F),$.length>0&&xr($),d(ke=>ke.filter(dt=>dt!==F)),p(ke=>ke.filter(dt=>!D.has(dt))),Y();const ne=B,Pe=Z;G({do:async()=>{da(F),$.length>0&&xr($),await Q.deleteNode(F)},undo:async()=>{Xr(F),$.length>0&&wr($),await Q.createNode({id:ne.id,type:ne.type,position:ne.position,data:ne.data});for(const ke of Pe)await Q.createConnector({...ke,id:ke.id})}}),Q.deleteNode(F).catch(ke=>{Xr(F),$.length>0&&wr($),X(),I(ke instanceof Error?ke.message:String(ke)),console.error("deleteNode failed",ke)})},[le,Q,te,ie,da,xr,Xr,wr,G,X,Y]),Ve=g.useCallback((F,B)=>{if(!le||!Q||!te)return;const Z=T??te.map(ne=>ne.id),$=dqe(Z,F,B);if(!$)return;const D=Z.indexOf(F);_($),I(null),Y(),G({do:async()=>{await Q.reorderNode(F,B)},undo:async()=>{await Q.reorderNode(F,{op:"toIndex",index:D})}}),Q.reorderNode(F,B).catch(ne=>{_(null),X(),I(ne instanceof Error?ne.message:String(ne)),console.error("reorderNode failed",ne)})},[le,Q,te,T,G,X,Y]);g.useCallback(F=>{if(!le||!Q)return;const B=ie==null?void 0:ie.find($=>$.id===F);if(!B)return;I(null),fa(F),p($=>$.filter(D=>D!==F)),Y();const Z=B;G({do:async()=>{fa(F),await Q.deleteConnector(F)},undo:async()=>{Yr(F),await Q.createConnector({...Z,id:Z.id})}}),Q.deleteConnector(F).catch($=>{Yr(F),X(),I($ instanceof Error?$.message:String($)),console.error("deleteConnector failed",$)})},[le,Q,ie,fa,Yr,G,X,Y]);const yt=g.useCallback((F,B)=>{if(!le||!Q||F.length===0&&B.length===0)return;const Z=F,$=new Set((te??[]).filter(_e=>_e.data.locked===!0).map(_e=>_e.id)),D=Z.filter(_e=>!$.has(_e)),ne=new Set(D),Pe=D.map(_e=>te==null?void 0:te.find(nt=>nt.id===_e)).filter(_e=>!!_e),ke=(ie??[]).filter(_e=>ne.has(_e.source)||ne.has(_e.target)),dt=new Set(ke.map(_e=>_e.id)),Tt=B.map(_e=>ie==null?void 0:ie.find(nt=>nt.id===_e)).filter(_e=>!!_e).filter(_e=>!dt.has(_e.id)).filter(_e=>!($.has(_e.source)&&$.has(_e.target)));if(Pe.length===0&&ke.length===0&&Tt.length===0)return;I(null);const Sn=Pe.map(_e=>_e.id),Kt=[...ke.map(_e=>_e.id),...Tt.map(_e=>_e.id)];Sn.length>0&&ha(Sn),Kt.length>0&&xr(Kt);const Lr=Pe;d(_e=>_e.filter(nt=>!ne.has(nt)));const wa=new Set(Tt.map(_e=>_e.id));p(_e=>_e.filter(nt=>!wa.has(nt)&&!dt.has(nt))),Y(),G({do:async()=>{Sn.length>0&&ha(Sn),Kt.length>0&&xr(Kt);for(const _e of Lr)await Q.deleteNode(_e.id).catch(()=>{});await Promise.allSettled(Tt.map(_e=>Q.deleteConnector(_e.id)))},undo:async()=>{Sn.length>0&&gi(Sn),Kt.length>0&&wr(Kt);for(let _e=Lr.length-1;_e>=0;_e--){const nt=Lr[_e];nt&&await Q.createNode({id:nt.id,type:nt.type,position:nt.position,data:nt.data})}for(const _e of[...ke,...Tt])await Q.createConnector({..._e,id:_e.id})}});const Zu=new Map;for(const _e of Pe)Zu.set(_e.id,ke.filter(nt=>nt.source===_e.id||nt.target===_e.id).map(nt=>nt.id));(async()=>{const _e=[];for(const Ne of Lr)try{await Q.deleteNode(Ne.id)}catch(it){Xr(Ne.id);const jt=Zu.get(Ne.id)??[];jt.length>0&&wr(jt),_e.push(it instanceof Error?it.message:String(it))}const nt=await Promise.all(Tt.map(async Ne=>{try{return await Q.deleteConnector(Ne.id),null}catch(it){return Yr(Ne.id),it instanceof Error?it.message:String(it)}}));for(const Ne of nt)Ne!==null&&_e.push(Ne);_e.length>0&&_e[0]!==void 0&&I(_e[0])})()},[le,Q,te,ie,ha,xr,Xr,gi,Yr,wr,G,Y]);g.useEffect(()=>{M.current=yt},[yt]),g.useEffect(()=>{const F=B=>{if(B.key!=="Delete"&&B.key!=="Backspace"||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current,$=v.current;Z.length===0&&$.length===0||(B.preventDefault(),yt(Z,$))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[yt]);const{undo:Qr,redo:Po,canUndo:qn,canRedo:xn}=R;g.useEffect(()=>{const F=async B=>{if((B.metaKey||B.ctrlKey)&&B.key.toLowerCase()==="z"&&!Pr(document.activeElement)){if(B.preventDefault(),B.shiftKey){if(!xn)return;try{const Z=await Po();Z!=null&&Z.entry&&await Z.entry.do()}catch(Z){I(Z instanceof Error?Z.message:String(Z)),console.error("redo failed",Z)}return}if(qn)try{const Z=await Qr();Z!=null&&Z.entry&&await Z.entry.undo()}catch(Z){I(Z instanceof Error?Z.message:String(Z)),console.error("undo failed",Z)}}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Qr,Po,qn,xn]);const _o=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(ne=>ne.id===F),D=(Z&&"name"in Z.data?Z.data.name:void 0)??"";Me(F,{data:{name:B}}),I(null),Y(),Z&&G({do:async()=>{await Q.updateNode(F,{name:B})},undo:async()=>{await Q.updateNode(F,{name:D})},coalesceKey:`node:${F}:name`}),Q.updateNode(F,{name:B}).catch(ne=>{Z&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateNode name failed",ne)})},[le,Q,te,Me,G,X,Y]),On=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $=Z.data.description??"";Me(F,{data:{description:B}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{description:B})},undo:async()=>{await Q.updateNode(F,{description:$})},coalesceKey:`node:${F}:description`}),Q.updateNode(F,{description:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode description failed",D)})},[le,Q,te,Me,G,X,Y]),Jr=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $=Z.data.detail??"";Me(F,{data:{detail:B}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{detail:B})},undo:async()=>{await Q.updateNode(F,{detail:$})},coalesceKey:`node:${F}:detail`}),Q.updateNode(F,{detail:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode detail failed",D)})},[le,Q,te,Me,G,X,Y]),un=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=te==null?void 0:te.find(D=>D.id===F);if(!Z)return;const $="icon"in Z.data?Z.data.icon??null:null;Me(F,{data:{icon:B??void 0}}),I(null),Y(),G({do:async()=>{await Q.updateNode(F,{icon:B})},undo:async()=>{await Q.updateNode(F,{icon:$})},coalesceKey:`node:${F}:icon`}),Q.updateNode(F,{icon:B}).catch(D=>{X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode icon failed",D)})},[le,Q,te,Me,G,X,Y]),Gt=g.useCallback((F,B,Z)=>{if(!le||!Q)return;I(null);const $=`node-${crypto.randomUUID()}`,D=KQ(F,Z,C0(Ai).node),ne={id:$,type:"shapeNode",position:B,data:D};Me($,{id:$,type:"shapeNode",position:B,data:D}),Y(),Q.createNode(ne).then(({id:ke})=>{G({do:async()=>{await Q.createNode({...ne,id:ke})},undo:async()=>{await Q.deleteNode(ke)}})}).catch(ke=>{qe($),I(ke instanceof Error?ke.message:String(ke)),console.error("createNode failed",ke)})},[le,Q,Me,qe,G,Y]),eo=g.useCallback((F,B)=>{if(!le||!Q)return;I(null);const Z=`node-${crypto.randomUUID()}`,$={icon:F,width:ld.width,height:ld.height},D={id:Z,type:"iconNode",position:B,data:$};Me(Z,{id:Z,type:"iconNode",position:B,data:$}),d([Z]),Y(),Q.createNode(D).then(({id:Pe})=>{G({do:async()=>{await Q.createNode({...D,id:Pe})},undo:async()=>{await Q.deleteNode(Pe)}})}).catch(Pe=>{qe(Z),I(Pe instanceof Error?Pe.message:String(Pe)),console.error("createNode (icon) failed",Pe)})},[le,Q,Me,qe,G,Y]),pa=g.useCallback(F=>{if(!le||!Q)return;I(null);const B=`node-${crypto.randomUUID()}`,Z=`blocks/${B}.html`,$={id:B,type:"htmlNode",position:F.position,data:{}},D={id:B,type:"htmlNode",position:F.position,data:{htmlPath:Z}};Me(B,D),d([B]),Y(),Q.createNode($).then(({id:ne})=>{G({do:async()=>{await Q.createNode({...$,id:ne})},undo:async()=>{await Q.deleteNode(ne)}})}).catch(ne=>{qe(B),I(ne instanceof Error?ne.message:String(ne)),console.error("createNode (htmlNode) failed",ne)})},[le,Q,Me,qe,G,Y]),to=g.useRef(new Map),ki=g.useCallback((F,B)=>{to.current.set(F,B)},[]),vi=g.useCallback(F=>{to.current.delete(F)},[]),mt=g.useCallback(F=>{!le||!Q||(I(null),Y(),lqe({...F,demoId:le,lastUsed:C0(Ai).node},{upload:(B,Z,$)=>Q.uploadImage(Z,$),createNode:async(B,Z)=>{const{id:$}=await Q.createNode(Z);return{id:$}},deleteNode:async(B,Z)=>(await Q.deleteNode(Z),{ok:!0}),setOverride:Me,pushUndo:G,rememberRetry:ki,forgetRetry:vi}).catch(B=>{console.error("image-upload-flow failed",B)}))},[le,Q,Me,G,Y,ki,vi]),xi=g.useCallback(F=>{if(!le||!Q)return;const B=`node-${crypto.randomUUID()}`;mt({nodeId:B,...F})},[le,Q,mt]),ya=g.useCallback(F=>{const B=to.current.get(F);B&&mt({nodeId:F,...B})},[mt]),[Mr,br]=g.useState({open:!1,mode:"insert"}),cr=g.useCallback((F,B)=>{br({open:!0,mode:F,nodeId:B})},[]),ma=g.useCallback(()=>{br(F=>({...F,open:!1}))},[]),wi=g.useCallback(()=>{cr("insert")},[cr]),Mi=g.useCallback(F=>cr("replace",F),[cr]),ga=g.useCallback(F=>{if(yMe(F),Mr.mode==="replace"&&Mr.nodeId){if(le&&Q){const B=Mr.nodeId,Z=te==null?void 0:te.find(D=>D.id===B),$=(Z==null?void 0:Z.type)==="iconNode"?Z.data.icon:void 0;if(Me(B,{data:{icon:F}}),I(null),Y(),$!==void 0){const D=$;G({do:async()=>{await Q.updateNode(B,{icon:F})},undo:async()=>{await Q.updateNode(B,{icon:D})},coalesceKey:`node:${B}:icon`})}Q.updateNode(B,{icon:F}).catch(D=>{qe(B),$!==void 0&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateNode (icon replace) failed",D)})}}else{const B=W.current;if(B&&le){const Z=fMe(B,{width:window.innerWidth,height:window.innerHeight});eo(F,Z)}}ma()},[Mr.mode,Mr.nodeId,le,Q,te,Me,qe,G,X,Y,eo,ma]),wn=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(D=>D.id===F),$=Z==null?void 0:Z.label;Oe(F,{label:B}),I(null),Y(),Z&&G({do:async()=>{await Q.updateConnector(F,{label:B})},undo:async()=>{await Q.updateConnector(F,{label:$})},coalesceKey:`connector:${F}:label`}),Q.updateConnector(F,{label:B}).catch(D=>{Z&&X(),I(D instanceof Error?D.message:String(D)),console.error("updateConnector label failed",D)})},[le,Q,ie,Oe,G,X,Y]),Ro=g.useCallback((F,B,Z)=>{if(!le||!Q)return;const $=`conn-${crypto.randomUUID()}`,D=Z==null?void 0:Z.targetPin,ne=C0(Ai).connector,Pe={id:$,source:F,target:B,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...D?{targetPin:D}:{},...ne,kind:"default"},ke={id:$,source:F,target:B,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...D?{targetPin:D}:{},...ne,kind:"default"};Oe($,Pe),I(null),Y(),Q.createConnector(ke).then(({id:dt})=>{G({do:async()=>{await Q.createConnector({...ke,id:dt})},undo:async()=>{await Q.deleteConnector(dt)}})}).catch(dt=>{je($),I(dt instanceof Error?dt.message:String(dt)),console.error("createConnector failed",dt)})},[le,Q,Oe,je,G,Y]),ka=g.useCallback(({sourceNodeId:F,position:B,shape:Z})=>{if(!le||!Q)return;I(null);const $=`node-${crypto.randomUUID()}`,D=`conn-${crypto.randomUUID()}`,ne=uR[Z],Pe=C0(Ai),ke=KQ(Z,ne,Pe.node),dt={id:$,type:"shapeNode",position:B,data:ke},Tt={id:D,source:F,target:$,sourceHandleAutoPicked:!0,targetHandleAutoPicked:!0,...Pe.connector,kind:"default"};Me($,{id:$,type:"shapeNode",position:B,data:ke}),Oe(D,Tt),k($),Y(),(async()=>{try{await Q.createNode(dt),await Q.createConnector(Tt),G({do:async()=>{await Q.createNode(dt),await Q.createConnector(Tt)},undo:async()=>{je(D),qe($),await Q.deleteConnector(D).catch(()=>{}),await Q.deleteNode($).catch(()=>{})}})}catch(Kt){qe($),je(D),I(Kt instanceof Error?Kt.message:String(Kt)),console.error("createAndConnectFromPane failed",Kt)}})()},[le,Q,Me,qe,Oe,je,G,Y]),va=g.useRef(null),[To,bi]=g.useState(!1),Mn=g.useCallback(F=>{if(!te)return;const B=new Set(F),Z=te.filter(D=>B.has(D.id));if(Z.length===0)return;const $=(ie??[]).filter(D=>B.has(D.source)&&B.has(D.target));va.current=JSON.parse(JSON.stringify({nodes:Z,connectors:$})),bi(!0)},[te,ie]),tn=g.useCallback(F=>{if(!le||!Q)return;const B=va.current;if(!B||B.nodes.length===0)return;const{newNodes:Z,newConnectors:$}=aqe({nodes:B.nodes,connectors:B.connectors,flowPos:F,nodeIdGen:()=>`node-${crypto.randomUUID()}`,connectorIdGen:()=>`conn-${crypto.randomUUID()}`});for(const D of Z)Me(D.id,D);for(const D of $)Oe(D.id,D);d(Z.map(D=>D.id)),p($.map(D=>D.id)),I(null),Y(),(async()=>{try{for(const D of Z)await Q.createNode({id:D.id,type:D.type,position:D.position,data:D.data});for(const D of $)await Q.createConnector(D);G({do:async()=>{for(const D of Z)await Q.createNode({id:D.id,type:D.type,position:D.position,data:D.data});for(const D of $)await Q.createConnector(D)},undo:async()=>{await Promise.allSettled($.map(D=>Q.deleteConnector(D.id))),await Promise.allSettled(Z.map(D=>Q.deleteNode(D.id)))}})}catch(D){for(const ne of Z)qe(ne.id);for(const ne of $)je(ne.id);I(D instanceof Error?D.message:String(D)),console.error("paste failed",D)}})()},[le,Q,Me,qe,Oe,je,Y,G]);g.useEffect(()=>{const F=B=>{const Z=bMe({event:B,isEditableActive:Pr(document.activeElement),hasNodes:!!te&&te.length>0,hasConnectors:!!ie&&ie.length>0,selectedIds:w.current,hasClipboard:!!va.current});if(Z.type!=="noop"&&!(Z.type==="copy"||Z.type==="paste")){if(B.preventDefault(),Z.type==="selectAll"){d((te??[]).map($=>$.id)),p((ie??[]).map($=>$.id));return}Mn([...Z.ids]),tn(null)}};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[te,ie,Mn,tn]),g.useEffect(()=>{const F=B=>{const Z=xMe(B);if(!Z||Pr(document.activeElement))return;const $=w.current;if($.length===0)return;const D=S.overrides,ne=(te??[]).map(ke=>{var Tt;const dt=((Tt=D[ke.id])==null?void 0:Tt.position)??ke.position;return{id:ke.id,position:dt}}),Pe=MMe(Z,$,ne);if(Pe.length!==0)if(B.preventDefault(),Pe.length===1){const ke=Pe[0];ke&&he(ke.id,ke.position)}else Ie(Pe)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[te,S.overrides,he,Ie]),g.useEffect(()=>{const F=B=>{const Z=wMe(B);if(!Z||Pr(document.activeElement))return;B.preventDefault();const $=W.current;$&&(Z==="fit"?$.fitView({padding:.2,duration:200}):Z==="in"?$.zoomIn({duration:150}):$.zoomOut({duration:150}))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const Fn=g.useCallback(F=>{if(!le||!Q||!te)return;const B=S.overrides,Z=W.current,$=F==="selection"?new Set(w.current):null,D=$?te.filter(Ne=>$.has(Ne.id)):te;if(D.length<2)return;const ne=new Set(D.map(Ne=>Ne.id)),Pe=(ie??[]).filter(Ne=>ne.has(Ne.source)&&ne.has(Ne.target)),ke=D.map(Ne=>{var Si;const it=((Si=B[Ne.id])==null?void 0:Si.position)??Ne.position,jt=Z==null?void 0:Z.getInternalNode(Ne.id),Bn=jt==null?void 0:jt.measured,Vn=Ne.data,QT=(Bn==null?void 0:Bn.width)??Vn.width??200,JT=(Bn==null?void 0:Bn.height)??Vn.height??120;return{id:Ne.id,width:QT,height:JT,position:it}}),dt=Pe.map(Ne=>({source:Ne.source,target:Ne.target})),Tt=eae(ke,dt);let Sn=Number.POSITIVE_INFINITY,Kt=Number.POSITIVE_INFINITY,Lr=Number.POSITIVE_INFINITY,wa=Number.POSITIVE_INFINITY;for(const Ne of ke){Ne.position.x<Sn&&(Sn=Ne.position.x),Ne.position.y<Kt&&(Kt=Ne.position.y);const it=Tt.get(Ne.id);it&&(it.x<Lr&&(Lr=it.x),it.y<wa&&(wa=it.y))}const Zu=Number.isFinite(Sn)&&Number.isFinite(Lr)?Sn-Lr:0,_e=Number.isFinite(Kt)&&Number.isFinite(wa)?Kt-wa:0,nt=[];for(const Ne of ke){const it=Tt.get(Ne.id);if(!it)continue;const jt={x:it.x+Zu,y:it.y+_e},Bn=jt.x-Ne.position.x,Vn=jt.y-Ne.position.y;Math.abs(Bn)<1&&Math.abs(Vn)<1||nt.push({id:Ne.id,prev:Ne.position,next:jt})}if(nt.length!==0){I(null);for(const Ne of nt)Me(Ne.id,{position:Ne.next});Y(),G({do:async()=>{await Promise.allSettled(nt.map(Ne=>Q.updateNodePosition(Ne.id,Ne.next)))},undo:async()=>{await Promise.allSettled(nt.map(Ne=>Q.updateNodePosition(Ne.id,Ne.prev)))}}),Promise.all(nt.map(async Ne=>{try{return await Q.updateNodePosition(Ne.id,Ne.next),null}catch(it){return qe(Ne.id),it instanceof Error?it.message:String(it)}})).then(Ne=>{const it=Ne.filter(Bn=>Bn!==null),jt=it[0];jt&&(I(it.length===1?jt:`${it.length} node updates failed (first: ${jt})`),console.error("Tidy: some updateNodePosition calls failed",it))})}},[le,Q,te,ie,S.overrides,Me,qe,G,Y]);g.useEffect(()=>{const F=B=>{if(!(B.metaKey||B.ctrlKey)||!B.shiftKey||B.altKey||B.key.toLowerCase()!=="l"||Pr(document.activeElement))return;B.preventDefault();const Z=w.current.length>0?"selection":"all";Fn(Z)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[Fn]);const no=g.useCallback(()=>{const F=w.current.length>0?"selection":"all";Fn(F)},[Fn]);g.useEffect(()=>{const F=B=>{if(Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=CMe(B);if(Z===null)return;const $=Z==="select"?null:Z;if(H.current===$){j(null);return}j($)};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{B.key==="Escape"&&(Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]')||(w.current.length>0&&d([]),v.current.length>0&&p([]),H.current!==null&&j(null)))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{if(B.key.toLowerCase()!=="f"||B.metaKey||B.ctrlKey||B.shiftKey||B.altKey||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=w.current;if(Z.length===0)return;const $=W.current;$&&$.fitView({nodes:Z.map(D=>({id:D})),padding:.2,duration:200})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]),g.useEffect(()=>{const F=B=>{if(B.key!=="1"||B.metaKey||B.ctrlKey||B.shiftKey||B.altKey||Pr(document.activeElement)||document.querySelector('[data-testid="inline-edit-input"]'))return;const Z=W.current;if(!Z)return;const{x:$,y:D}=Z.getViewport();Z.setViewport({x:$,y:D,zoom:1},{duration:150})};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[]);const jo=g.useCallback(F=>{var B,Z,$;switch(F){case"tool.select":j(null);return;case"tool.rectangle":j("rectangle");return;case"tool.ellipse":j("ellipse");return;case"tool.text":j("text");return;case"tool.sticky":j("sticky");return;case"tool.database":j("database");return;case"edit.undo":{if(!qn)return;(async()=>{try{const D=await Qr();D!=null&&D.entry&&await D.entry.undo()}catch(D){I(D instanceof Error?D.message:String(D)),console.error("undo failed",D)}})();return}case"edit.redo":{if(!xn)return;(async()=>{try{const D=await Po();D!=null&&D.entry&&await D.entry.do()}catch(D){I(D instanceof Error?D.message:String(D)),console.error("redo failed",D)}})();return}case"edit.copy":{const D=w.current;if(D.length===0)return;Mn([...D]);return}case"edit.paste":tn(null);return;case"edit.duplicate":{const D=w.current;if(D.length===0)return;Mn([...D]),tn(null);return}case"edit.delete":{const D=w.current,ne=v.current;if(D.length===0&&ne.length===0)return;yt([...D],[...ne]);return}case"edit.selectAll":d((te??[]).map(D=>D.id)),p((ie??[]).map(D=>D.id));return;case"view.fit":{const D=W.current;if(!D)return;D.fitView({padding:.2,duration:200});return}case"view.zoomIn":{const D=W.current;if(!D)return;D.zoomIn({duration:150});return}case"view.zoomOut":{const D=W.current;if(!D)return;D.zoomOut({duration:150});return}case"view.zoom100":{const D=W.current;if(!D)return;const{x:ne,y:Pe}=D.getViewport();D.setViewport({x:ne,y:Pe,zoom:1},{duration:150});return}case"view.zoomToSelection":{const D=w.current;if(D.length===0)return;const ne=W.current;if(!ne)return;ne.fitView({nodes:D.map(Pe=>({id:Pe})),padding:.2,duration:200});return}case"layout.tidy":{const D=w.current.length>0?"selection":"all";Fn(D);return}case"selection.deselect":w.current.length>0&&d([]),v.current.length>0&&p([]),H.current!==null&&j(null);return;case"help.commandPalette":U(!0);return;case"export.pdf":{(B=b.current)==null||B.exportPdf();return}case"export.png":{(Z=b.current)==null||Z.exportPng();return}case"session.reset":{($=x.current)==null||$.call(x);return}}},[qn,xn,Qr,Po,Mn,tn,yt,te,ie,Fn]);g.useEffect(()=>{const F=B=>{(B.metaKey||B.ctrlKey)&&(B.shiftKey||B.altKey||B.key.toLowerCase()==="p"&&(B.preventDefault(),!Pr(document.activeElement)&&jo("help.commandPalette")))};return window.addEventListener("keydown",F),()=>window.removeEventListener("keydown",F)},[jo]),g.useEffect(()=>{x.current=c??null},[c]);const Hn=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(ne=>ne.id===F),$=Z?{source:Z.source,target:Z.target,sourceHandle:Z.sourceHandle,targetHandle:Z.targetHandle,sourceHandleAutoPicked:Z.sourceHandleAutoPicked,targetHandleAutoPicked:Z.targetHandleAutoPicked,sourcePin:Z.sourcePin??null,targetPin:Z.targetPin??null}:null,D={...B.source!==void 0?{source:B.source}:{},...B.target!==void 0?{target:B.target}:{},...B.sourceHandle!==void 0?{sourceHandle:B.sourceHandle===null?void 0:B.sourceHandle}:{},...B.targetHandle!==void 0?{targetHandle:B.targetHandle===null?void 0:B.targetHandle}:{},...B.sourceHandleAutoPicked!==void 0?{sourceHandleAutoPicked:B.sourceHandleAutoPicked}:{},...B.targetHandleAutoPicked!==void 0?{targetHandleAutoPicked:B.targetHandleAutoPicked}:{},...B.sourcePin!==void 0?{sourcePin:B.sourcePin===null?void 0:B.sourcePin}:{},...B.targetPin!==void 0?{targetPin:B.targetPin===null?void 0:B.targetPin}:{}};if(Oe(F,D),I(null),Y(),$){const ne=$;G({do:async()=>{await Q.updateConnector(F,B)},undo:async()=>{await Q.updateConnector(F,ne)},coalesceKey:`connector:${F}:reconnect`})}Q.updateConnector(F,B).catch(ne=>{je(F),$&&X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateConnector reconnect failed",ne)})},[le,Q,ie,Oe,je,G,X,Y]),xa=g.useCallback((F,B,Z)=>{if(!le||!Q)return;const $=ie==null?void 0:ie.find(Pe=>Pe.id===F),D=$?B==="source"?$.sourcePin:$.targetPin:void 0,ne=B==="source"?"sourcePin":"targetPin";if(Oe(F,{[ne]:Z}),I(null),Y(),$){const Pe={[ne]:D??null};G({do:async()=>{await Q.updateConnector(F,{[ne]:Z})},undo:async()=>{await Q.updateConnector(F,Pe)},coalesceKey:`connector:${F}:${ne}`})}Q.updateConnector(F,{[ne]:Z}).catch(Pe=>{je(F),$&&X(),I(Pe instanceof Error?Pe.message:String(Pe)),console.error("updateConnector pin failed",Pe)})},[le,Q,ie,Oe,je,G,X,Y]),Cr=g.useCallback((F,B)=>{if(!le||!Q)return;const Z=ie==null?void 0:ie.find(ne=>ne.id===F),$=Z?B==="source"?Z.sourcePin:Z.targetPin:void 0;if(!$)return;const D=B==="source"?"sourcePin":"targetPin";Oe(F,{[D]:void 0}),I(null),Y(),G({do:async()=>{await Q.updateConnector(F,{[D]:null})},undo:async()=>{await Q.updateConnector(F,{[D]:$})}}),Q.updateConnector(F,{[D]:null}).catch(ne=>{je(F),X(),I(ne instanceof Error?ne.message:String(ne)),console.error("updateConnector unpin failed",ne)})},[le,Q,ie,Oe,je,G,X,Y]),st=n==null?void 0:n.demo,Sr=S.overrides,bn=C.overrides,Cn=L.ids,Ci=P.ids,Gu=g.useMemo(()=>{if(!st||u.length===0)return[];const F=new Map(st.nodes.map(Z=>[Z.id,Z])),B=[];for(const Z of u){const $=F.get(Z);if(!$)continue;const D=Sr[Z];if(!D){B.push($);continue}const ne=D.data?{...$.data,...D.data}:$.data;B.push({...$,...D,data:ne})}return B},[st,u,Sr]),YT=g.useMemo(()=>{if(!st||f.length===0)return[];const F=new Map(st.connectors.map(Z=>[Z.id,Z])),B=[];for(const Z of f){const $=F.get(Z);if(!$)continue;const D=bn[Z];B.push(D?{...$,...D}:$)}return B},[st,f,bn]),ro=g.useMemo(()=>{if(!st)return null;if(!T)return st.nodes;const F=new Map(st.nodes.map($=>[$.id,$])),B=[],Z=new Set;for(const $ of T){const D=F.get($);D&&(B.push(D),Z.add($))}for(const $ of st.nodes)Z.has($.id)||B.push($);return B},[st,T]),Ku=g.useMemo(()=>{const F=ro??(st==null?void 0:st.nodes)??null;return F?Cn.size===0?F:F.filter(B=>!Cn.has(B.id)):null},[ro,st,Cn]),Of=g.useMemo(()=>{const F=(st==null?void 0:st.connectors)??null;return F?Ci.size===0&&Cn.size===0?F:F.filter(B=>!Ci.has(B.id)&&!Cn.has(B.source)&&!Cn.has(B.target)):null},[st,Ci,Cn]);if(!l)return m.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-2 bg-background p-6 text-center",children:[m.jsxs("p",{className:"text-sm font-medium",children:["Unknown demo: ",e]}),m.jsx("p",{className:"text-xs text-muted-foreground",children:"The slug may have been removed. Re-register from the project repo to bring it back."})]});if(r&&!n)return m.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"Loading demo…"});const No=u[0],Ff=No?i[No]:void 0;return m.jsxs("div",{className:"relative h-full w-full",children:[n&&!n.valid?m.jsxs("div",{"data-testid":"demo-error-banner",className:"absolute inset-x-0 top-0 z-10 border-b border-rose-500/40 bg-rose-50 px-4 py-2 text-xs text-rose-900 shadow-xs dark:bg-rose-950/40 dark:text-rose-100",children:[m.jsx("span",{className:"font-medium uppercase tracking-wide",children:"Invalid demo: "}),m.jsx("span",{className:"font-mono",children:n.error})]}):null,st&&Q?m.jsx(Xze,{ref:b,mode:"edit",adapter:Q,projectId:le??void 0,enableEmbed:!1,onExportToCloud:le?()=>ge(!0):void 0,onRestartDemo:c,nodes:Ku??st.nodes,connectors:Of??st.connectors,selectedNodeIds:u,selectedConnectorIds:f,onSelectionChange:we,runtime:{runs:o,statuses:i,pendingOverrides:{nodes:Sr,connectors:bn}},onPlayNode:s,onNodePositionChange:he,onNodePositionsChange:Ie,onNodeResize:He,onHtmlNodeFitToContent:Ue,onMultiResize:Rt,onNodeNameChange:_o,onNodeDescriptionChange:On,onConnectorLabelChange:wn,onCreateShapeNode:Gt,onCreateImageFromFile:le?xi:void 0,onRetryImageUpload:le?ya:void 0,onCreateHtmlNode:le?pa:void 0,iconPickerOpen:Mr.open,onOpenIconPicker:le?wi:void 0,onCloseIconPicker:le?ma:void 0,onPickIcon:le?ga:void 0,onRequestIconReplace:le?Mi:void 0,onCreateConnector:Ro,onReconnectConnector:Hn,onPinEndpoint:le?xa:void 0,onUnpinEndpoint:le?Cr:void 0,onReorderNode:Ve,onDeleteNode:Wu,onCopyNode:F=>Mn([F]),onPasteAt:tn,onCopySelection:le?Mn:void 0,onPasteSelection:le?()=>tn(null):void 0,onToggleNodeLock:le?$u:void 0,hasClipboard:To,selectedNodes:Gu,selectedConnectors:YT,onStyleNode:Dn,onStyleNodePreview:Pt,onStyleNodes:en,onStyleNodesPreview:sr,onStyleConnector:Uu,onStyleConnectorPreview:Dt,onRfInit:q,onTidy:te?no:void 0,onCreateAndConnectFromPane:ka,pendingEditNodeId:y,activeShape:V,onSelectShape:j,statusReport:Ff,onNameChange:_o,onDescriptionChange:On,onDetailChange:Jr,onIconChange:un,autoFitView:!0,autoFitViewSignal:z}):m.jsx("div",{className:"flex h-full w-full items-center justify-center text-sm text-muted-foreground",children:"No demo data yet."}),A?m.jsxs("div",{"data-testid":"edit-error-banner",className:"absolute inset-x-0 bottom-4 z-20 mx-auto w-fit max-w-[80%] rounded-md border border-rose-500/50 bg-rose-50 px-3 py-2 text-xs text-rose-900 shadow-md dark:bg-rose-950/60 dark:text-rose-100",children:[m.jsx("span",{className:"font-medium",children:"Couldn't save change: "}),m.jsx("span",{className:"font-mono",children:A}),m.jsx("button",{type:"button",className:"ml-3 underline underline-offset-2",onClick:()=>I(null),children:"Dismiss"})]}):null,m.jsx(xDe,{open:O,onOpenChange:U,runCommand:jo,ctx:{hasSelection:u.length>0||f.length>0,canUndo:qn,canRedo:xn,hasClipboard:To,canExportDemo:!!le,canResetSession:!!c}}),le?m.jsx(ODe,{open:ue,onOpenChange:ge,projectId:le,onCapturePreview:()=>{var F;return((F=b.current)==null?void 0:F.capturePreview())??Promise.resolve(void 0)}}):null]})}const Mte="npx seeflow register --path .";function fqe(){const[e,t]=g.useState(!1),n=async()=>{try{await navigator.clipboard.writeText(Mte),t(!0),setTimeout(()=>t(!1),1200)}catch(r){console.error("[empty-state] copy failed",r)}};return m.jsx("div",{"data-testid":"seeflow-empty-state",className:"flex h-full w-full items-center justify-center bg-background p-6",children:m.jsxs("div",{className:"flex max-w-lg flex-col items-center gap-6 text-center",children:[m.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-muted",children:m.jsx(o2,{className:"h-6 w-6 text-muted-foreground"})}),m.jsxs("div",{className:"space-y-2",children:[m.jsx("h1",{className:"text-2xl font-semibold tracking-tight text-foreground",children:"No demos registered yet"}),m.jsxs("p",{className:"text-sm text-muted-foreground",children:["Point SeeFlow at any folder containing a"," ",m.jsx("code",{className:"rounded bg-muted px-1.5 py-0.5 text-xs",children:".seeflow/seeflow.json"})," ","file and it'll appear here."]})]}),m.jsxs("div",{className:"flex w-full items-center gap-2 rounded-md border border-border bg-card px-3 py-2 font-mono text-sm",children:[m.jsx("span",{className:"text-muted-foreground select-none",children:"$"}),m.jsx("code",{className:"flex-1 truncate text-left",children:Mte}),m.jsx(Ft,{type:"button",variant:"ghost",size:"sm",onClick:n,"aria-label":"Copy register command",children:e?m.jsx(Ja,{className:"h-4 w-4"}):m.jsx(T1,{className:"h-4 w-4"})})]})]})})}function pqe({demos:e}){return e.length===0?m.jsx(fqe,{}):m.jsx("div",{className:"flex h-full w-full items-start justify-center overflow-y-auto bg-background p-8",children:m.jsxs("div",{"data-testid":"studio-home-picker",className:"flex w-full max-w-2xl flex-col gap-6 pt-8",children:[m.jsxs("div",{className:"space-y-1",children:[m.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:"Open a demo"}),m.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.length," demos registered — pick one to load its canvas."]})]}),m.jsx("ul",{className:"flex flex-col gap-2",children:e.map(t=>m.jsx("li",{children:m.jsxs("button",{type:"button",onClick:()=>md(`/d/${t.slug}`),"data-testid":`studio-home-demo-${t.slug}`,className:"flex w-full flex-col items-start gap-0.5 rounded-lg border border-border bg-card px-4 py-3 text-left transition-colors hover:border-input",style:{boxShadow:"var(--shadow-card)"},children:[m.jsx("span",{className:"text-sm font-medium",children:t.name}),m.jsx("span",{className:"truncate text-xs text-muted-foreground",children:t.repoPath})]})},t.id))})]})})}const yqe=e=>{if(!e.startsWith("/d/"))return null;const t=e.slice(3);return t.length>0?decodeURIComponent(t):null};function mqe(){const e=Jze(),{demos:t,refresh:n}=rDe(),r=yqe(e),o=r?(t??[]).find(C=>C.slug===r):void 0,a=(o==null?void 0:o.id)??null,{detail:i,loading:s,refresh:c}=nDe(a),{runs:l,apply:u}=lDe(a),{events:d,apply:f}=sDe(a),{statusByNode:p,apply:y,reset:k}=fDe(a),w=g.useCallback(()=>{k(),c(),n()},[c,n,k]),v=g.useCallback(C=>{u(C),f(C),y(C)},[u,f,y]);pDe(a,{onReload:w,onEvent:v});const M=g.useCallback(async()=>{if(a)try{await Efe(a)}catch(C){console.error("Failed to restart demo:",C)}},[a]),x=g.useCallback(C=>{ste(C.id),n()},[n]),b=g.useCallback(async C=>{await n(),a===C&&md("/")},[n,a]);g.useEffect(()=>{if(e!=="/"||t===null)return;const C=mDe(t,yDe());C&&md(`/d/${C.slug}`)},[e,t]),g.useEffect(()=>{o&&ste(o.id)},[o]);const S=g.useCallback(C=>{a&&Afe(a,C).catch(L=>{u({type:"node:error",nodeId:C,message:L instanceof Error?L.message:String(L),ts:Date.now()})})},[a,u]);return t===null?m.jsx("div",{className:"flex h-full w-full items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading…"}):m.jsx(d2,{delayDuration:150,children:m.jsxs("div",{className:"flex h-full w-full flex-col bg-background text-foreground",children:[m.jsx(tDe,{demos:t,currentSlug:r??void 0,onProjectCreated:x,onProjectUnregistered:b}),m.jsx("main",{className:"min-h-0 flex-1",children:r?m.jsx(hqe,{slug:r,demos:t,detail:i,loading:s,runs:l,nodeEvents:d,statusByNode:p,onPlayNode:S,onRestartDemo:a?M:void 0}):m.jsx(pqe,{demos:t})})]})})}const Mde=document.getElementById("root");if(!Mde)throw new Error("Root element #root not found");MF.createRoot(Mde).render(m.jsx(ho.StrictMode,{children:m.jsx(mqe,{})}));export{PNe as _,Ba as c,gd as g,vqe as z};